ESP32 实战 · 2026-06-15 配图
AI Know 自有配图 · 嵌入式 · IoT · 硬件编程

智能环境监测站实战教程(ESP32)

项目背景

随着物联网(IoT)技术的快速发展,智能环境监测系统在家庭、办公室和工业场所中的应用越来越广泛。通过实时监测环境参数,如温度、湿度等,可以有效提升生活质量和工作效率。本文将基于ESP32开发板,搭建一个智能环境监测站,具备温湿度监测、OLED显示和MQTT远程通信功能。该项目适合嵌入式开发者快速上手物联网应用开发。

硬件清单

为了完成本项目,需要以下硬件组件:

  1. ESP32开发板(如ESP32 DevKit V1)
  2. DHT22温湿度传感器
  3. 0.96寸 OLED显示屏(基于SSD1306驱动)
  4. MQTT Broker(如Mosquitto,或使用公共MQTT服务)
  5. 面包板和杜邦线若干
  6. USB数据线(用于连接ESP32与电脑)

硬件说明

接线图说明

以下是各组件与ESP32开发板的接线说明:

  1. DHT22传感器

- VCC接ESP32的3.3V(引脚1)

- GND接ESP32的GND(引脚2)

- 数据引脚接ESP32的GPIO 4(引脚3)

- 电阻:4.7kΩ电阻用于上拉数据引脚

  1. OLED显示屏

- VCC接ESP32的3.3V

- GND接ESP32的GND

- SCL接ESP32的GPIO 22

- SDA接ESP32的GPIO 21

  1. MQTT连接

- ESP32通过Wi-Fi连接到互联网,无需额外接线

![ESP32智能环境监测站接线图](https://i.imgur.com/your_image_link.png)

完整代码

以下是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;

const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";
const char* mqtt_server = "你的MQTT Broker地址";

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.print("IP 地址: ");
}

void reconnect() {
  while (!client.connected()) {
    Serial.print("尝试连接到MQTT Broker...");
    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();
  display.clearDisplay();
  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(h);
  Serial.println(" %");

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("环境监测站");
  display.setTextSize(2);
  display.setCursor(0,20);
  display.print("T: ");
  display.print(t);
  display.println(" C");
  display.print("H: ");
  display.print(h);
  display.println(" %");
  display.display();

  client.publish("esp32/temperature", String(t).c_str());
  client.publish("esp32/humidity", String(h).c_str());
  delay(2000);
}

调试

  1. 环境配置

- 安装Arduino IDE,并配置ESP32开发板支持。

- 安装所需库:PubSubClient、Adafruit GFX、Adafruit SSD1306、DHT sensor library。

  1. 代码上传

- 连接ESP32到电脑,选择正确的开发板型号和端口。

- 编译并上传代码到ESP32。

  1. 运行测试

- 打开串口监视器,设置波特率为115200。

- 观察串口输出,确认Wi-Fi连接和MQTT连接状态。

- 确认OLED显示屏上实时显示温湿度数据。

  1. MQTT数据验证

- 使用MQTT客户端工具(如Mosquitto的客户端工具)订阅“esp32/temperature”和“esp32/humidity”主题,验证数据是否正确发布。

扩展

1. 数据可视化与存储

将监测数据存储到云端数据库(如InfluxDB),并使用Grafana等工具进行可视化展示,实现历史数据分析和实时监控。

2. 远程控制与报警

通过MQTT实现远程控制功能,如控制风扇、空调等设备。同时,设定温湿度阈值,当环境参数超出范围时,通过邮件或短信发送报警通知。

3. 低功耗优化

在电池供电的场景下,优化代码和硬件配置,实现低功耗运行。例如,使用ESP32的深度睡眠模式,延长电池寿命。

4. 多传感器集成

集成更多类型的传感器,如空气质量传感器(MQ-135)、光照传感器(BH1750)等,实现更全面的环境监测。

5. 移动应用开发

开发移动应用,通过MQTT与ESP32通信,实现移动端实时数据查看和控制功能。

通过以上扩展,可以将智能环境监测站打造成一个功能强大、实用性强的物联网应用,为日常生活和工作带来更多便利。