最近更新于 2024-05-05 14:19
测试设备
树莓派4B 官方64位系统(Debian10)
树莓派cm4 官方64位系统(Debian10)
USB 转串口模块:
简述
树莓派 CPU 有两个串口,一个是硬件串口(PL011 UART),另一个是迷你串口(mini-uart)。其中迷你串口没有时钟源,受 CPU 频率影响,因此速率不太稳定,甚至无法正常使用。而默认硬件串口是分配给蓝牙使用的,如果要使用稳定的硬件串口,目前的方案是关闭蓝牙对硬件串口的使用,将硬件串口分配给 GPIO。
操作
打开串口功能
sudo raspi-config
下面这个建议选否,如果选是,那么必须以 root 才能操作串口
设置硬件串口为 GPIO 串口,以 root 权限编辑 /boot/config.txt 添加一行
dtoverlay=miniuart-bt
保存退出后重启树莓派,可以看到串口对换了
测试使用
注意 USB 转串口模块和树莓派 GPIO 要交叉接,rx 对 tx,tx 对 rx,另外再对应接上 GND 共三线就行。
树莓派终端使用 echo 数据内容 >/dev/serial0 发送数据,使用 cat /dev/serial0 接收数据
开发(py)
安装串口库
python3 -m pip install pyserial==3.5
示例程序
#!/usr/bin/env python3 """ @file serialTest.py @author IYATT-yx iyatt@iyatt.com @brief 串口测试 """ try: import serial except ModuleNotFoundError: import os os.system('pip3 install pyserial==3.5') import serial import signal class Serial(object): """串口类 收到数据后,显示出来,并将收到的数据传给发送者 """ def __init__(self): self.__ser = serial.Serial('/dev/serial0', 9600) # 端口 波特率 signal.signal(signal.SIGINT, self.__quitHander) # 注册信号,按 Ctrl + C 退出程序 def work(self): """工作 """ print('串口程序开始工作...') while True: recv = self.__ser.readline() print(recv.decode('utf-8'), end='') # 注意通信采用 UTF-8 编码,字符串应以 '\n' 结尾 self.__ser.write(recv) def __quitHander(self, signum, frame): """处理后事 """ self.__ser.close() print('退出程序') exit() if __name__ == '__main__': app = Serial() app.work()
资源
树莓派串口通信