Python 串行写入首先不起作用 运行

Python serial write doesn't work FIRST run

我有 2 个程序来测试串行通信,一个简单的 arduino 程序可以回显串行端口上的任何内容,还有一个 python 程序可以写入串行端口并打印回复。

我遇到一个问题,每当我上传 arduino 程序并在我上传后第一次尝试 运行 python 时,它会卡在 print ser.readline() 上我假设出于某种原因 python 没有写入串口。我将不得不退出 python 程序并再次 运行 它才能得到 arduino 的回复。该程序将继续工作,直到我重新上传 arduino 然后再一次 python 将无法在第一个 运行 上工作。此外,如果我在 运行 python 程序之前打开和关闭串行监视器,它将在第一个 运行 工作。有谁知道是什么问题?这是在 Ubuntu.

arduino

String str;

void setup() {                
// Turn the Serial Protocol ON
  Serial.begin(115200);
}

void loop() {
  if (Serial.available()) {
      str = Serial.readStringUntil('\n');     // Read the serial input
      Serial.println(str);             // sends ascii code

  }
}

Python

import serial


ser = serial.Serial('/dev/ttyACM1', 115200)

for i in range(0,4):
    str = "test string\n"
    ser.write(str)
    print ser.readline()

默认情况下 python Serial 可能在默认情况下被阻止尝试删除超时:

ser = serial.Serial('/dev/ttyACM1', 115200,timeout=0)

另外看一下 serial.threaded in the docs

我加了

time.sleep(1)
ser.setDTR(level=0)
time.sleep(1)

打开串口后问题解决

该问题可能与许多 Arduino 在建立新的串行连接时重置有关。

解决方案是在正在创建的串行连接和发送的第一个数据之间向 python 程序添加延迟(大约 2 秒有效),或者修改硬件以防止串行连接重置.