树莓派4B串口通讯

chat 牛!备份一个,以下内容均来自chat老师
以下是一个完整的树莓派串口通信示例程序,包含发送和接收功能,并处理了树莓派特有的串口配置问题:

import serial
import time

def uart_communication():
    try:
        # 使用树莓派推荐的串口别名
        port_name = "/dev/serial0"
        
        # 配置串口参数
        uart = serial.Serial(
            port=port_name,
            baudrate=9600,
            bytesize=serial.EIGHTBITS,
            parity=serial.PARITY_NONE,
            stopbits=serial.STOPBITS_ONE,
            timeout=1.0,           # 读超时1秒
            write_timeout=1.0,     # 写超时1秒
            xonxoff=False,         # 禁用软件流控
            rtscts=False           # 禁用硬件流控
        )
        
        # 确保串口已打开
        if not uart.is_open:
            uart.open()
            
        print(f"串口 {port_name} 已打开, 波特率: {uart.baudrate}")
        
        # 测试消息
        test_message = "Hello from Raspberry Pi!\n"
        
        while True:
            try:
                # 发送数据
                print(f"发送: {test_message.strip()}")
                uart.write(test_message.encode('utf-8'))
                
                # 接收数据
                start_time = time.time()
                response = uart.readline()
                
                if response:
                    print(f"收到: {response.decode('utf-8').strip()}")
                else:
                    print("未收到响应数据 (超时)")
                
                # 等待2秒进行下一次通信
                time.sleep(2)
                
            except KeyboardInterrupt:
                print("\n程序被用户中断")
                break
            except Exception as e:
                print(f"通信错误: {str(e)}")
                break
                
    except serial.SerialException as e:
        print(f"串口初始化失败: {str(e)}")
        print("请检查:")
        print("1. 串口物理连接 (TX/RX)")
        print("2. 用户权限 (尝试: sudo usermod -a -G dialout $USER 然后注销重登)")
        print("3. 树莓派配置 (sudo raspi-config -> Interface Options -> Serial)")
    finally:
        if 'uart' in locals() and uart.is_open:
            uart.close()
            print("串口已关闭")

if __name__ == "__main__":
    uart_communication()

使用前必备步骤:

1.启用树莓派串口

sudo raspi-config

选择:

  • Interface Options → Serial Port

  • 禁用登录shell(选择"No")

  • 启用串口硬件(选择"Yes")

2.添加用户到dialout组

sudo usermod -a -G dialout $USER

   注销后重新登陆使权限生效

3.检查串口映射

ls -l /dev/serial*

正常应显示:

/dev/serial0 -> ttyAMA0
/dev/serial1 -> ttyS0

硬件连接指南:

树莓派         其他设备
=======================
GPIO14 (TXD) ---> RXD
GPIO15 (RXD) ---> TXD
GND         ---> GND

测试方法:

  1. 自发自收测试(短接TX-RX):

    • 用杜邦线连接树莓派的GPIO14(TXD)和GPIO15(RXD)

    • 直接运行程序,将看到自发自收的消息

  2. 与另一设备通信:

    • 连接USB转TTL模块的RX到树莓派TX

    • 连接USB转TTL模块的TX到树莓派RX

    • 两边共接地线(GND)

    • 使用串口调试助手(如Putty、minicom)在电脑端接收和发送数据

常见问题解决:

1.权限问题

sudo chmod a+rw /dev/serial0

2.禁用蓝牙(如使用ttyAMA0)

编辑/boot/config.txt添加:

dtoverlay=disable-bt

3.检查串口活动

sudo dmesg | grep tty

4.测试串口回环

stty -F /dev/serial0 9600
echo "test" > /dev/serial0
cat < /dev/serial0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值