利用Python记录温湿度数据

随着物联网技术的发展,环境监测逐渐成为人们日常生活中重要的一部分。特别是温湿度的监测,对于家庭、农业、工业等领域都具有重要的意义。本文将探讨如何使用Python程序来记录温度和湿度数据,并以直观的方式展示这些数据。

1. 感知温湿度

首先,我们需要一个温湿度传感器来获取数据。常用的传感器有DHT11和DHT22等。在本文的示例中,我们将使用DHT11传感器。我们可以使用Python的Adafruit_DHT库来读取传感器的数据。

请确保安装了该库,可以通过以下命令安装:

pip install Adafruit-DHT

2. 读取温湿度数据的代码示例

以下是读取DHT11传感器数据的基本代码示例。该代码将读取温度和湿度,并将数据打印到控制台。

import Adafruit_DHT
import time

# 设置传感器类型和引脚
sensor = Adafruit_DHT.DHT11
pin = 4  # GPIO引脚

while True:
    # 读取温度和湿度
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

    # 检查数据是否有效
    if humidity is not None and temperature is not None:
        print(f'Temperature={temperature}°C, Humidity={humidity}%')
    else:
        print('Failed to get data from the sensor')

    # 每隔10秒读取一次
    time.sleep(10)

上面的代码将每10秒读取一次温湿度数据,并将结果打印出来。这是一个基本的循环,可以根据需求进行更多的功能扩展,例如将数据存储到文件中或数据库中。

3. 数据存储与可视化

为了更好地分析和展示数据,我们可以将读取到的温湿度数据存储到CSV文件中。以下是将温湿度数据写入CSV文件的示例代码。

import csv
import Adafruit_DHT
import time
from datetime import datetime

# 设置传感器类型和引脚
sensor = Adafruit_DHT.DHT11
pin = 4  # GPIO引脚

# 创建CSV文件
with open('temperature_humidity_data.csv', mode='w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['Timestamp', 'Temperature (°C)', 'Humidity (%)'])

    while True:
        humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

        if humidity is not None and temperature is not None:
            # 获取当前时间戳
            timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            writer.writerow([timestamp, temperature, humidity])
            print(f'Time: {timestamp}, Temperature={temperature}°C, Humidity={humidity}%')
        else:
            print('Failed to get data from the sensor')

        time.sleep(10)

在上述代码中,我们使用csv库将每次读取的数据存储到temperature_humidity_data.csv文件中。这让我们能够保留监测数据以供后续分析。

4. 数据可视化

数据可视化可以帮助我们更直观地理解数据。我们可以使用Python的matplotlib库绘制温湿度的变化曲线和饼状图。

首先,我们需要安装matplotlib库:

pip install matplotlib

4.1 绘制温湿度变化曲线

以下是绘制温湿度变化曲线的代码示例:

import matplotlib.pyplot as plt
import pandas as pd

# 载入CSV数据
data = pd.read_csv('temperature_humidity_data.csv')

# 绘制图表
plt.figure(figsize=(10, 5))
plt.plot(data['Timestamp'], data['Temperature (°C)'], label='Temperature (°C)', color='red')
plt.plot(data['Timestamp'], data['Humidity (%)'], label='Humidity (%)', color='blue')
plt.title('Temperature and Humidity over Time')
plt.xlabel('Timestamp')
plt.xticks(rotation=45)
plt.ylabel('Value')
plt.legend()
plt.tight_layout()
plt.grid()
plt.show()

4.2 绘制饼状图

我们可以利用饼状图来展示温湿度分布。以下是使用matplotlib绘制饼状图的代码示例:

# 绘制饼状图
temperature_count = 0
humidity_count = 0

# 计算温度和湿度的计数
for index, row in data.iterrows():
    if row['Temperature (°C)'] > 25:
        temperature_count += 1
    if row['Humidity (%)'] > 60:
        humidity_count += 1

# 饼状图数据
labels = ['High Temperature', 'Normal Temperature']
sizes = [temperature_count, len(data) - temperature_count]

plt.figure(figsize=(6, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
plt.axis('equal')
plt.title('Temperature Distribution')
plt.show()

5. 数据库设计

储存的数据可以选择使用数据库,如SQLite。使用关系图可以帮助我们展示数据库的结构。下面是与温湿度数据表格相关的ER图设计:

erDiagram
    TEMPERATURE_HUMIDITY {
        int id PK
        datetime timestamp
        float temperature
        float humidity
    }

此ER图展示了温湿度数据的表结构,其中id为主键,temperaturehumidity为我们需要存储的数据字段。

结论

通过上述示例,我们学习了如何使用Python读取温湿度传感器的数据、存储数据到CSV文件,并使用图表可视化。温湿度监测在很多场合都有广泛应用,选择合适的工具与方法能够有效帮助我们进行环境监测和数据分析。希望大家能够根据本文介绍,将温湿度记录、分析与可视化结合起来,提升生活质量或工作效率。