Arduino缓存串口连接?

时间:2016-04-01 22:57:22

标签: python serialization arduino

我正在尝试使用python从我的计算机上与我的arduino进行通信。我有一个arduino在1末尾发送一个setup()串口,因为它是在建立串行连接时运行的。然后,在python中,我在向arduino发送任何内容之前先听取1

这是我的arduino代码:

int ledPin = 2;

void setup() {
    Serial.begin(9600);
    pinMode(ledPin, OUTPUT);
    Serial.write(1); // Ready signal
    digitalWrite(ledPin, HIGH); // For troubleshooting
    delay(200);
    digitalWrite(ledPin, LOW);
    delay(200);
    digitalWrite(ledPin, HIGH);
    delay(200);
    digitalWrite(ledPin, LOW);
}

void loop(){

}

我的python:

import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600)

ser.read(1) # Arduino sends one byte when serial connection established
print("Serial connected")
ser.close()

我第一次连接时效果很好。我明白了:

$ python pyserialtest.py
Serial connected

但是第二次运行脚本时,没有任何反应。该脚本只是挂起。我认为这是因为串行连接是通过python或arduino缓存的,因此setup()不运行。我试图通过在脚本末尾调用ser.close()来尝试清除连接,但它仍然无法正常工作来解决此问题。

我的arduino是uno rev 3. Python版本2.7.6。

1 个答案:

答案 0 :(得分:0)

请记住,Arduino setup方法只运行一次。因此,第二次运行脚本时,您的脚本正在等待单字节串行确认,但它将永远等待,因为setup方法已经运行并将该字节发送到脚本的第一个实例。如果此时重新启动Arduino,它将再次运行setup,发送确认字节,然后您的脚本就会继续。