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

Arduino Uno接收Python串口预设字符串后无响应问题求助

Arduino串口指令无响应问题排查与修复

问题核心原因

  1. 串口触发Arduino重启:Python打开USB串口时,多数USB转串口模块会触发Arduino的DTR引脚,导致板卡重启,此时刚发送的指令会被丢失,仅能看到指示灯短暂闪烁。
  2. 字符串匹配不精准:原代码中Arduino使用readString()读取数据,该函数默认会等待串口超时(默认1000ms)才结束读取,且未处理隐形空白字符(如换行、回车),导致字符串匹配失败。

修正后的代码

Python端代码

import serial, time
# 打开串口后延迟2秒,等待Arduino完成重启
arduino = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
time.sleep(2)
cmd = ''
while cmd != '0':
    cmd = input('Enter a cmd ')
    # 追加换行符作为串口数据的结束标记
    arduino.write((cmd + '\n').encode('ascii'))

Arduino端代码

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    // 读取到换行符即停止,避免超时等待
    String stringFromSerial = Serial.readStringUntil('\n');
    // 去除字符串两端的空白字符(换行、回车、空格等)
    stringFromSerial.trim();
    if (stringFromSerial == "1") {
      Serial.println("Received cmd: 1");
    } else if (stringFromSerial == "2") {
      Serial.println("Received cmd: 2");
    } else if (stringFromSerial == "3") {
      Serial.println("Received cmd: 3");
    } else if (stringFromSerial == "0") {
      Serial.println("Exiting...");
    } else {
      Serial.println("Not recognized cmd");
    }
  }
}

关键修正点说明

  • Python端:新增2秒延迟确保Arduino重启完成后再发送指令;发送时追加换行符,给Arduino明确的数据结束标记。
  • Arduino端:改用readStringUntil('\n')替代readString(),避免无意义的超时等待;通过trim()清除字符串两端的隐形空白字符,保证指令匹配精准;新增对"0"指令的处理,与Python端退出逻辑对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:50:28