在物联网(IoT)领域,实现温湿度监控系统是一个非常常见的应用场景。本文将详细介绍如何使用ESP32微控制器与DHT11温湿度传感器结合,搭建一个简单的温湿度监控系统。我们将从硬件连接、软件编程以及数据可视化三个方面进行深入解析。
DHT11传感器有三个引脚:VCC、GND和DATA。以下是具体的连接方式:
工具 -> 库管理
搜索DHT sensor library
并安装。以下是一个完整的代码示例,用于读取DHT11的温湿度数据并通过串口打印。
#include "DHT.h"
#define DHTPIN 4 // DHT11的DATA引脚连接到GPIO4
#define DHTTYPE DHT11 // 使用DHT11型号
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200); // 初始化串口通信
dht.begin(); // 初始化DHT11传感器
}
void loop() {
float humidity = dht.readHumidity(); // 读取湿度
float temperature = dht.readTemperature(); // 读取温度
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" *C");
delay(2000); // 每2秒读取一次数据
}
dht.readHumidity()
:读取当前湿度值。dht.readTemperature()
:读取当前温度值。isnan()
:检查是否成功读取数据,若失败则输出错误信息。delay(2000)
:设置每2秒读取一次数据,避免过于频繁的读取导致传感器过热或数据不稳定。为了更直观地展示温湿度数据,可以使用第三方平台如Thingspeak或Blynk。
修改上述代码,添加以下内容:
#include <WiFi.h>
#include <HTTPClient.h>
const char* ssid = "YourSSID"; // WiFi名称
const char* password = "YourPassword"; // WiFi密码
const char* server = "api.thingspeak.com";
const char* apiKey = "YOUR_API_KEY"; // Thingspeak API密钥
void setup() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi!");
}
void sendData(float temp, float hum) {
HTTPClient http;
String url = "http://" + String(server) + "/update?api_key=" + String(apiKey) + "&field1=" + String(temp) + "&field2=" + String(hum);
http.begin(url);
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
Serial.println("Data sent successfully!");
} else {
Serial.println("Error sending data!");
}
http.end();
}
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (!isnan(humidity) && !isnan(temperature)) {
sendData(temperature, humidity);
}
delay(20000); // 每20秒上传一次数据
}
登录Thingspeak后,可以在图表中实时查看温湿度的变化趋势。
DHT11的精度较低,湿度误差范围为±5%,温度误差范围为±2℃。如果需要更高的精度,可以考虑使用DHT22或AM2302等高精度传感器。
在实际应用中,传感器可能会因环境干扰而返回异常值。建议增加数据滤波算法,例如滑动平均法或卡尔曼滤波器,以提高数据稳定性。
以下是温湿度监控系统的逻辑流程图:
graph TD A[启动系统] --> B[初始化DHT11] B --> C[连接WiFi] C --> D{读取温湿度数据} D --成功--> E[上传数据到云端] D --失败--> F[记录错误日志] E --> G[等待下一次读取] F --> G