Raspberry Pi 2 / Python + 多个传感器输出?

Raspberry Pi 2 / Python + Mutliple Senors output?

我是 coding/Python 的新手,我正在编写一些代码,这些代码将从两个 Atlas Scientific 传感器(温度和溶解氧)获取值并将它们连同时间戳一起写入文本文件使用 Raspberry Pi 模型 2。 到目前为止,这就是我所拥有的:

#!/usr/bin/python

import serial
import datetime
import time

###Sensor serial settings
temp = '/dev/ttyAMA0'
tempser = serial.Serial(temp, 9600)
do = '/dev/ttyUSB0'
doser = serial.Serial(do, 9600)

###Temperature Sensor Settings
tempser.write("SF\r")

###DOSensor Settings
doser.write("C,1\r")

###Looop
line = ""
line2 = ""

while True:
    dodata = doser.read()
    tempdata = tempser.read()
    f=open('2Sensor.txt','a')
    date = datetime.datetime.now()
    timestamp = date.strftime("%Y/%m/%d %H:%M")
    outstring = str(timestamp)+" "+line
    outstring2 = " "+line2+"\n"

    if(dodata == "\r"):
            print timestamp +" D.O. "+line
            f.write(outstring)
            line = ""

    else:
            line = line + dodata

    if(tempdata == "\r"):           
            print timestamp +" Temp "+line2
            f.write(outstring2)
            line2 = ""

    else:
            line2 = line2 + tempdata

终端输出如下所示:

2015/08/26 14:08 D.O. 8.42
2015/08/26 14:08 Temp 84.38
2015/08/26 14:08 D.O. 8.42
2015/08/26 14:08 Temp 84.39

并像这样写入文本文件:

2015/08/26 13:47 8.42 84.45
2015/08/26 13:48 8.43 84.47
2015/08/26 13:48 8.42 84.47
2015/08/26 13:48 8.42 84.45
2015/08/26 13:49 8.422015/08/26 13:49 8.42 84.45
2015/08/26 13:50 8.42 84.45
2015/08/26 13:50 8.42 84.47
2015/08/26 13:50 8.43 84.47
2015/08/26 13:51 8.43 84.47
2015/08/26 13:51 8.432015/08/26 13:52 8.43 84.45
2015/08/26 13:52 8.43 84.47

为什么我不能让终端输出在一行中显示来自两个传感器的值,为什么它每五个读数在文本文件中加倍? 我尝试了很多与谷歌搜索不同的改变,但我在这里发布的内容让我最接近我的目标。 任何帮助或提示将不胜感激。

传感器信息

Do Sensor

Temp

谢谢!

这是 Manuel Wong 的模组和我的调整的最终代码:

import serial
import datetime
import time

###Sensor serial settings
temp = '/dev/ttyAMA0'
tempser = serial.Serial(temp, 9600)
do = '/dev/ttyUSB0'
doser = serial.Serial(do, 9600)

###Temperature Sensor Settings
tempser.write("SF\r")

###DOSensor Settings
doser.write("C,1\r")

###Looop
line = "" 
line2 = ""
lineout = ""

while True:
    dodata = doser.read()
    tempdata = tempser.read()
    f=open('2Sensor.txt','a')
    date = datetime.datetime.now()
    timestamp = date.strftime("%Y/%m/%d %H:%M")

    if (dodata == "\r"):
        lineout = " D.O. " + line
        line = ""

    else:
        line = line + dodata

    if(tempdata == "\r"):           
        lineout = lineout + " Temp "+line2
        line2 = ""

    else:
        line2 = line2 + tempdata

    if len(lineout) >= 20:
        print timestamp + lineout  
        f.write(timestamp + lineout)
        lineout = ""

        time.sleep(360)

问题是您使用 2 条打印指令打印值。每个打印生成一行。当您有两个读数时,尝试打印数据。关于重复行,在循环中的每次迭代中清除变量 line 和 line2。

我认为问题出在同步上。由于您使用串行端口读取传感器,因此一次读取一个字符,找到字符“\r”后即可获得整个读数。有时您会发现两个读数(tempser 和 doser)都已完成,这就是您在文件的一行中发现两个读数的原因。您可以尝试在每次阅读完成后打印您的数据。

import serial
import datetime
import time

###Sensor serial settings
temp = '/dev/ttyAMA0'
tempser = serial.Serial(temp, 9600)
do = '/dev/ttyUSB0'
doser = serial.Serial(do, 9600)

###Temperature Sensor Settings
tempser.write("SF\r")

###DOSensor Settings
doser.write("C,1\r")

###Looop
line = "" 
line2 = ""
lineout = ""

while True:
    dodata = doser.read()
    tempdata = tempser.read()
    f=open('2Sensor.txt','a')
    date = datetime.datetime.now()
    timestamp = date.strftime("%Y/%m/%d %H:%M")
    outstring = str(timestamp)+" "+line
    outstring2 = " "+line2+"\n"

    if (dodata == "\r"):
        lineout = " D.O. " + line
        f.write(outstring)
        line = ""

    else:
        line = line + dodata

    if(tempdata == "\r"):           
        lineout = lineout + " Temp "+line2
        f.write(outstring2)
        line2 = ""

    else:
        line2 = line2 + tempdata

    if len(lineout) != 0:
        print timestamp + lineout  
#       optional if you want to print the same result to a file uncomment the next line and remove the previous f.write instructions
#       f.write(timestamp + lineout)
        lineout = ""