用ESP32和DHT11打造智能家居温湿度监测系统从硬件搭建到手机端实时监控全流程最近发现家里的植物总是蔫蔫的查了资料才发现室内温湿度对植物生长影响巨大。作为一个技术爱好者我决定自己动手搭建一个低成本的环境监测系统。经过多次迭代最终用ESP32开发板和DHT11传感器实现了一套稳定可靠的方案现在连老婆都能在手机上随时查看数据了。1. 项目准备硬件选型与基础认知在开始动手前我们需要对核心组件有基本了解。ESP32是一款性价比极高的物联网开发板而DHT11则是入门级的温湿度传感器两者的组合非常适合家庭DIY项目。1.1 ESP32开发板特性解析双核处理器主频可达240MHz远超普通Arduino板无线连接内置Wi-Fi和蓝牙4.2模块丰富接口GPIO、ADC、DAC、UART等一应俱全低功耗模式深度睡眠电流仅5μA适合长期监测我用的是一款带CP2102芯片的ESP32-WROOM-32开发板市场价格约35-50元。购买时注意选择带USB转串口芯片的版本否则需要额外购买编程器。1.2 DHT11传感器工作原理DHT11采用电阻式感湿元件和NTC测温元件通过单总线协议通信。虽然精度不如更高级的DHT22但对于家庭使用完全足够参数DHT11DHT22温度范围0-50°C-40-80°C温度精度±2°C±0.5°C湿度范围20-90%RH0-100%RH湿度精度±5%RH±2%RH响应时间1-2秒2-4秒价格约10元约25元提示DHT11的采样间隔建议不小于2秒过于频繁的读取会导致数据不准确。2. 硬件连接与开发环境搭建2.1 电路连接示意图ESP32与DHT11的连接非常简单只需要三根线ESP32 DHT11 3.3V --- VCC GND --- GND GPIO5 --- DATA实际接线时建议在DATA线上加一个4.7kΩ的上拉电阻确保信号稳定。如果手头没有电阻大多数开发板上的内部上拉也能勉强工作。2.2 Arduino IDE环境配置安装最新版Arduino IDE当前推荐2.3.2版本在首选项中添加ESP32开发板管理网址https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json通过开发板管理器安装esp32平台安装所需库DHT sensor library for ESPxPubSubClientMQTT客户端库// 测试开发板是否识别成功 void setup() { Serial.begin(115200); } void loop() { Serial.println(Hello ESP32!); delay(1000); }上传成功后如果在串口监视器看到输出说明环境配置正确。3. 代码实现从传感器读取到数据上传3.1 DHT11数据采集基础代码我们先实现最基本的温湿度读取功能#include DHTesp.h #define DHT_PIN 5 DHTesp dht; void setup() { Serial.begin(115200); dht.setup(DHT_PIN, DHTesp::DHT11); } void loop() { TempAndHumidity data dht.getTempAndHumidity(); Serial.print(温度: ); Serial.print(data.temperature); Serial.print(°C\t湿度: ); Serial.print(data.humidity); Serial.println(%); delay(2000); // 遵守传感器的最小采样间隔 }常见问题排查如果读取到NaN值检查接线是否正确数据偶尔异常可以尝试增加延迟时间长期不稳定考虑更换传感器或添加滤波电容3.2 接入WiFi网络接下来让ESP32连接家庭WiFi#include WiFi.h const char* ssid 你的WiFi名称; const char* password 你的WiFi密码; void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() ! WL_CONNECTED) { delay(500); Serial.print(.); } Serial.println(\n连接成功); Serial.print(IP地址: ); Serial.println(WiFi.localIP()); } void loop() {}注意避免在代码中明文存储密码实际项目中建议使用WiFiManager库实现配网功能。3.3 MQTT协议与服务器选择MQTT是物联网最常用的轻量级消息协议我们使用免费的公共MQTT broker进行测试服务提供商地址端口认证EMQX Publicbroker.emqx.io1883用户名emqx密码publicMosquittotest.mosquitto.org1883无需认证HiveMQbroker.hivemq.com1883无需认证推荐使用MQTTX客户端工具测试服务器连接下载安装MQTTX支持Windows/Mac/Linux新建连接填写服务器地址和认证信息订阅主题如home/sensor/temperature4. 完整系统集成与优化4.1 最终代码实现将传感器读取、WiFi连接和MQTT发布整合#include WiFi.h #include PubSubClient.h #include DHTesp.h // WiFi配置 const char* ssid 你的WiFi; const char* password 你的密码; // MQTT配置 const char* mqttServer broker.emqx.io; const int mqttPort 1883; const char* mqttUser emqx; const char* mqttPassword public; const char* topic home/livingroom/sensor; // 传感器配置 #define DHT_PIN 5 DHTesp dht; WiFiClient espClient; PubSubClient client(espClient); void reconnect() { while (!client.connected()) { String clientId ESP32Client- String(random(0xffff), HEX); if (client.connect(clientId.c_str(), mqttUser, mqttPassword)) { Serial.println(MQTT连接成功); } else { Serial.print(失败, rc); Serial.print(client.state()); Serial.println( 5秒后重试...); delay(5000); } } } void setup() { Serial.begin(115200); dht.setup(DHT_PIN, DHTesp::DHT11); WiFi.begin(ssid, password); while (WiFi.status() ! WL_CONNECTED) { delay(500); Serial.print(.); } client.setServer(mqttServer, mqttPort); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); TempAndHumidity data dht.getTempAndHumidity(); String payload {; payload \temperature\:; payload data.temperature; payload ,\humidity\:; payload data.humidity; payload }; client.publish(topic, payload.c_str()); delay(10000); // 10秒间隔 }4.2 手机端数据可视化方案推荐几种手机端查看数据的方式MQTT DashAndroid免费版支持最多3个控件简单拖拽即可创建仪表盘支持图表、开关等多种组件Home Assistant需要自建服务器树莓派即可功能强大支持自动化规则学习曲线较陡但扩展性强IFTTTWebhooks无需编程实现通知推送可设置温湿度超出阈值时发送提醒依赖第三方服务响应略有延迟4.3 系统优化与扩展思路电源管理改用18650电池供电配合深度睡眠模式可运行数月外壳设计3D打印防水外壳适合浴室等潮湿环境监测多传感器融合增加光照、CO2传感器获取更全面的环境数据本地存储添加MicroSD卡模块记录历史数据报警功能当温湿度超出设定范围时触发蜂鸣器实际部署时我把设备放在书房的花架附近通过Home Assistant实现了当湿度低于60%时自动打开加湿器的自动化场景。整个系统已经稳定运行三个月帮助我成功救活了两盆濒死的兰花。