最近更新于 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()

资源
树莓派串口通信
