读取Arduino的串行AMA0写入空数据

时间:2016-02-22 22:31:44

标签: python arduino serial-port

我通过 / dev / ttyACM0 将Arduino连接到Raspberry。 尽管python脚本我想从Arduino中检索数据,但是如果你想让数据更频繁地出现(1-4秒)并且数据没有列出任何数据。 我不定期地写出数据,我不明白:(

Arduino代码:

void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.print("25.78"); // temperature °C
  delay(1000);
  Serial.println();
}

Raspberry,python代码:

import serial
serialport = serial.Serial("/dev/ttyAMA0", 9600, timeout=0.7)
response = serialport.readline()
print response
serialport.close()

以下是摘录:

pi@raspberrypi:~ $ python test.py

pi@raspberrypi:~ $ python test.py

pi@raspberrypi:~ $ python test.py


pi@raspberrypi:~ $ python test.py
25.78
pi@raspberrypi:~ $ python test.py
25.78
pi@raspberrypi:~ $ python test.py
25.78
pi@raspberrypi:~ $ python test.py

pi@raspberrypi:~ $ python test.py

我不知道如何将其修复为100%功能?

4 个答案:

答案 0 :(得分:0)

看起来你的读取超时(0.7s)小于你写入数据的频率(每1000ms)。因此,如果您反复执行读取它的脚本,您有时会错过数据。我建议您增加读取超时,或者减少Arduino睡眠的时间间隔。

答案 1 :(得分:0)

Arduino上运行的脚本每秒只生成一次输出。因此,输出可能需要一秒钟;如果不改变在Arduino上运行的脚本,就没有办法加快速度。

此外,由于您当前在Python脚本中设置了超时0.7秒,因此大约30%的运行将在任何输出出现之前超时。您需要将其更改为至少1秒(理想情况下更多一点),以使脚本可靠地工作。

但是,更好的解决方案可能是在Arduino上运行的脚本等待在生成输出之前从串行端口读取数据。 (换句话说,当'与'说话时,让Arduino只说'发言'。)

答案 2 :(得分:0)

您不应该假设您使用的系统正在缓冲Arduino正在输出的串行数据。您的应用程序应该通过让读取块超过0.7秒或在循环中运行它来完成此操作。

$q.reject

答案 3 :(得分:0)

如果我通过串口发送Raspberry的脚本应该是第一,并且由于Arduino发送了实际温度。