You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Raspberry Pi Pico与Pi 4 USB串口通信故障排查求助

Raspberry Pi Pico H USB串口传输数据故障排查与替代方案

问题背景

使用2021款Raspberry Pi Pico H(MicroPython 1.22.2)通过USB连接Raspberry Pi 4(Python 3.11)传输温湿度数据,Pico可正常读取传感器数据,但串口传输时频繁出现device reports readiness to read but returned no data错误,更换硬件、刷写固件后问题依旧。

核心排查点及修复步骤

1. 波特率兼容性调整

你在Pi4代码中使用了19600这个非常规波特率,而Pico的USB CDC串口为自适应波特率设计,标准波特率(如115200、9600)兼容性更强。修改Pi4代码中的波特率参数:

ser = serial.Serial('/dev/ttyACM0', 115200, timeout=2)

2. Pico端强制刷新输出缓冲区

MicroPython的USB CDC输出默认会缓冲数据,无法实时发送。在Pico代码中加入缓冲区刷新操作:

import time
import sys

while True:
    print('hello')
    sys.stdout.flush()  # 强制刷新输出缓冲区
    time.sleep(1)

3. 解决Pi4端串口权限与系统占用问题

  • 确保当前用户拥有串口访问权限,执行命令后重新登录:
    sudo usermod -a -G dialout pi
    
  • 检查并停止系统占用ttyACM0的服务:
    sudo systemctl stop serial-getty@ttyACM0.service
    sudo systemctl disable serial-getty@ttyACM0.service
    

4. 优化Pi4端串口读取逻辑

调整超时时间为合理值,并显式指定串口参数确保兼容性:

import serial

ser = serial.Serial(
    port='/dev/ttyACM0',
    baudrate=115200,
    timeout=2,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_1,
    bytesize=serial.EIGHTBITS
)
ser.flushInput()

while True:
    line = ser.readline()
    if line:
        print(line.decode('utf-8').strip())

更可靠的USB数据传输替代方案

如果串口方案仍不稳定,可尝试以下更适配物联网场景的方案:

  • MQTT消息传输:在Pi4上搭建本地MQTT broker(如Mosquitto),Pico通过USB以太网或WiFi连接到broker发布温湿度数据,Pi4作为订阅端接收数据,容错性强且支持多设备扩展。
  • USB虚拟文件系统:将Pico配置为USB大容量存储设备,把温湿度数据写入Pico的虚拟文件,Pi4直接读取文件,适合非实时批量数据传输。
  • Websocket实时传输:在Pi4上搭建简易websocket服务器,Pico通过USB网络连接服务器推送数据,无需依赖串口驱动,兼容性更好。

内容的提问来源于stack exchange,提问作者user23893926

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 02:58:32