ESP32的UART串口通信(基于micropython)
目录
- ESP32的UART串口通信(基于micropython)
- 摘要
- 软硬件环境
- 正文
- I have an ESP32
- I have a 串口屏
- Ehn! ESP32串口屏
- 所有文件
- 碎碎念
摘要
关于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
来改变显示的数字。
好的,那我们通过usb转串口模块把ESP32的串口2连接到电脑,先在USART HMI上调试一下。
先把上面的代码稍加修改后复制下来粘到thonny里
# code: gb2312 # 在串口屏中使用的字库的编码是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向串口屏发送修改指令了。
介于桌面太乱,就不拍实物展示了。
所有文件
碎碎念
你问我为什么用mpy(thonny)而不用c(arduino IDE)?这不重要。个人对py情有独钟,但凡能用py的绝不用c。说实话,比如点个灯
点灯大师就是我用mpy写就两三行的事,用C语言写简直要把我折磨死对不起是我才疏学浅学业不精知难而退虽说很多人都说用C语言比较好效率比较高运行速度比较快,但作为一个只想做点小东西的非嵌入式相关专业的学生,要我去接触底层的hal库或是寄存器之类的简直是要我的命。人生苦短,我用python,这句话可不只是随便说说的啊。相比于串口屏,纯lcd模块太难用了。接口多就算了,各种函数看的我真的脑壳痛,写了几百行,整个界面还是丑。串口屏就四个接口,VCC、GND、RX、TX用起来真心比lcd方便多了,还有上位机软件能搭建漂亮的图形界面,操作起来非常友好。如果不想在这方面走太深学个串口屏完全够用了,学lcd模块操作真没啥必要。不过价格上确实是lcd便宜,这没话说。