减少Arduino和Python之间串行通信时的延迟

时间:2016-11-10 17:10:23

标签: python arduino serial-port pyserial

使用串行通信在Arduino和Python之间进行通信时,Python程序需要等待一秒钟或更长时间才能执行代码:

import serial as ser


prt = ser.Serial(
port='COM18',
baudrate=9600,
parity=ser.PARITY_NONE,
stopbits=ser.STOPBITS_ONE,
bytesize=ser.EIGHTBITS
)


while 1:
    prt.write(str(0) + '\r\n')
    time.sleep(1) #I want to reduce this time
    prt.write(str(1) + '\r\n')
    time.sleep(1)

此代码包含sleep(1)。它使我的Python程序停留了一秒钟。我想删除或减少这个时间。我试图使用0.9,Arduino没有正确响应。

这是我的Arduino计划:

#define led 13

void setup() {
  Serial.begin(9600);
  pinMode(led, OUTPUT);

}

void loop() {
byte incomingByte;

if (Serial.available() > 0) {
  incomingByte = Serial.read();
  switch (incomingByte) {
    case '1':
      digitalWrite(led, HIGH);
      break;
    case '0':
      digitalWrite(led, LOW);
      break;
    }

  }

  }

如何减少或消除此延迟? 每次发送后为什么需要延迟(超过1秒)?

1 个答案:

答案 0 :(得分:0)

您可以告诉Arduino在收到每条传入消息后发送一条短消息(1-2字节),即所谓的确认。在树莓派上,每次发送之后,您都将等待此确认,并且在您收到Arduino的确认之前,不发送任何内容。此技术已在许多消费类和工业串行协议中使用。

如果需要,还可以提高数据传输速率。但是,请注意速度超过115200。如果使用较长的非屏蔽线,则连接可能不稳定。