物联网开发笔记(30)- 使用Micropython开发ESP32开发板之控制240x240的oled屏幕显示二维码(ST7789芯片)
一、目的
在我们的240x240的oled屏幕上显示二维码
二、环境
ESP32 + 240x240的oled彩色屏幕+ Thonny IDE + 几根杜邦线
接线方式请看上前面的章节,此处不再重复赘述。
三、用到的模块
在电脑端可以直接用qrcode模块,很容易得到二维码,但是这个模块不能直接用到MicroPython上,需要移植到MicroPython,国外一个开发者已经搞定了,地址如下
https://github.com/JASchilz/uQR
三、代码
from uQR import QRCode # 导入二维码模块
from machine import Pin, SPI
import st7789_new # 导入屏幕驱动tft = st7789_new.ST7889_Image(SPI(2, 80000000), dc=Pin(2), cs=Pin(5), rst=Pin(15)) #通过SPI来创建屏幕
tft.fill(st7789_new.color565(255, 255, 255)) # 背景设置为白色qr = QRCode(border=2) # 创建对象
qr.add_data('Hello World!') # 这里是要生成的二维码,被扫码之后的得到的内容
matrix = qr.get_matrix() # 得到的是一个25x25的列表row_len = len(matrix)
col_len = len(matrix[0])# 放大倍数
# 默认情况下输出的二维码太小25x25,可以按照你实际屏幕的大小进行缩放,当前我的240x240屏幕缩放8倍正合适
scale_rate = 8for row in range(row_len * scale_rate): # 原来默认的25行乘以8for col in range(col_len * scale_rate): # 原来默认的25列乘以8if matrix[row//scale_rate][col//scale_rate]: # 发送一个点的信息给屏幕tft.pixel(row, col, st7789_new.color565(0, 0, 0))else:tft.pixel(row, col, st7789_new.color565(255, 255, 255))col += 1row += 1
#v上面操作每次计算出一个点的信息就通过SPI发送1个,传输速度慢
四、显示效果
五、优化代码,加速显示
我们发现上面的方法,显示的很慢。所以我们下面来优化一下,使他快速显示。
六、加速显示的代码
from uQR import QRCode
from machine import Pin, SPI
import st7789_newtft = st7789_new.ST7889_Image(SPI(2, 80000000), dc=Pin(2), cs=Pin(5), rst=Pin(15))
tft.fill(st7789_new.color565(255, 255, 255)) # 背景设置为白色qr = QRCode(border=2)
qr.add_data('Hello World!')
matrix = qr.get_matrix()row_len = len(matrix)
col_len = len(matrix[0])print("row=%d, col=%d" % (row_len, col_len))# 放大倍数
scale_rate = 8# 准备黑色,白色数据
buffer_black = bytearray(scale_rate * scale_rate * 2) # 每个点pixel有2个字节表示颜色
buffer_white = bytearray(scale_rate * scale_rate * 2) # 每个点pixel有2个字节表示颜色
color_black = st7789_new.color565(0, 0, 0)
color_black_byte1 = color_black & 0xff00 >> 8
color_black_byte2 = color_black & 0xff
color_white = st7789_new.color565(255, 255, 255)
color_white_byte1 = color_white & 0xff00 >> 8
color_white_byte2 = color_white & 0xfffor i in range(0, scale_rate * scale_rate * 2, 2):buffer_black[i] = color_black_byte1buffer_black[i + 1] = color_black_byte2buffer_white[i] = color_white_byte1buffer_white[i + 1] = color_white_byte2# 循环次数不增加,只增加每次发送的数据量,每次发送scale_rate X scale_rate个点的信息
for row in range(row_len):for col in range(col_len):if matrix[row][col]:# tft.pixel(row, col, st7789_new.color565(0, 0, 0))tft.show_img(row * scale_rate, col * scale_rate, row * scale_rate + scale_rate - 1, col * scale_rate + scale_rate - 1, buffer_black)else:# tft.pixel(row, col, st7789_new.color565(255, 255, 255))tft.show_img(row * scale_rate, col * scale_rate, row * scale_rate + scale_rate - 1 , col * scale_rate + scale_rate - 1, buffer_white)col += 1row += 1
七、加速的显示效果
可以明显的看到屏幕加载显示二维码的速度加快了。
物联网开发笔记(30)- 使用Micropython开发ESP32开发板之控制240x240的oled屏幕显示二维码(ST7789芯片)相关推荐
- 物联网开发笔记(27)- 使用Micropython开发ESP32开发板之控制240x240的oled屏幕(ST7789芯片)
这一节我们讲解了如何控制240x240的oled屏幕,该oled屏幕驱动芯片是ST7789,我们控制屏幕显示两行字. 一.目的 使用MicroPython开发ESP32开发板控制240x240的ole ...
- 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第12波-快速生成、读取、导出条形码二维码...
根据指定的内容生成对应的条形码或二维码,在如今移动互联网时代,并不是一件什么新鲜事,随便百度一下,都能找到好多的软件或在线网站可以帮我们做到,但细想一下,如果很偶然地只是生成一个两这样的图形,百度一下 ...
- 物联网开发笔记(31)- 使用Micropython开发ESP32开发板之手机扫二维码远程控制开关灯(1)
一.目的 我们分3节讲述远程控制.这一节在我们的240x240的oled屏幕上显示二维码,然后用手机扫二维码,从开发板的TCP服务器上返回字符串. 二.环境 ESP32 + 240x240的oled彩 ...
- 物联网开发笔记(32)- 使用Micropython开发ESP32开发板之手机扫二维码远程控制开关灯(2)
一.目的 上一节我们测试了远程控制的环境是好的,这一节在我们的240x240的oled屏幕上显示二维码,然后用手机扫二维码,远程控制LED灯的状态. 二.环境 ESP32 + 240x240的oled ...
- ESP32开发学习 LVGL Littlevgl 创建显示二维码
生成效果: LVGL除了一些常用UI控件外,还提供了很多第三组件可以集成,例如jpg,bmp,gif,png,二维码. LVGL提供的生成器使用的是 nayuki 的二维码生成器,本文我们就来移植LV ...
- MLX90640开发笔记(一)概述及开发资料准备
现在自己在做红外成像仪的越来越多了,两年前有个井下机电设备运行状态的科研项目,当时使用了AMG8833(8*8像素).前段时间因为公司生产电路板测试需要,打算买一台红外成像仪测量电路板发热是否正常,商 ...
- IOS 开发笔记——二维码的生成和扫描
开发当中我们经常遇到二维码的生成或者说是扫描,但是苹果官方给我们准备好了这些 API,那么接下来作者为大家详细讲述一下二维码 在二维码的生成中,我们要用到一个类CIFilter,这是系统的一个滤镜类, ...
- 云炬Android开发笔记 16附加功能开发(二维码,一键分享,分页,搜索)
阅读目录 1.二维码高性能解决方案 1.1推荐的库的使用 1.2 扫描到数据回调的处理 2. 一键分享功能的使用 2.1 第三方功能的使用 2.2 逻辑增加 2.3 编译测试 3.分页功能实现 4. ...
- 【OpenCV 4开发详解】QR二维码检测
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
最新文章
- centos上安装anaconda并配置虚拟环境
- 原型模式(Prototype)以及深浅复制
- js获取本地文件夹和文件 .
- Jquery的load加载本地文件出现跨域错误的解决方案
- 个人空间html5主页面,2.HTML 教程- (HTML5 简介)
- 越做越好的adobe acrobat
- AES 主动转向 紧急转向 避障系统 转向避障 五次多项式 PID控制 纯跟踪控制 MPC控制 模型预测
- LeetCode 69. x 的平方根
- vue 左侧菜单可拖动
- UMTS到LTE的系统架构演进(学习整理:LTE完全指南-LTE、LTE-Advanced、SAE、VolTE和4G移动通信)
- virtualbox 创建桥接网络_VirtualBox 配置虚拟网卡(桥接),实现主机-虚拟机网络互通...
- BeanCurrentlyInCreationException异常分析及解决
- Android Home键按键事件监听
- paper 43 :ENDNOTE下载及使用方法简介
- GitHub 近 70K 星,命令行的艺术!
- 自动分账系统怎么开通?
- 【暴力枚举】二进制枚举-幼儿园买玩具
- 超声波脉冲发生器可调电源设计
- PMP试题 | 每日一练,快速提分(十二)
- RISC-V架构的开源处理器分析
热门文章
- 手机远程连接window界面或ubuntu界面
- 玩机器人可以学到什么?
- OCR文档识别的工作原理
- COLA之架构演变(一)
- 华为Mate40系列国行参数价格曝光
- 棋牌算法——“贰柒拾”(字牌)
- excel将柱状图的柱宽减为直线的方法 作x轴垂线的方法
- 计算机房 危险源辨识,消防安全重点部位不仅要根据火灾危险源的辨识来确..._消防考试_帮考网...
- MATLAB如何固定text在图中的相对位置
- SDL版仙剑奇侠传读后感