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

Arduino与树莓派运行的Python程序串口通信1-2秒延迟问题排查

问题原因定位

硬件无故障,延迟完全来自树莓派侧的软件缓冲配置,核心依据是同款硬件、代码接桌面端运行无延迟,可直接排除陀螺仪、Arduino、传输线路的硬件故障可能。

具体问题点及修复方案

    1. 冗余串口操作
      你的Python代码中serial.Serial()构造方法执行时默认就会打开指定串口,后续额外调用ser.open()属于无效操作,虽不直接引发延迟,但属于不规范写法,建议直接删除。
    1. 串口缓冲配置问题
      pyserial默认会开启输入缓冲,初始化串口时可追加参数禁用流控、设置短超时并清空初始缓冲,避免历史数据积压:
import serial
from serial.serialutil import SerialException

# 初始化串口时追加配置
ser = serial.Serial(
    port="/dev/ttyACM0",
    baudrate=115200,
    timeout=0.5,
    rtscts=False,
    dsrdtr=False
)
# 清空初始缓冲区残留数据
ser.reset_input_buffer()
    1. 输出缓冲导致的假延迟(最高概率)
      Python默认当输出目标不是本地交互终端时(比如通过SSH远程执行脚本),print函数会启用块缓冲,数据会攒到固定大小才批量输出,观感上就是1-2秒的延迟,两种修复方案选其一即可:
    • 运行脚本时添加-u参数强制关闭缓冲:python3 -u your_script_name.py
    • 调用print时追加flush=True参数强制立即刷新输出:
    while True:
        line = ser.readline()
        if line:
            print(line, flush=True)
    

验证方法

可以直接给树莓派接显示器键盘,本地运行脚本测试延迟,如果延迟消失,即可100%确认是SSH会话+Python输出缓冲导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:09:03