如何通过串口从Raspberry Pi中的Arduino读取传感器数据

时间:2017-01-17 13:50:32

标签: arduino raspberry-pi serial-port sodaq-mbili

对于学校项目我必须从Arduino(Sodaq Mbili)板上的2个传感器读取数据。我使用的传感器是TPHv2(温度,压力,湿度)和Grove光传感器。我想读一下温度,湿度和光照强度。我使用以下代码:

void setup() {
  Serial.begin(9600);
}

void loop() {
    Serial.println(bme.readTemperature());

    Serial.println(bme.readHumidity());

    int sensorValue = analogRead(SENSOR_PIN); 
    Serial.println(sensorValue);

    delay(3000);
}

这给了我每3秒一次的输出:

21.23
25.65
256

然后我通过USB将Arduino连接到我的Raspberry Pi 2。 我想获取变量中的数据,以便我可以将其放入Json格式并将其发送到Azure事件中心。 我现在在树莓上的Python中有这个代码(我在网上找到了):

import serial

ser = serial.Serial('/dev/ttyUSB0',9600)
s = [0]

while True:
   s[0] = ser.readline()
   print s

我的输出然后每3秒钟给出一次:

['22.46\r\n']
['37.93\r\n']
['643\r\n']

我现在的问题是,如何在3个不同的变量中获得这3个值?我试图把它们放在同一个数组中(我想要这样的东西:[22.46,37.93,643])但是这没用。

有人有建议吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

好吧,如果你不想像jabujavi那样格式化arduino中的代码,你可以这样做:

import serial

ser = serial.Serial('/dev/ttyUSB0',9600)
s = []

while True:
    data = ser.readline()   #read data from serial
    if data:                #if there is data, append it to s
        s.append(data)
    if len(s) == 3:         #when s is 3 elements long, (all data has been retrieved)
        print s             #print out s
        s = []              #and then reset s to start over.