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