ESP32的UART串口通信(基于micropython)

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'的格式,否则会出现结束符无法被串口屏识别的情况。如用正点的xcom的所反馈结果
USART HMI上串口调试结果
上图中有效的结束符只有第四句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以表结束

我们来看看输出
gif

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便宜,这没话说。

  • 7
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值