树莓派5实现串口通信教程
1,安装依赖
确保已经安装 pyserial:
pip3 install pyserial
如果无法用pip3安装,那就创建一个虚拟环境进行安装
如果你想安装最新版本的 pyserial 或其它非 Debian 打包的库,建议在用户目录下创建一个虚拟环境:
安装完整的 Python3(如果尚未安装)
sudo apt update
sudo apt install python3-full python3-venv
在你的项目目录创建并激活 venv
cd ~/myproject
python3 -m venv venv
source venv/bin/activate
然后就可以在虚拟环境中用 pip 安装
pip install pyserial
运行脚本时,确保虚拟环境已激活((venv) 出现在命令行提示符),这样 import serial 就能找到你通过 pip 安装的包。
若要退出虚拟环境,执行
deactivate
2,启用串口
在树莓派上执行 sudo raspi-config,进入 Interface Options → Serial Port,
“Would you like a login shell to be accessible over serial?” 选择 No
“Would you like the serial port hardware to be enabled?” 选择 Yes
重启后,串口 /dev/serial0 就可用了。
特别注意,如果还是不能用,多半是映射错误:
串口未启用或映射错误
在 Raspberry Pi 5 上,/dev/serial0 默认是否真正映射到了 UART0,要确认。
请先确认 /boot/firmware/config.txt 中是否有以下配置(最重要的):
enable_uart=1
dtoverlay=uart0
然后执行:
ls -l /dev/serial0
你应看到:
serial0 -> ttyAMA0
特别注意:树莓派5的uart0引脚是GPIO14(TXD),GPIO15(RXD)
3,做好上面配置后,借鉴以下代码即可进行树莓派5的串口通信
#!/usr/bin/env python3
# -*- coding: utf-8 -*-import serial
import timedef main():# 串口设备名称,树莓派 5 上 /dev/serial0 通常会映射到 UART0port = '/dev/serial0'# 波特率(根据需要修改,常用 9600、115200 等)baudrate = 115200# 打开串口try:ser = serial.Serial(port=port,baudrate=baudrate,bytesize=serial.EIGHTBITS,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,timeout=1) # 读取超时 1 秒except serial.SerialException as e:print(f"无法打开串口 {port}: {e}")returnprint(f"串口 {port} 已打开,波特率 {baudrate}")try:while True:# 要发送的字符串msg = "hello word?"# 注意要发送 bytes,末尾可加 \r\n 根据接收端需求ser.write(msg.encode('utf-8') + b'\r\n')print(f"已发送: {msg}")# 读取接收缓存中的所有数据incoming = ser.readline().decode('utf-8', errors='ignore').strip()if incoming:print(f"接收到: {incoming}")# 每隔 1 秒发送一次time.sleep(1)except KeyboardInterrupt:print("\n检测到 Ctrl+C,中断程序。")finally:ser.close()print("串口已关闭。")if __name__ == '__main__':main()