-
福利一海量deepseek资料包(持续更新)
-
福利二ComfyUI工作流&模型&插件
-
福利三AI工具集合包以及AI绘画解决方案
单片机中最常用的通讯协议有 UART、I2C、SPI。今天我们来学习 UART,也就是串口通讯。
串口基本上是所有单片机中都具备的资源外设,使用它可实现程序下载,串口通信等。由于串口通信的简单方便,现如今越来越多的设备和模块支持串口通信功能,让开发工作变得越来越简单且高效。这节课我们来学习如何使用 MicroPython 控制 ESP32 的串口实现数据收发。
要了解串口通信就要先了解串行通信和并行通信:
异步串行通信
和同步串行通信
,一般同步串行方式使用较少,一般不会使用,不了解也没关系,而一定要了解的是异步串行通信方式。异步通信
是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程,为使双方收发协调,要求发送和接收的设备的时钟尽可能一致。异步通信
是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,当每个字符的各位是以固定的时间传送的,即字符之间不一定有 位间隔 的整数倍关系,但同一字符内的各位之间的距离均为 位间隔 的整数倍。异步通信的一帧字符信息由 4 部分组成,如下图所示:UART0 | UART1 | UART2 | |
---|---|---|---|
TX | 1 | 10 | 17 |
RX | 3 | 9 | 16 |
UART0 用于下载和 REPL(交互式解释器) 调试,UART1 用于模块内部连接 FLASH,通常也不使用,因此可以使用 UART2 与外部串口设备进行通信。
ESP32 的 RX2 引脚连串口模块的 TX,TX2 连 RX,让 ESP32 和 串口模块都连接电脑。
将材料按照下图相连:
UART 在 machine 的 UART 模块中,我们也是只需要了解其构造对象函数和使用方法即可。
构造函数 UART(id, baudrate, rx=None, tx=None, bits=8, parity=None, stop=1)
,作用是创建 UART 对象。
id
:0、1、2;baudrate
:波特率,常用 115200、9600;关于波特率,单片机或计算机在串口通信时的速率用波特率表示,它定义为每秒传输二进制代码的个数,即 1 波特= 1 位/秒,单位是 bps。关于波特率的计算,在串行通信中,收发双方对发送或接收数据的速率要有约定。我们的电脑可以使用串口调试工具来设置我们电脑得参数,而我们的 ESP32 单片机就只能通过编程来设置了。rx
:数据接收引脚;tx
:数据发送引脚;bits
:数据位,默认为 8,在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 8 位或 9 位长。parity
:数据校验位,默认为 None,在有效数据之后,有一个可选的数据校验位。stop
:默认为 1,停止位。from machine import UART
# 创建 uart 对象
uart = UART(2, baudrate=9600)
# 写入 5 个 字节的内容
uart.write('hello')
# 读取到第 5 位的内容
uart.read(5)
# 判断串口是否输入数据
uart.any()
因此,我们可以这么写来实现与 PC 端串口助手进行数据收发:
from machine import UART
# 定义 UART 控制对象
uart = UART(2, 115200)
# 发送数据到串口工具中
uart.write('Hello')
while True:
if uart.any():
text = uart.read(20)
print(text)