解释 python 中的串行数据
Interpret serialdata in python
我目前正在努力解决一个问题。我有一个 arduino 将串行数据发送到我的 raspberry pi。 raspberry pi 读取数据并将其存储在数据库中。我正在努力的是以正确的顺序获取数据。如果我在正确的时间启动脚本,这些值就会被正确读取。如果我不这样做,他们就会混淆。
我有一个arduino发送的headerByte,这个值是999,是每次发送的第一个值。 python 中有没有办法让 999 成为每次阅读开始的标记?我的变量永远不会超过 999,所以这不会有问题。
Python代码:
import serial
import time
values = []
serialArduino = serial.Serial('/dev/ttyACM0', baudrate=9600, timeout=1)
voltageRead = serialArduino.readline()
currentRead = serialArduino.readline()
while True:
voltageRead = serialArduino.readline()
currentRead = serialArduino.readline()
print"V=", voltageRead, "A=", currentRead
Arduino 代码:
void loop() {
float voltageRead = analogRead(A0);
float ampsRead = analogRead(A1);
float calculatedVoltage = voltageRead / 103;
float calculatedCurrent = ampsRead / 1;
int headerByte = 999;
Serial.println(headerByte);
Serial.println(calculatedVoltage);
Serial.println(calculatedCurrent);
delay(1000);
}
你的方法不是特别有效;您可以将所有内容作为结构从 Arduino(header + 数据)发送,并在 RPi 端使用 struct
模块解析它,尽管您的方式确实具有简单的优势。但是,如果 999 是您在读数中期望的最高值,那么使用比 1000 等 999 更大 的数字更有意义。而且 999 并不是一个真正的字节。
也就是说,如果“1000”是您的 header,您可以像这样简单地检查 header 是否存在:
HEADER = "1000"
serialArduino = serial.Serial('/dev/ttyACM0', baudrate=9600, timeout=1)
while True:
if serialArduino.readline().rstrip() == HEADER: # check for header
voltageRead = serialArduino.readline() # read two lines
currentRead = serialArduino.readline()
print"V=", voltageRead, "A=", currentRead
我目前正在努力解决一个问题。我有一个 arduino 将串行数据发送到我的 raspberry pi。 raspberry pi 读取数据并将其存储在数据库中。我正在努力的是以正确的顺序获取数据。如果我在正确的时间启动脚本,这些值就会被正确读取。如果我不这样做,他们就会混淆。
我有一个arduino发送的headerByte,这个值是999,是每次发送的第一个值。 python 中有没有办法让 999 成为每次阅读开始的标记?我的变量永远不会超过 999,所以这不会有问题。
Python代码:
import serial
import time
values = []
serialArduino = serial.Serial('/dev/ttyACM0', baudrate=9600, timeout=1)
voltageRead = serialArduino.readline()
currentRead = serialArduino.readline()
while True:
voltageRead = serialArduino.readline()
currentRead = serialArduino.readline()
print"V=", voltageRead, "A=", currentRead
Arduino 代码:
void loop() {
float voltageRead = analogRead(A0);
float ampsRead = analogRead(A1);
float calculatedVoltage = voltageRead / 103;
float calculatedCurrent = ampsRead / 1;
int headerByte = 999;
Serial.println(headerByte);
Serial.println(calculatedVoltage);
Serial.println(calculatedCurrent);
delay(1000);
}
你的方法不是特别有效;您可以将所有内容作为结构从 Arduino(header + 数据)发送,并在 RPi 端使用 struct
模块解析它,尽管您的方式确实具有简单的优势。但是,如果 999 是您在读数中期望的最高值,那么使用比 1000 等 999 更大 的数字更有意义。而且 999 并不是一个真正的字节。
也就是说,如果“1000”是您的 header,您可以像这样简单地检查 header 是否存在:
HEADER = "1000"
serialArduino = serial.Serial('/dev/ttyACM0', baudrate=9600, timeout=1)
while True:
if serialArduino.readline().rstrip() == HEADER: # check for header
voltageRead = serialArduino.readline() # read two lines
currentRead = serialArduino.readline()
print"V=", voltageRead, "A=", currentRead