爱与魔法与bug都是存在的 2025-07-18 15:32 采纳率: 37.5%
浏览 9
已结题

当pc发送消息给树莓派4b时,树莓派有显示但是使用serial,树莓派发送消息给pc,但是树莓派上显示发送成功,可是pc的串口就是没有接收到,如何解决?

我在使用串口通讯实现树莓派4b与pc之间信息的发送和接收。
当pc发送消息给树莓派4b时,树莓派有显示
但是使用serial,树莓派发送消息给pc,pc却没有显示,但是树莓派上显示发送成功,可是pc的串口就是没有接收到。

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2025-07-18 15:33
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    你描述的问题是:树莓派4B发送消息给PC时,树莓派显示发送成功,但PC端没有接收到数据。这通常涉及串口通信的配置、硬件连接、驱动或软件设置等方面的问题。


    问题分析

    1. 硬件连接问题

      • 串口线(如USB转TTL)是否正确连接?
      • TXD(发送)和 RXD(接收)是否交叉连接?
      • 是否使用了正确的引脚?例如,树莓派的 UART 引脚是否被禁用?
    2. 软件配置问题

      • 树莓派的 /boot/config.txt 中是否启用了 UART?
      • 树莓派的 serial 接口是否被系统占用(如用于蓝牙、console 等)?
    3. PC端串口工具问题

      • 使用的串口调试助手是否支持正确的波特率、数据位、停止位、校验位等。
      • PC端是否开启了串口监听?
    4. 驱动或权限问题

      • 树莓派是否对串口设备有访问权限?
      • PC端是否识别到了串口设备?

    🔧 解决方案

    以下是解决该问题的详细步骤:

    1. 检查硬件连接

    • 确认串口线是否正确连接

      • 树莓派的 TXD 连接到 PC 的 RXD
      • 树莓派的 RXD 连接到 PC 的 TXD
      • GND 必须共地
    • 使用万用表测试连接

      • 检查 TXD 和 RXD 是否导通
      • 检查 GND 是否连接正确

    注意:不要将树莓派的 GPIO 引脚直接接到 PC 的 USB 接口,否则可能损坏硬件!


    2. 检查树莓派的 UART 配置

    • 打开树莓派终端,运行以下命令查看当前配置:
    sudo nano /boot/config.txt
    
    • 确保以下内容存在(如果不存在,请添加):
    enable_uart=1
    
    • 如果你使用的是树莓派 4B,并且使用了 USB 转 TTL 模块,还需要确保 禁用蓝牙(因为蓝牙会占用 UART):
    dtoverlay=disable-bt
    

    保存文件后重启树莓派:

    sudo reboot
    

    3. 检查树莓派的串口设备

    • 查看树莓派上的串口设备:
    ls /dev/tty*
    
    • 正常情况下,你应该看到类似 /dev/ttyAMA0/dev/ttyS0 的设备。

    • 如果没有看到这些设备,说明 UART 可能未被启用或驱动未加载。


    4. 检查 PC 端的串口设备

    • 在 PC 上打开设备管理器(Windows)或使用 dmesg(Linux)查看串口设备是否被识别。

    • Windows

      • 打开设备管理器 → 看是否有“USB-SERIAL CH340”或其他串口设备出现。
    • Linux/Ubuntu

      • 运行以下命令查看串口设备:
    dmesg | grep tty
    
    • 应该能看到类似 ttyUSB0 的设备。

    5. 检查串口通信参数

    • 确保树莓派与 PC 使用相同的 波特率(Baud Rate)数据位(Data Bits)停止位(Stop Bits)校验位(Parity)

      • 常见值为:9600, 8N1(即 8 数据位,无校验,1 停止位)
    • 在 Python 中使用 pySerial 示例代码如下

    import serial
    
    # 树莓派发送到 PC 的代码
    ser = serial.Serial('/dev/ttyAMA0', 9600)  # 根据实际情况修改串口设备名
    ser.write(b'Hello from Raspberry Pi')
    print("Message sent")
    

    注意: 如果你使用的是 USB 转 TTL 模块,串口设备可能是 /dev/ttyUSB0


    6. 检查 PC 端串口调试工具

    • 使用串口调试助手(如:XCOM、Putty、RealTerm、Miniterm 等)进行测试。

    • 确保:

      • 选择正确的 COM 端口(如 COM3)
      • 设置波特率为 9600
      • 数据格式为 8N1
      • 打开端口并开启监听

    7. 检查权限问题

    • 在 Linux 下,可能需要以 root 权限运行程序才能访问串口设备:
    sudo python3 your_script.py
    
    • 或者将用户加入 dialout 组:
    sudo usermod -a -G dialout $USER
    
    • 然后重新登录或重启。

    总结:关键检查点

    | 项目 | 检查内容 | |------|----------| | 硬件连接 | TXD-RXD 交叉连接,GND 共地 | | UART 配置 | /boot/config.txt 中启用 UART | | 设备识别 | 树莓派和 PC 是否识别到串口设备 | | 参数一致 | 波特率、数据位、校验位等必须一致 | | 权限问题 | 是否有权限访问串口设备 | | 工具设置 | 串口调试助手是否正确配置 |


    🛠️ 示例代码(Python)

    树莓派发送消息给 PC 的代码(发送端):

    import serial
    
    # 替换为你的串口设备路径(如 /dev/ttyAMA0 或 /dev/ttyUSB0)
    ser = serial.Serial('/dev/ttyAMA0', 9600)
    
    # 发送消息
    ser.write(b'Hello from Raspberry Pi')
    print("Message sent to PC")
    
    # 关闭串口
    ser.close()
    

    PC 接收消息的代码(接收端):

    import serial
    
    # 替换为你的串口设备路径(如 COM3 或 /dev/ttyUSB0)
    ser = serial.Serial('COM3', 9600)
    
    while True:
        if ser.in_waiting > 0:
            data = ser.readline().decode('utf-8').strip()
            print("Received:", data)
    

    如果你按照上述步骤操作仍然无法解决问题,可以提供更详细的硬件型号、使用的串口模块、操作系统版本等信息,我可以进一步帮助你排查。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 7月26日
  • 已采纳回答 7月18日
  • 创建了问题 7月18日