python - PySerial + Arduino MEGA 1 秒延迟/响应时间
问题描述
我们遇到了 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");
}
}
}
知道这里可能存在什么潜在问题吗?
解决方案
@Jasonharper 是对的。Str.encode 没有添加任何我认为的 '\n' 。在 Python 发送的字符串中添加 '\n' 解决了所有问题。
推荐阅读
- c# - 在运行时动态更改 db.Context 文件中的数据库 DB 首先接近 ASP.net MVC5?
- r - R - 计算基于另一个数据框的组合指标
- karate - com.intuit.karate.exception.KarateException:原因:不是子字符串
- java - docx4j 中的页码
- recaptcha - 无需参考外部 API 的 reCAPTCHA 集成
- wpf - 在 WPF 绑定中,空 {Binding} 做什么
- c# - 有没有办法在反序列化对象时防止多次设置相同的属性?
- r - R,按日期加入所有数据集
- azure - Azure SQL 端口 443
- excel - 新手:在工作表中设置范围对象时出错