PySerial + Arduino MEGA 1 秒延迟/响应时间

Posted

技术标签:

【中文标题】PySerial + Arduino MEGA 1 秒延迟/响应时间【英文标题】:PySerial + Arduino MEGA 1 second delay/response time 【发布时间】:2021-09-01 14:09:58 【问题描述】:

我们遇到了 PySerial 和 Arduino 之间的通信延迟问题。我们使用 Arduino 设置一些开关并等待 Arduino 的 ACK 回复,然后再继续。出于某种原因,使用 PySerial 而不是 Arduino 的串行监视器时,会有完美的 1 秒延迟。使用串行监视器,只有几毫秒的延迟,如预期的那样。

在 MacOS、Python 3.8、Arduino 1.8.13 上运行

我做了一个简单的测试代码来显示这个问题:

Python

import serial
import datetime 

s = serial.Serial(port='/dev/cu.usbmodem1412301', baudrate=115200, timeout=2)

while 1:
    a = datetime.datetime.now()
    s.write(str.encode("marco"))
    data = s.readline()
    b = datetime.datetime.now()
    print(data)
    c = b-a
    print(c)

Python 输出

b'polo\r\n'
0:00:01.003257

b'polo\r\n'
0:00:01.003490

阿杜诺

void setup() 

  // Start Serial
  Serial.begin(115200);
  while (!Serial);


void loop()

  if(Serial.available())
  
    String cmd = Serial.readStringUntil('\n');    

    if (cmd.equals("marco"))
    
      Serial.println("polo");
    
  

知道这里可能存在什么潜在问题吗?

【问题讨论】:

您在 Arduino 端调用 readStringUntil('\n') - 但您实际上从未从 Python 端发送换行符,因此此调用只能通过超时完成(我猜默认为 1 秒)。 【参考方案1】:

@Jasonharper 是对的。 Str.encode 没有添加任何我认为的 '\n' 。在 Python 发送的字符串中添加 '\n' 解决了所有问题。

【讨论】:

以上是关于PySerial + Arduino MEGA 1 秒延迟/响应时间的主要内容,如果未能解决你的问题,请参考以下文章

开始使用 Arduino mega 的问题

arduino mega2560是多少位的单片机

关于Arduino mega2560 串口的问题

无法使用pyserial在arduino和python之间进行通信

通过 pySerial 通过 Python 控制 Arduino

Arduino和pyserial和ble