我通过 / 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%功能?
答案 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发送了实际温度。