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

PySerial与Arduino通信时readline返回b''的原因排查求助

问题分析与解决方案

输出b''说明Python的serialcomm.readline()未读取到Arduino返回的任何数据,常见原因及对应解决方法如下:

  • Arduino端未实现数据回发逻辑
    你的Python代码仅向串口发送数据,但如果Arduino程序没有读取串口数据并回发的逻辑,自然不会有数据返回。Arduino需要添加类似如下的代码:

    void setup() {
      Serial.begin(9600); // 波特率必须与Python端完全一致
    }
    
    void loop() {
      if (Serial.available() > 0) {
        String input = Serial.readStringUntil('\n'); // 读取Python发送的数据
        Serial.println(input); // 将数据回发给Python,需带换行符(匹配Python的readline())
      }
    }
    
  • 串口参数不匹配
    确保Python与Arduino的波特率、数据位、停止位、奇偶校验完全一致。你的Python代码使用9600波特率,Arduino代码里必须对应写Serial.begin(9600),参数不匹配会导致数据传输乱码或无法接收。

  • 串口端口错误
    确认COM3确实是Arduino设备对应的端口。可在Windows设备管理器的「端口(COM和LPT)」中查看Arduino连接后的实际端口号,可能是COM4、COM5等,端口错误会导致无法建立有效连接。

  • readline()依赖换行符
    Python的serial.readline()会等待串口传来换行符(\n)才返回数据,如果Arduino回发的数据不带换行符,readline()会在1秒超时后返回空字节串b''。因此Arduino回发时必须用Serial.println()(自动添加换行),而非Serial.print()。

  • 串口缓存未清空
    程序启动时串口缓存可能残留旧数据或空数据,建议在发送数据前清空缓存:

    serialcomm = serial.Serial('COM3', 9600)
    serialcomm.timeout = 1
    serialcomm.flushInput() # 清空输入缓存
    serialcomm.flushOutput() # 清空输出缓存
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:42:53