ESP32 实战教程:智能环境监测站(温湿度+OLED+MQTT)
项目背景
随着物联网(IoT)技术的快速发展,环境监测系统在智能家居、智慧农业和工业自动化等领域得到了广泛应用。本教程将指导您如何使用 ESP32 开发板构建一个智能环境监测站。该监测站能够实时采集环境温湿度数据,并通过 OLED 显示屏进行本地显示,同时将数据通过 MQTT 协议发送到云平台,实现远程监控。
ESP32 是一款功能强大的微控制器,集成了 Wi-Fi 和蓝牙功能,适合用于各种物联网应用。相比于 ESP8266,ESP32 拥有更高的处理能力和更多的 GPIO 引脚,而相比于 Raspberry Pi Pico,ESP32 在无线通信方面具有天然优势。
硬件清单
在开始项目之前,您需要准备以下硬件:
- ESP32 开发板(如 ESP32 DevKit V1)
- DHT22 温湿度传感器
- 0.96 英寸 OLED 显示屏(基于 SSD1306 驱动)
- 面包板和杜邦线
- USB 数据线
📷[图:ESP32 开发板(AI 占位 URL,已跳过)]
*图1:ESP32 DevKit V1 开发板*
📷[图:DHT22 传感器(AI 占位 URL,已跳过)]
*图2:DHT22 温湿度传感器*
📷[图:OLED 显示屏(AI 占位 URL,已跳过)]
*图3:0.96 英寸 OLED 显示屏*
接线图说明
以下是 ESP32 与各模块的接线说明:
- DHT22 传感器
- VCC 接 ESP32 3.3V
- GND 接 ESP32 GND
- DATA 接 ESP32 GPIO 4
- OLED 显示屏
- VCC 接 ESP32 3.3V
- GND 接 ESP32 GND
- SCL 接 ESP32 GPIO 22
- SDA 接 ESP32 GPIO 21
📷[图:接线图(AI 占位 URL,已跳过)]
*图4:ESP32 与各模块的接线图*
完整代码
以下是完整的 Arduino 代码示例:
#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
DHT dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
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(",重试中...");
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(t);
Serial.print(" °C ");
Serial.print("湿度: ");
Serial.print(h);
Serial.println(" %");
display.clearDisplay();
display.setCursor(0,0);
display.print("温度: ");
display.print(t);
display.println(" C");
display.print("湿度: ");
display.print(h);
display.println(" %");
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());
client.publish("esp32/data", msg.c_str());
delay(2000);
}
调试
- 连接硬件:按照接线图连接 ESP32 与各模块,确保连接牢固。
- 配置 Wi-Fi 和 MQTT 服务器:在代码中填写您的 Wi-Fi 名称、密码和 MQTT 服务器地址。
- 上传代码:使用 Arduino IDE 将代码上传到 ESP32。
- 查看串口输出:打开串口监视器,设置波特率为 115200,观察连接状态和数据输出。
- 观察 OLED 显示:OLED 显示屏应显示当前的温度和湿度数据。
📷[图:串口输出(AI 占位 URL,已跳过)]
*图5:串口监视器中的数据输出*
数据可视化
功耗对比
电流消耗
固件烧录/调试流程
项目预算/物料成本占比
扩展
1. 云平台集成
将 ESP32 与云平台(如 AWS IoT、Azure IoT 或阿里云物联网平台)集成,实现更强大的数据分析和远程控制功能。通过 MQTT 协议,ESP32 可以将数据发送到云平台,并接收来自云端的控制指令。
2. 传感器扩展
在现有基础上增加更多类型的传感器,如空气质量传感器(MQ-135)、光照传感器(BH1750)等,构建更全面的环境监测系统。
3. 低功耗模式
为了延长设备的使用时间,可以实现 ESP32 的低功耗模式。通过合理配置 Wi-Fi 和传感器的工作状态,ESP32 可以进入休眠模式,降低功耗,并在需要时唤醒进行数据采集和传输。
B 站视频
以下是一个 ESP32 环境监测站的实测视频:
🎬[视频:BV 号格式不合法 BV1xxxxxxx]
通过本教程,您应该能够成功构建一个功能完善的智能环境监测站,并具备进一步扩展和优化的能力。希望本教程对您的嵌入式开发工作有所帮助!
📚 真实参考

