返回
自动化监测环境温湿度,这个小工具帮你做到!
后端
2023-11-11 10:48:11
在这个数字时代,环境监测越来越重要。从家庭自动化到工业生产,实时监测环境温湿度对于各种应用都至关重要。为了满足这一需求,本文将详细介绍如何从零开始构建一个温湿度监测小工具。
硬件准备
- Arduino微控制器(例如Arduino Uno或Arduino Mega)
- 温湿度传感器(例如DHT11或DHT22)
- 面包板和跳线
- USB数据线
- 电源适配器
- 外壳(可选)
软件准备
- Arduino IDE
- Python
- pip(Python包管理工具)
- matplotlib(Python数据可视化库)
- Flask(Python Web框架)
电路连接
- 将温湿度传感器连接到Arduino微控制器的模拟引脚(例如A0或A1)。
- 将传感器的VCC引脚连接到Arduino的5V引脚。
- 将传感器的GND引脚连接到Arduino的GND引脚。
Arduino代码
- 打开Arduino IDE,创建一个新的草图。
- 在草图中,添加以下库:
#include <DHT.h>
- 在草图中,定义以下变量:
#define DHTPIN A0 // 温湿度传感器连接的引脚
#define DHTTYPE DHT11 // 温湿度传感器类型
- 在草图中,添加以下函数:
void setup() {
Serial.begin(9600); // 初始化串行通信
DHT.begin(DHTPIN, DHTTYPE); // 初始化温湿度传感器
}
void loop() {
// 读取温湿度数据
float temperature = DHT.readTemperature();
float humidity = DHT.readHumidity();
// 将数据发送到计算机
Serial.print(temperature);
Serial.print(",");
Serial.println(humidity);
// 延迟一秒
delay(1000);
}
- 将草图上传到Arduino微控制器。
Python脚本
- 创建一个新的Python脚本。
- 在脚本中,添加以下库:
import serial
import matplotlib.pyplot as plt
import numpy as np
- 在脚本中,定义以下变量:
port = "COM3" // Arduino微控制器连接的串口
baudrate = 9600 // 串口波特率
- 在脚本中,添加以下函数:
def read_data():
"""读取Arduino微控制器发送的数据"""
ser = serial.Serial(port, baudrate)
data = ser.readline().decode("utf-8").strip().split(",")
ser.close()
return float(data[0]), float(data[1])
def plot_data(temperature, humidity):
"""绘制温湿度数据的折线图"""
plt.figure(figsize=(10, 6))
plt.plot(temperature, label="Temperature")
plt.plot(humidity, label="Humidity")
plt.xlabel("Time (s)")
plt.ylabel("Value")
plt.legend()
plt.show()
def main():
"""主函数"""
while True:
temperature, humidity = read_data()
plot_data(temperature, humidity)
if __name__ == "__main__":
main()
- 运行Python脚本。
Web应用程序
- 创建一个新的Flask项目。
- 在项目中,添加以下库:
from flask import Flask, render_template
- 在项目中,定义以下变量:
app = Flask(__name__)
- 在项目中,添加以下路由:
@app.route("/")
def index():
"""首页"""
return render_template("index.html")
- 在项目中,创建以下模板文件:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1>温湿度监测</h1>
<div id="chart"></div>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<script>
var data = [{
x: [],
y: [],
name: "温度"
}, {
x: [],
y: [],
name: "湿度"
}];
var layout = {
title: "温湿度数据",
xaxis: {
title: "时间 (s)"
},
yaxis: {
title: "值"
}
};
Plotly.newPlot("chart", data, layout);
setInterval(function() {
$.ajax({
url: "/data",
success: function(data) {
data = JSON.parse(data);
data[0].x.push(data[0].x.length);
data[0].y.push(data[0].y[data[0].y.length - 1] + Math.random() * 10);
data[1].x.push(data[1].x.length);
data[1].y.push(data[1].y[data[1].y.length - 1] + Math.random() * 10);
Plotly.redraw("chart");
}
});
}, 1000);
</script>
</body>
</html>
- 在项目中,添加以下文件:
data.py
- 在data.py文件中,添加以下代码:
import json
def get_data():
"""获取温湿度数据"""
temperature, humidity = read_data()
return json.dumps({"temperature": temperature, "humidity": humidity})
- 在项目中,添加以下路由:
@app.route("/data")
def get_data():
"""获取温湿度数据"""
return data.get_data()
- 运行Flask项目。
使用说明
- 将Arduino微控制器连接到计算机。
- 打开Arduino IDE,将草图上传到Arduino微控制器。
- 打开Python脚本,运行脚本。
- 打开Flask项目,运行项目。
- 在浏览器中打开以下网址:
http://localhost:5000
- 即可看到温湿度监测仪表盘。