150元DIY一套ESP32环境监测站:温湿度光照一把抓,数据自动上云
【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32
周五下午你加班,家庭群里弹出消息:"妈,卧室闷得慌,你回来看看。"如果家里有个ESP32环境监测站,这个场景就不会发生——它实时采集温湿度、光照和CO₂,通过WiFi把数据推到云端,超阈值时还能自动执行通风、报警这些动作。整套方案DIY下来,硬件成本150元上下,从接线到跑通,一个周末就能搞定。
方案总览
| 部件 | 作用 | 大致价格 |
|---|---|---|
| ESP32-DevKitC 开发板 | 大脑,负责采集与WiFi传输 | 45元 |
| DHT22 温湿度传感器 | 数字输出,精确到0.1°C | 18元 |
| BH1750 光照传感器 | 走I2C(两根线就能跑的数据总线) | 12元 |
| MH-Z19B CO₂传感器 | 串口输出,最高读到5000ppm | 65元 |
| 18650电池+充电板 | 移动供电,USB可充 | 15元 |
整个系统说白了就三步:传感器读数 → ESP32打包走WiFi → 手机端(比如Thingspeak)收数画图。数据随时能看,联动逻辑也可以直接跑在设备端。
接线与配置速查
接线一共三组线,照抄即可:
- DHT22:VCC接3.3V,GND接GND,DATA接GPIO4
- BH1750:VCC接3.3V,GND接GND,SDA接GPIO21,SCL接GPIO22
- MH-Z19B:VCC接5V(这颗不能用3.3V),GND接GND,RX接GPIO16,TX接GPIO17
软件侧准备:
- Arduino IDE → 首选项,把安装指南里的官方开发板URL粘进"附加开发板管理器网址"
- 开发板管理器里搜 "esp32",点安装
- 工具菜单选中 "ESP32 Dev Module",并选对串口
- 库管理器安装 DHT 传感器库、BH1750 库
- 上传后打开115200波特率的串口监视器看输出
核心功能拆解
数据怎么采集、怎么上云
最基础的需求是"想看就有"。四个传感器一轮读下来,直接推给云端:
DHT dht(DHT_PIN, DHT22); // 温湿度 BH1750 lightMeter; // I2C光照 EnvironmentData d = readSensors(); // 四个传感器全读一遍,装进结构体 if (WiFi.status() == WL_CONNECTED) { WiFiClient client; client.connect("api.thingspeak.com", 80); client.print(String("GET /update?api_key=KEY&field1=") + d.temperature + "&field2=" + d.humidity); client.stop(); }读四个值塞进一个结构体,拼一条HTTP请求推上去,然后断开。HTTP客户端的裸写法可以看 WiFiClient示例。
怎么省电、电池能用多久
想跑电池的话,这一步必做。低功耗传感器节点的核心就是休眠机制:ESP32深度睡眠时只有微安级电流,和WiFi全速工作比,相当于一睡一跑,差好几个数量级。
void enterDeepSleep(int seconds) { esp_sleep_enable_timer_wakeup(seconds * 1000000); // 到点自动叫醒 digitalWrite(SENSOR_POWER_PIN, LOW); // 顺手给传感器断电 esp_deep_sleep_start(); // 睡 }每5分钟醒一次采完就睡,2000mAh的18650实测能撑两周以上。完整写法在 TimerWakeUp示例。
怎么让设备自己联动
光看数据不够,让它动手。四条if就是四条值守规则:
void smartControl(EnvironmentData d) { if (d.temperature > 28.0) controlAC(true); // 太热,开空调 if (d.humidity > 70.0) controlDehumidifier(true); // 太潮,开除湿 if (d.lightLevel < 100) controlLight(true); // 太暗,开灯 if (d.co2Level > 1000) sendAlert("该通风了!"); }设备从此不是"温度计",而是"值班员",你不在家它也盯着。
⚠️ 避坑与故障速查
| 问题 | 大概率原因 | 处理办法 |
|---|---|---|
| WiFi总连不上 | 只支持2.4GHz、密码错、信号弱 | 确认路由器2.4G信道,离得远就挪近点 |
| 温湿度读数卡死 | DHT22总线卡住 | DATA线上拉电阻,读到异常值就重新初始化 |
| 光照忽上忽下 | 强光直射或遮挡影响读数 | 固定位置避开直射,传感器上加个漫射罩 |
| 电池两天就没 | 深睡没生效、WiFi没关 | 量一下睡眠电流,睡之前先断WiFi |
| 云端没收到数据 | API密钥过期、请求失败 | 把上传返回值打印到串口排查 |
进阶玩法(选做)
- OTA升级:新固件空推上去,不用拆机不用烧录,监测站也能像手机一样升级,参考 libraries/ArduinoOTA/examples/BasicOTA。
- 多节点组网:想监测多个房间,用ESP-NOW让各监测站点对点无线通信,不经过路由器,由一个主节点统一上报,参考 libraries/ESP_NOW/examples/ESP_NOW_Network。
下周五你加班时,手机打开的第一样东西不再是家庭群,而是那个仪表盘,屋里每个数字都清清楚楚。完整源码、示例和文档,见 arduino-esp32仓库。
【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考