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

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

项目背景

随着物联网技术的发展,环境监测变得越来越智能化。在工业、农业以及家庭环境中,对温湿度等环境参数的实时监测需求日益增加。本文将介绍如何使用 ESP32 开发板搭建一个智能环境监测站。该监测站能够实时采集环境温湿度数据,并通过 OLED 显示屏进行本地显示,同时通过 MQTT 协议将数据上传至云端,实现远程监控。

硬件清单

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

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

接线图说明

以下是各组件与 ESP32 的具体接线方式:

1. DHT22 温湿度传感器接线

2. OLED 显示屏接线(基于 I2C 通信)

3. 实物图描述

![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;

// 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);
    }
  }
}

调试

  1. 环境搭建:确保已安装 Arduino IDE,并在其中添加 ESP32 开发板支持。可以通过 Arduino 板管理器安装 ESP32 相关库。
  2. 库安装:在 Arduino IDE 中安装以下库:

- DHT sensor library by Adafruit

- Adafruit SSD1306 by Adafruit

- PubSubClient by Nick O'Leary

  1. 代码上传:将上述代码复制到 Arduino IDE 中,修改 WiFi 和 MQTT 配置参数后,连接 ESP32 开发板并上传代码。
  2. 串口监视器:打开串口监视器,设置波特率为 115200,观察连接状态和数据输出。
  3. MQTT 客户端测试:使用 MQTT 客户端工具(如 MQTT.fx 或 MQTT Explorer)订阅相应主题,验证数据是否正确传输。

扩展

1. 数据存储与可视化

将接收到的温湿度数据存储到数据库(如 InfluxDB),并使用可视化工具(如 Grafana)进行实时监控和历史数据分析。

2. 远程控制与报警

在监测站中加入远程控制功能,例如通过 MQTT 指令控制风扇或加湿器。同时,设置温湿度阈值,当环境参数超出设定范围时,触发报警。

3. 太阳能供电与低功耗设计

为了实现更长时间的独立运行,可以为监测站添加太阳能供电模块,并优化代码以降低功耗。例如,使用 ESP32 的深度睡眠模式,定期唤醒采集数据并上传。

4. 多传感器集成

除了温湿度传感器,还可以集成其他类型的传感器,如空气质量传感器(MQ-135)、光照传感器(BH1750)等,实现更全面的环境监测。

5. 移动应用开发

开发一个移动应用,通过 MQTT 协议与监测站通信,实现移动端的数据查看和控制。

通过以上扩展,可以将智能环境监测站打造成一个功能强大、实用性强的物联网设备,满足不同场景的需求。