1. 引言
本篇介绍ESP32上通过MicroPython实现串口数据的收发。
2. 环境介绍 2.1. 硬件
ESP32 小板:
Micro USB线:
USB转TTL:
2.2. 软件
1) PC端Wndows系统,Python 2.7环境 或者 Python 3.4以及更新的版本
2) 板子上Micropython 环境
将板子G12引脚和USB转TTL的RXD引脚短接
将板子G13引脚和USB转TTL的TXD引脚短接
将板子GND引脚和USB转TTL的GND引脚短接
3. 串口 发送
代码如下:
from machine import UART,Pinuart = UART(2, baudrate=115200, rx=13,tx=12,timeout=10)uart.write("ESP32 uart send example!\r\n")
运行结果如下,
完成的功能即:ESP32通过串口发送数据给USB转TTL
4. 串口接收
代码如下:
from machine import UART,Pinuart = UART(2, baudrate=115200, rx=13,tx=12,timeout=10)while True: if uart.any(): rev_data = uart.read() print(rev_data)
结果如下:在左侧窗口里发送什么,右侧窗口就会接收到什么。
完成的功能即:USB转TLL通过串口发送数据给ESP32
如果改为:
from machine import UART,Pinuart = UART(2, baudrate=115200, rx=13,tx=12,timeout=10)while True: if uart.any(): rev_data = uart.read() print(rev_data.decode())
结果如下:
两者的输出结果有差异,这里涉及到Python中bytes和str两种数据类型的问题,readline函数的返回值是bytes类型。
strings可以被编码(encode)成字bytes,bytes也可以解码(decode)成strings
更多关于UART使用可以参考:docs.micropython.org/en/latest/library/machine.UART.html
5. 自发自收实验
cirmall.com/bbs/thread-102657-1-1.html 这里有个自发自收的例子,将G12和G13短接在一起。
运行结果如下:
使用上一篇介绍的通过 ampy --port COM3 run --no-output uart.py 方法,在串口中可以看到输出结果如下:
细心的读者,有没有发现两者输出结果有什么不同吗?
如果没看出来的话,提示一下,大家看看Send Byte: 后面有什么不同。
这个原因我想了一段时间,大家知道什么原因吗,欢迎评论区留言。