posts/esp32-wifi-iot-project.md
ESP32开发实战:WiFi物联网温湿度监控
ESP32开发实战:WiFi物联网温湿度监控
用 ESP32 + DHT11 做一个能联网上报温湿度的监控节点,是物联网入门最经典的项目之一。这篇文章完整走一遍:硬件接线、传感器驱动、WiFi 连接、MQTT 上报。
#一、硬件准备
| 器件 | 说明 |
|---|---|
| ESP32 开发板 | 自带 WiFi + 蓝牙 |
| DHT11 温湿度传感器 | 单总线通信 |
| 面包板 + 杜邦线 | 连接用 |
#1.1 接线表
| DHT11 引脚 | ESP32 引脚 |
|---|---|
| VCC (1) | 3.3V |
| DATA (2) | GPIO4 |
| GND (4) | GND |
DHT11 的 DATA 脚与 3.3V 之间需要接一个 4.7kΩ 上拉电阻。
#二、读取 DHT11 数据
DHT11 是单总线协议,时序要求严格,建议直接用现成库。在 ESP-IDF 中可以使用 esp_dht11 组件:
c#include "esp_dht11.h"
void app_main(void) {
dht11_reading_t reading = dht11_read();
if (reading.status == DHT11_OK) {
printf("Temperature: %.1f C\n", reading.temperature);
printf("Humidity: %.1f %%\n", reading.humidity);
}
}
如果没有库,自己写驱动时注意:主机拉低至少 18ms 触发,然后释放总线等待传感器应答,读 0/1 的位时序差别只有几十微秒,务必用 esp_rom_delay_us 精确延时。
#三、连接 WiFi
c#include "esp_wifi.h"
#include "esp_event.h"
#include "nvs_flash.h"
static void wifi_init(void) {
nvs_flash_init();
esp_netif_init();
esp_event_loop_create_default();
esp_netif_create_default_wifi_sta();
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&cfg);
wifi_config_t wifi_config = {
.sta = {
.ssid = "YOUR_SSID",
.password = "YOUR_PASSWORD",
},
};
esp_wifi_set_mode(WIFI_MODE_STA);
esp_wifi_set_config(WIFI_IF_STA, &wifi_config);
esp_wifi_start();
}
#四、MQTT 上报数据
用公共 Broker(如 EMQX 的 broker.emqx.io)快速验证,生产环境建议自建或使用云平台:
c#include "mqtt_client.h"
esp_mqtt_client_config_t mqtt_cfg = {
.broker.address.uri = "mqtt://broker.emqx.io:1883",
.topic = "device/room1/temperature",
};
esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
esp_mqtt_client_start(client);
在主循环里定时发布 JSON 数据:
cchar payload[128];
snprintf(payload, sizeof(payload),
"{\"temp\": %.1f, \"humidity\": %.1f}",
reading.temperature, reading.humidity);
esp_mqtt_client_publish(client, "device/room1/temperature", payload, 0, 1, 0);
#五、下一步玩法
- 接入 Home Assistant,做智能家居联动;
- 用 ESP32-CAM 加个摄像头,变成可视化监控;
- 低功耗场景换成 ESP32 深度睡眠,用电池供电跑一年。