首页 > 解决方案 > 在 RaspberryPi3 上使用 DHT22 传感器进行实时数据记录

问题描述

我当前的一个项目存在问题,该项目旨在将数据从传感器实时传输到平台。它是一个 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 上完成的。由于我对编程知之甚少,脚本大多基于复制粘贴和反复试验。

提前致谢。

标签: pythoncsvloggingreal-timeraspberry-pi3

解决方案


您遇到的问题是您“写入”文件对象,但在代码中您从不刷新它。因此,您正在编写的内容保留在某个缓冲区中。通常刷新会在由创建的上下文结束时自动发生with open(),但它永远不会结束,因为那里有一个无限循环。

要解决此问题,只需将每个写入单独用with open().


推荐阅读