
智能环境监测站实战教程(ESP32)
项目背景
随着物联网技术的发展,环境监测变得越来越智能化。在工业、农业以及家庭环境中,对温湿度等环境参数的实时监测需求日益增加。本文将介绍如何使用 ESP32 开发板搭建一个智能环境监测站。该监测站能够实时采集环境温湿度数据,并通过 OLED 显示屏进行本地显示,同时通过 MQTT 协议将数据上传至云端,实现远程监控。
硬件清单
为了完成本项目,我们需要以下硬件组件:
- ESP32 开发板(如 ESP32 DevKit V1)
- DHT22 温湿度传感器
- 0.96 寸 OLED 显示屏(基于 SSD1306 驱动)
- 面包板和若干杜邦线
- USB 数据线(用于连接 ESP32 与电脑)
- MQTT 服务器(如 HiveMQ 或自建 Mosquitto 服务器)
接线图说明
以下是各组件与 ESP32 的具体接线方式:
1. DHT22 温湿度传感器接线
- VCC 接 ESP32 的 3.3V(GPIO 1)
- GND 接 ESP32 的 GND
- DATA 接 ESP32 的 GPIO 4
2. OLED 显示屏接线(基于 I2C 通信)
- VCC 接 ESP32 的 3.3V
- GND 接 ESP32 的 GND
- SCL 接 ESP32 的 GPIO 22
- SDA 接 ESP32 的 GPIO 21
3. 实物图描述

*注:请将上述图片链接替换为实际的接线图图片。*
完整代码
以下是使用 Arduino IDE 编写的完整代码:
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define DHTPIN 4
#define DHTTYPE DHT22
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
DHT dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
WiFiClient espClient;
// WiFi 配置
const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";
// MQTT 配置
const char* mqtt_server = "你的MQTT服务器地址";
const char* mqtt_topic = "environment/temperature";
const char* mqtt_topic_humidity = "environment/humidity";
void setup() {
Serial.begin(115200);
dht.begin();
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
for(;;);
}
display.clearDisplay();
display.setTextSize(1);
display.display();
setup_wifi();
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// OLED 显示
display.clearDisplay();
display.setCursor(0,0);
display.print(t);
display.println(" C");
display.print("Humidity: ");
display.print(h);
display.println(" %");
display.display();
// MQTT 发布
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(h);
Serial.println(" %");
delay(2000);
}
void setup_wifi() {
delay(10);
Serial.println();
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
}
void reconnect() {
while (!client.connected()) {
String clientId = "ESP32Client-";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
delay(5000);
}
}
}
调试
- 环境搭建:确保已安装 Arduino IDE,并在其中添加 ESP32 开发板支持。可以通过 Arduino 板管理器安装 ESP32 相关库。
- 库安装:在 Arduino IDE 中安装以下库:
- DHT sensor library by Adafruit
- Adafruit SSD1306 by Adafruit
- PubSubClient by Nick O'Leary
- 代码上传:将上述代码复制到 Arduino IDE 中,修改 WiFi 和 MQTT 配置参数后,连接 ESP32 开发板并上传代码。
- 串口监视器:打开串口监视器,设置波特率为 115200,观察连接状态和数据输出。
- MQTT 客户端测试:使用 MQTT 客户端工具(如 MQTT.fx 或 MQTT Explorer)订阅相应主题,验证数据是否正确传输。
扩展
1. 数据存储与可视化
将接收到的温湿度数据存储到数据库(如 InfluxDB),并使用可视化工具(如 Grafana)进行实时监控和历史数据分析。
2. 远程控制与报警
在监测站中加入远程控制功能,例如通过 MQTT 指令控制风扇或加湿器。同时,设置温湿度阈值,当环境参数超出设定范围时,触发报警。
3. 太阳能供电与低功耗设计
为了实现更长时间的独立运行,可以为监测站添加太阳能供电模块,并优化代码以降低功耗。例如,使用 ESP32 的深度睡眠模式,定期唤醒采集数据并上传。
4. 多传感器集成
除了温湿度传感器,还可以集成其他类型的传感器,如空气质量传感器(MQ-135)、光照传感器(BH1750)等,实现更全面的环境监测。
5. 移动应用开发
开发一个移动应用,通过 MQTT 协议与监测站通信,实现移动端的数据查看和控制。
通过以上扩展,可以将智能环境监测站打造成一个功能强大、实用性强的物联网设备,满足不同场景的需求。