使用 RaspberryPi3 上的 DHT22 传感器进行实时数据记录
Real time data logging with a DHT22 sensor on a RaspberryPi3
我的当前项目存在问题,该项目旨在将数据从传感器实时传输到平台。它是一个 DHT22 传感器,能够测量温度和湿度。想法是将数据保存在 csv 文件中,然后使用另一个脚本将其发送到平台(将数据从 csv 文件发送到平台一直有效)。问题是数据存储在 csv 文件中,但仅以大约 15 分钟的间隔存储,并且始终以 800 个块为单位。因此,实时方面没有发挥作用。
我使用以下脚本将数据保存为 csv 文件:
import time
import adafruit_dht
import board
dht = adafruit_dht.DHT22(board.D4)
with open("/home/pi/Desktop/temp_hum.csv", "a") as log:
log.write("TEMP,HUM\n") # first row in the csv file
while True:
try:
temperature = dht.temperature
humidity = dht.humidity
log.write("{:.1f},{}\n".format(temperature, humidity))
except RuntimeError as error:
# reading doesnt always work, no logging if error
time.sleep(1)
continue
except Exception as error:
dht.exit()
raise error
time.sleep(1)
如你所见,数据应该每秒保存一次,错误信息不应该保存。我现在想知道是否有可能将数据实时保存为 csv 文件,或者是否有更合适的选择。这一切都是在 RaspberryPi3 上完成的。由于本人对编程了解甚少,脚本多以复制粘贴试错为主
提前致谢。
您遇到的问题是您“写入”了文件对象,但在代码中您从不刷新它。所以你正在写的东西留在一些缓冲区中。通常当 with open()
创建的上下文结束时刷新会自动发生,但它永远不会结束,因为里面有一个无限循环。
要解决这个问题,只需用 with open()
.
单独包围每个写入
我的当前项目存在问题,该项目旨在将数据从传感器实时传输到平台。它是一个 DHT22 传感器,能够测量温度和湿度。想法是将数据保存在 csv 文件中,然后使用另一个脚本将其发送到平台(将数据从 csv 文件发送到平台一直有效)。问题是数据存储在 csv 文件中,但仅以大约 15 分钟的间隔存储,并且始终以 800 个块为单位。因此,实时方面没有发挥作用。
我使用以下脚本将数据保存为 csv 文件:
import time
import adafruit_dht
import board
dht = adafruit_dht.DHT22(board.D4)
with open("/home/pi/Desktop/temp_hum.csv", "a") as log:
log.write("TEMP,HUM\n") # first row in the csv file
while True:
try:
temperature = dht.temperature
humidity = dht.humidity
log.write("{:.1f},{}\n".format(temperature, humidity))
except RuntimeError as error:
# reading doesnt always work, no logging if error
time.sleep(1)
continue
except Exception as error:
dht.exit()
raise error
time.sleep(1)
如你所见,数据应该每秒保存一次,错误信息不应该保存。我现在想知道是否有可能将数据实时保存为 csv 文件,或者是否有更合适的选择。这一切都是在 RaspberryPi3 上完成的。由于本人对编程了解甚少,脚本多以复制粘贴试错为主
提前致谢。
您遇到的问题是您“写入”了文件对象,但在代码中您从不刷新它。所以你正在写的东西留在一些缓冲区中。通常当 with open()
创建的上下文结束时刷新会自动发生,但它永远不会结束,因为里面有一个无限循环。
要解决这个问题,只需用 with open()
.