Arduino Uno接收Python串口预设字符串后无响应问题求助
Arduino串口指令无响应问题排查与修复
问题核心原因
- 串口触发Arduino重启:Python打开USB串口时,多数USB转串口模块会触发Arduino的DTR引脚,导致板卡重启,此时刚发送的指令会被丢失,仅能看到指示灯短暂闪烁。
- 字符串匹配不精准:原代码中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
相关产品推荐
相关产品推荐

