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

Python向Arduino串口发送长字符串无返回数据故障排查

问题原因

你遇到的Arduino收不到数据、Python读不到回传的问题,是几个典型的串口通信低级错误导致的:

  • 打开串口后没有等待Arduino复位:Python执行serial.Serial()打开串口的瞬间,会触发连接的Arduino硬件自动复位,整个重启+初始化流程需要1.5~2秒,你打开串口立刻执行write发送数据,此时Arduino还在跑bootloader,根本不会响应串口数据,所以Serial.available()始终检测不到输入。
  • 两端超时设置过短:Arduino端Serial.setTimeout(1)设置的是1ms超时,这个时间短到根本来不及读完一整行带换行符的数据,会直接返回空值;Python端1秒的读超时虽然勉强够用,但遇到串口波动很容易读空。
  • Arduino回传没有加换行结束符:Python端readline()是读到\n字符才会认为一行数据结束并返回,你Arduino用Serial.print(data)回传时末尾不带\n,Python端会一直等直到超时,自然没有输出。
  • 额外排查点:测试前要关掉Arduino IDE自带的串口监视器、其他串口调试工具,这些软件会抢占COM口权限,导致Python端虽然实例化了串口对象,实际无法正常收发数据。
修正后可运行代码

Python端

import serial
import time

array = ["the first", "second","third", "fourth", "fifth", "sixth"]

# 初始化串口,适当拉长读超时
serialArduino = serial.Serial("COM3", 9600, timeout=2, write_timeout=1)
# 核心:等待Arduino重启完成
time.sleep(2)

# 拼接待发送字符串
data = ""
for item in array:
    data += f"{item}#"
data += '\n'    

print("发送内容:", data)
serialArduino.write(data.encode('utf-8'))

# 读取回传内容,统一用utf-8解码即可
finalData = serialArduino.readline().decode('utf-8').strip()
print("Arduino回传内容:", finalData)

serialArduino.close()

Arduino端

void setup() {
  Serial.begin(9600);
  // 超时调整为100ms,足够读完一整行短数据
  Serial.setTimeout(100);
}

void loop() {
  if(Serial.available() > 0){
    String data = Serial.readStringUntil('\n');   
    // 回传时用println自动在末尾加\n,匹配Python端readline的结束判定
    Serial.println(data);
  }
}
字符串数组拆分参考

等收发正常后,你可以在Arduino端用下面的逻辑拆分#分隔的字符串,还原成原始数组:

// 提前定义数组存拆分结果,长度根据实际需求调整
String recvArr[10];
int arrIdx = 0;

void loop() {
  if(Serial.available() > 0){
    String data = Serial.readStringUntil('\n');   
    arrIdx = 0;
    int startPos = 0;
    int splitPos = data.indexOf('#');
    // 循环按#分割
    while(splitPos != -1){
      recvArr[arrIdx] = data.substring(startPos, splitPos);
      arrIdx++;
      startPos = splitPos + 1;
      splitPos = data.indexOf('#', startPos);
    }
    // 测试:打印拆分后的每个元素
    for(int i=0; i<arrIdx; i++){
      Serial.println(recvArr[i]);
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:06:23