用python解释serialdata

2024-09-28 01:29:24 发布

您现在位置: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);

}

Tags: 代码importreadlineserialpifloatraspberryarduino
1条回答
网友
1楼 · 发布于 2024-09-28 01:29:24

您的方法并不是特别有效;您可以从Arduino(header+data)以结构形式发送所有内容,并在RPi端使用struct模块对其进行解析,尽管您的方法具有简单的优点。但是,如果999是您在读数中预期的最高值,那么使用比999更大的数字(如1000)更有意义。999不是一个字节。你知道吗

也就是说,如果“1000”是你的头,你可以像这样简单地检查头的存在:

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

相关问题 更多 >

    热门问题