树莓派串口通信

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

资源

串口驱动

串口上位机

树莓派串口通信
Scroll to top