返回

自动化监测环境温湿度,这个小工具帮你做到!

后端

在这个数字时代,环境监测越来越重要。从家庭自动化到工业生产,实时监测环境温湿度对于各种应用都至关重要。为了满足这一需求,本文将详细介绍如何从零开始构建一个温湿度监测小工具。

硬件准备

  1. Arduino微控制器(例如Arduino Uno或Arduino Mega)
  2. 温湿度传感器(例如DHT11或DHT22)
  3. 面包板和跳线
  4. USB数据线
  5. 电源适配器
  6. 外壳(可选)

软件准备

  1. Arduino IDE
  2. Python
  3. pip(Python包管理工具)
  4. matplotlib(Python数据可视化库)
  5. Flask(Python Web框架)

电路连接

  1. 将温湿度传感器连接到Arduino微控制器的模拟引脚(例如A0或A1)。
  2. 将传感器的VCC引脚连接到Arduino的5V引脚。
  3. 将传感器的GND引脚连接到Arduino的GND引脚。

Arduino代码

  1. 打开Arduino IDE,创建一个新的草图。
  2. 在草图中,添加以下库:
#include <DHT.h>
  1. 在草图中,定义以下变量:
#define DHTPIN A0 // 温湿度传感器连接的引脚
#define DHTTYPE DHT11 // 温湿度传感器类型
  1. 在草图中,添加以下函数:
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);
}
  1. 将草图上传到Arduino微控制器。

Python脚本

  1. 创建一个新的Python脚本。
  2. 在脚本中,添加以下库:
import serial
import matplotlib.pyplot as plt
import numpy as np
  1. 在脚本中,定义以下变量:
port = "COM3" // Arduino微控制器连接的串口
baudrate = 9600 // 串口波特率
  1. 在脚本中,添加以下函数:
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()
  1. 运行Python脚本。

Web应用程序

  1. 创建一个新的Flask项目。
  2. 在项目中,添加以下库:
from flask import Flask, render_template
  1. 在项目中,定义以下变量:
app = Flask(__name__)
  1. 在项目中,添加以下路由:
@app.route("/")
def index():
  """首页"""
  return render_template("index.html")
  1. 在项目中,创建以下模板文件:
<!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>
  1. 在项目中,添加以下文件:
data.py
  1. 在data.py文件中,添加以下代码:
import json

def get_data():
  """获取温湿度数据"""
  temperature, humidity = read_data()
  return json.dumps({"temperature": temperature, "humidity": humidity})
  1. 在项目中,添加以下路由:
@app.route("/data")
def get_data():
  """获取温湿度数据"""
  return data.get_data()
  1. 运行Flask项目。

使用说明

  1. 将Arduino微控制器连接到计算机。
  2. 打开Arduino IDE,将草图上传到Arduino微控制器。
  3. 打开Python脚本,运行脚本。
  4. 打开Flask项目,运行项目。
  5. 在浏览器中打开以下网址:
http://localhost:5000
  1. 即可看到温湿度监测仪表盘。