ESP32的UART串口通信(基于micropython)
摘要
关于esp32基于micropython开发的资料不多,如MicroPython 文档,里面的例程不多。在UART串口通信上的例程更少,故今日来分享一下个人的学习收获。
软硬件环境
硬件有ESP-WROOM-32,TJC3224K028_011串口屏,USB转串口模块,杜邦线若干
软件有thonny,正点原子的XCOM,USART HMI,win10系统,还需要装好串口驱动。
正文
I have an ESP32
我学习ESP32的途径主要有MicroPython 文档和randomnerdtutorials。
esp32 上有三对UART串口,一般情况下esp32开发板的串口0是用来烧录的,串口1接了外置sd卡,所以最好使用闲置的串口2,避免发生冲突,方便调试。
首先,初始化串口2,并设置波特率为115200。关于初始化串口,还有一些参数可添加,此处这两个就够了,详情可参考此处。
from machine import UART # 导入串口模块
uart = UART(2, 115200) # 初始化一个串口
然后通过几个函数,进行数据的收发。
uart.read() # 读取所有收到的信息
uart.write('abc') # 发送abc三个字符
关于发送数据,有点py基础的人应该都知道字符串前加上标识表是不同类型的字符,如:详情可参考此处
'\xff' # 默认字符串,该转义的会转义
u'\xff' # 同上
r'\xff' # 不转义字符串
b'\xff' # 二进制字符串
而对于串口屏的数据发送,最好还是采用b'\xff'
的格式,否则会出现结束符无法被串口屏识别的情况。如
上图中有效的结束符只有第四句uart.write(b"\xff\xff\xff")
,uart.write(r"\xFF\xFF\xFF")
也不行,我试过了,反正用二进制发送准没错。
建议修改句也用二进制发送,以免出现莫名其妙不可预知的问题。
好了,此时基础的数据收发已经学会了,现在我们需要整串口屏了
I have a 串口屏
关于串口屏的学习建议参考此处,讲的非常清楚。
通过USART HMI搭一个用来演示的界面,图中蓝框选中的是数字控件n0
,右下角选中的是控件所显示的值val
,我们可以通过修改n0的val值n0.val
来改变显示的数字。
参考此处可知,通过外界串口改变串口屏控件的值需要以三个十六位进制数\xff\xff\xff
作为结束符。
好的,那我们通过usb转串口模块把ESP32的串口2连接到电脑,先在USART HMI上调试一下。
先把上面的代码稍加修改后复制下来粘到thonny里
# code: gb2312
from machine import UART # 导入串口模块
import time # 导入时间模块
uart = UART(2, 115200) # 初始化串口2,并设置波特率为115200
uart.write(b"n0.val=700") # 以二进制形式发送修改文本
time.sleep(2) # 休息两秒,此行和上面那个导入时间模块的代码删了也行
# 加上是为了在回显中能让修改式和结束符能分行
uart.write(b"\xff\xff\xff") # 发送结束符
uart.write(b"n0.val=600")
time.sleep(2)
uart.write(b"\xff\xff\xff")
print(1) # 打印个1以表结束
我们来看看输出
Ehn! ESP32串口屏
用杜邦线把串口屏和ESP32链接起来,相信应该不用我讲怎么用杜邦线连接串口屏和ESP32吧。 注意rx和tx要反接。
接好后我们就能通过ESP32向串口屏发送修改指令了。
介于桌面太乱,就不拍实物展示了。
所有文件
https://download.csdn.net/download/m0_50696464/18788059
碎碎念
你问我为什么用mpy(thonny)而不用c(arduino IDE)?这不重要。个人对py情有独钟,但凡能用py的绝不用c。
相比于串口屏,纯lcd模块太难用了。接口多就算了,各种函数看的我脑壳痛,写了几百行,界面还是丑的要命。串口屏就四个接口,VCC、GND、RX、TX用起来真心比lcd方便多了,还有上位机软件能搭建漂亮的图形界面,操作起来非常友好。如果不想在这方面走太深学个串口屏完全够用了,学lcd模块操作真没啥必要。不过价格上确实是lcd便宜,这没话说。