繁体   English   中英

Python串行写入不起作用第一次运行

[英]Python serial write doesn't work FIRST run

我有 2 个程序来测试串行通信,一个简单的 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()

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

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

默认情况下,python Serial 可能会在默认情况下阻塞,请尝试删除超时:

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

另外看看文档中的serial.threaded

我加了

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

打开串口后问题就解决了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM