Python串行写入不';第一次不工作

Python串行写入不';第一次不工作,python,arduino,serial-port,Python,Arduino,Serial Port,我有两个程序来测试串行通信,一个简单的arduino程序回显串行端口上的任何内容,一个python程序写入串行端口并打印回复 我遇到了一个问题,每当我上传arduino程序并在上传后第一次尝试运行python时,它都会被困在print ser.readline()上,我假设这意味着由于某种原因python没有写入串行端口。我将不得不退出python程序并再次运行它,以获得arduino的回复。该程序将继续工作,直到我重新上传arduino,然后python再次无法在第一次运行时工作。此外,如果在

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

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

阿杜伊诺

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

  }
}
蟒蛇

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)
另外,请看一看我添加的

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

打开串行端口后,问题得到修复。

该问题可能与新串行连接时许多Arduinos重置有关


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

当python程序“不工作”时会出现什么错误?通常,在将新软件上载到Arduino之后,您必须等待几秒钟,然后才能尝试连接到它。