💡 划重点
- 主题:智能环境监测站
- 芯片:ESP32
- 主要功能:温湿度监测、OLED 显示、MQTT 通信
- 成本:约 50 元人民币
- 开发难度:中等,适合有一定嵌入式基础的开发者
项目背景
随着物联网技术的快速发展,环境监测在智能家居、工业控制等领域的需求日益增长。本项目旨在利用 ESP32 芯片,设计一款具备温湿度监测、OLED 显示和 MQTT 通信功能的智能环境监测站。ESP32 是一款功能强大的双核 Wi-Fi 和蓝牙微控制器,具有低功耗、高性能的特点,非常适合用于物联网项目。
硬件清单
- ESP32 开发板(如 ESP32 DevKit V1)
- DHT22 温湿度传感器
- 0.96 寸 OLED 显示屏(128x64,I2C 接口)
- 杜邦线若干
- 面包板
- USB 数据线

*图 1:ESP32 DevKit V1 开发板*

*图 2:DHT22 温湿度传感器*
接线图说明
- DHT22 传感器接线
- VCC 接 ESP32 3.3V
- GND 接 ESP32 GND
- DATA 接 ESP32 GPIO 4
- OLED 显示屏接线
- VCC 接 ESP32 3.3V
- GND 接 ESP32 GND
- SDA 接 ESP32 GPIO 21
- SCL 接 ESP32 GPIO 22
*图 3:ESP32 环境监测站接线图*
完整代码
以下是使用 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
DHT dht(DHTPIN, DHTTYPE);
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";
const char* mqtt_server = "你的MQTT服务器地址";
WiFiClient espClient;
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("连接到 ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi 连接成功");
Serial.println("IP 地址: ");
}
void reconnect() {
while (!client.connected()) {
Serial.print("尝试连接 MQTT...");
if (client.connect("ESP32Client")) {
Serial.println("连接成功");
} else {
Serial.print("连接失败,状态码=");
Serial.print(client.state());
Serial.println(" 5 秒后重试");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
dht.begin();
setup_wifi();
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 初始化失败"));
for(;;);
}
display.clearDisplay();
display.setTextSize(1);
display.display();
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("读取 DHT22 失败");
return;
}
Serial.print("湿度: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("温度: ");
Serial.print(t);
Serial.println(" *C");
display.clearDisplay();
display.setCursor(0,0);
display.print("湿度: ");
display.print(h);
display.println(" %");
display.print("温度: ");
display.print(t);
display.println(" *C");
display.display();
String msg = "{\"temperature\": " + String(t) + ", \"humidity\": " + String(h) + "}";
client.publish("esp32/temperature", String(t).c_str());
client.publish("esp32/humidity", String(h).c_str());
delay(2000);
}
调试
- 连接 WiFi:上传代码后,打开串口监视器,确保 ESP32 成功连接到 WiFi。
- MQTT 连接:检查 MQTT 服务器连接状态,确保数据能够正确发送。
- 传感器数据读取:验证 DHT22 传感器读取的温湿度数据是否准确。
- OLED 显示:观察 OLED 显示屏,确认温湿度数据正确显示。
⚠️ 图表解析失败: bar 数据缺数值 ESP32 vs ESP8266 vs Raspberry Pi Pico 功耗/算力/价格对比
不同优化阶段的电流消耗column
70mA
90mA
80mA
5mA
初始阶段
WiFi 连接
数据传输
休眠模式
扩展
- 增加更多传感器:如空气质量传感器(MQ-135)、光照传感器(BMP280)等,实现更全面的环境监测。
- 数据存储与可视化:将数据存储到云平台(如 ThingSpeak、Firebase),并使用图表进行可视化展示。
- 低功耗优化:通过调整 ESP32 的工作模式,降低功耗,延长设备续航时间。
⚠️ 图表解析失败: pie 数据缺数值 项目预算/物料成本占比
*图 4:项目预算/物料成本占比*
视频教程
🎬[视频:BV 号格式不合法 BV1xxxxxxx]
*视频 1:ESP32 环境监测站完整教程*
🎬[视频:BV 号格式不合法 BV2xxxxxxx]
*视频 2:ESP32 MQTT 通信详解*
通过以上步骤,你就可以成功搭建一个功能完善的智能环境监测站。根据实际需求,还可以进行更多功能的扩展和优化。希望本教程对你有所帮助!