我的控制器通过串口从无线电模块接收数据,它每隔1秒将温度和湿度记录到两位小数,使用' a'作为时间戳的信号。例如:
a21.12 65.43
a21.13 65.40
以下是我使用的代码:
import serial
import datetime
connected = False
locations=['/dev/ttyUSB0','/dev/ttyUSB1','/dev/ttyUSB2','/dev/ttyUSB3']
for device in locations:
try:
print "Trying...",device
ser = serial.Serial(device, 9600)
break
except:
print "Failed to connect on",device
while not connected:
serin = ser.read()
connected = True
with open('tempdata.txt', 'w') as text_file:
while 1:
if ser.read() is 'a':
text_file.write(datetime.datetime.now().strftime('%d/%m/%Y %H:%M:%S'))
text_file.write(" ")
x = ser.read()
text_file.write(x)
text_file.flush()
ser.close()
之后检查我的文本文件时,结果似乎每次都不同。如果我让它运行2或3秒钟,我有时会得到正确的结果,有时我只能得到湿度,有时我会得到一个半温,半湿度(如2.16.3)的时间戳。如果我让它运行超过几秒钟,那么文件就完全是空白的。
我的代码的基础来自之前在此处提出的问题,并且在我添加时间戳部分之前它工作正常。我尝试将无线电传输速率从9600更改为4800,但这只是将数字转换为垃圾字符。
我在Raspberry Pi 2型号B上运行它,所以我可能会在短时间内对它提出太多要求。
答案 0 :(得分:1)
您正在调用read()
两次并仅写入第二次调用的输出。我不认为这是你的意图。
您可以更改此部分:
with open('tempdata.txt', 'a') as text_file:
while 1:
content = ser.read()
if content is 'a':
text_file.write(datetime.datetime.now().strftime('%d/%m/%Y %H:%M:%S'))
text_file.write(" ")
text_file.write(content)
text_file.flush()