资讯动态

一套跑通的 ESP32 智能灌溉系统:自动浇水、远程查看到深度睡眠省电的实操笔记

发布时间:2026/9/10 9:35:41 来源:尧图企业网站定制
一套跑通的 ESP32 智能灌溉系统自动浇水、远程查看到深度睡眠省电的实操笔记【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32正午的太阳下番茄叶子耷拉着浇多了又怕烂根——这套土壤湿度自动灌溉装置就是为解决这件事做的。整个方案基于 arduino-esp32 官方核心包搭建属于典型的 ESP32 物联网农业项目电容式土壤湿度传感器负责感知继电器带水泵自动浇水Wi-Fi 把数据报回手机深度睡眠把续航拉到月级。下面是我把它从零装到稳定跑了两周后的完整复盘。硬件清单ESP32 物联网农业项目的选型表 先把 BOM 列清楚括号里是踩坑后的经验值部件型号 / 规格作用选型理由主控ESP32-WROOM-32D 开发板采集、判断、联网双核 Wi-Fi20 元左右性价比最高土壤湿度电容式非电阻式模块感知土壤干湿探头泡土里不会电解腐蚀读数稳定温湿度DHT11修正灌溉时长单总线接线最简单精度够灌溉用光照BH1750强光时补水量I2C 两线省引脚执行器5V 单路继电器 12V 小潜水泵或电磁阀自动浇水继电器隔离 12V 负载ESP32 只出 3.3V 控制信号电源5W 太阳能板 5000mAh 锂电 TP4056 充电板户外供电白天充电夜里用配合深睡可跑月级可选SPI SD 卡模块本地 CSV 备份Wi-Fi 断线时数据不丢开发环境配置与传感器接线对照表IDE 四步装好 ESP32 支持包Arduino IDE「文件 → 首选项」附加开发板管理器网址填入https://espressif.github.io/arduino-esp32/package_esp32_index.json「工具 → 开发板 → 开发板管理器」搜索 esp32安装 Espressif Systems 的版本当前 3.x对应本仓库 3.x 分支代码开发板选 ESP32 Dev Module上传速度拉满 921600少等几十秒引脚对照表土壤湿度 / 温湿度 / 光照 / 继电器信号ESP32 引脚备注土壤湿度 AOUTGPIO34ADC1_CH6只读口别用 35~39ADC2 与 Wi-Fi 抢通道连网时读数为 0DHT11 DATAGPIO4单总线模块自带上拉BH1750 SDA / SCLGPIO21 / GPIO22I2C 默认引脚继电器 INGPIO13输出 3.3V 即可驱动传感器供电开关GPIO14接 P-MOS 栅极做分时段断电SD 卡 CSGPIO5SPI 模式坑位提醒三个我实际踩过的继电器必须独立供电我用 5V 模块单独上电、与 ESP32 共地。从板子 5V 脚直取电的那一版继电器一吸合整个开发板重启翻了三次车才定位。别买电阻式土壤湿度传感器探头通电泡在湿土里几周就腐蚀发黑读数漂移没法校准电容式靠板载小振荡电路出模拟量长期稳定。GPIO 选择避坑模拟量只放 ADC132/33/346、7、8、9、10、11、12、15 是 strapping 或 SPI 内部口上电瞬间电平会影响启动留作数字输出都行别接模拟传感器。固件思路采集→判断→执行的三步逻辑不贴整份工程只讲骨架参考 libraries/ESP32/examples/ 里 AnalogRead、DeepSleep 的官方示例改就行。第一步 采集土壤湿度读 5 次取平均滤掉抖动再套校准公式换算成百分比。DRY 和 WET 两个常数不是查表得来的是我把探头分别悬空、泡进清水实测记下来的本机 4095 和 1500float readSoilMoisture() { // 5 次平均 换算百分比 int sum 0; for (int i 0; i 5; i) { sum analogRead(34); delay(10); } int raw sum / 5; float pct 100.0 * (DRY - raw) / (DRY - WET); // DRY4095, WET1500 return constrain(pct, 0.0, 100.0); }第二步 判断主干只有一条——湿度低于 30% 才浇水。温度和光照只做时长修正基础 30 秒气温 30℃ 且空气湿度 50% 加 15 秒蒸腾快光照 50000 lux 再加 10 秒单次要封顶 300 秒两次之间至少隔 3600 秒。判断逻辑和执行写在一个函数里顺手把保护都塞进去void checkAndWater(float m, float t, float h, float lux) { if (m 30.0) return; // 不到干旱阈值不动 if (millis() - lastWater 3600000UL) return;// 最小 1 小时间隔 int dur 30; // 基础 30 秒 if (t 30.0 h 50.0) dur 15; // 高温低湿 15s if (lux 50000) dur 10; // 强光 10s digitalWrite(13, HIGH); delay(min(dur, 300) * 1000UL); // 封顶 300 秒 digitalWrite(13, LOW); lastWater millis(); }第三步 执行与记录继电器动作结束后把本轮数据追加写一行 CSV时间戳、湿度、气温、空气湿度、光照、是否浇水、时长到 SD 卡再走联网上报。CSV 用逗号分隔、带表头直接丢进 Excel 就能看趋势。上云Wi-Fi 数据上报与手机端查看 联网部分没有花活WiFi.begin()后循环等连接、最多重试 20 次约 10 秒连上就用 HTTPClient 向自建的一个小服务 POST 一段 JSON四个字段 soil_moisture / temperature / humidity / lightContent-Type 写成 application/json 即可。服务端我用的是家里 NAS 上跑的一个 50 行小服务只存最近 7 天的记录。落点在手机上能干什么我最终做的是三件事看最新一组读数 24 小时湿度曲线 浇水事件时间线每次继电器动作记一条设干旱阈值25%~45% 滑条、采样间隔60s~900s、单次时长上限控一个手动浇水按钮走同一条 POST 接口反向下发指令设备下次醒来时执行阈值和间隔做成可下发而不是写死是两周联调后最大的心得——不同地块、不同作物30% 这个数根本不该是常量。深度睡眠省电配置常开与睡眠的功耗对比⚡️ 户外没插座省电是硬指标。对比很直观5000mAh 锂电数字为估算模式平均电流估算续航估算常开Wi-Fi 保持连接 每秒轮询70~90 mA约 2~3 天深睡每 300 秒醒来采样 1 次上报后入睡平均约 2~3 mA约 60 天以上做法就是醒一会儿、睡大觉醒来后先拉高 GPIO14 给传感器供电等 120ms 稳定采样、判断、上报然后断电传感器、睡 300 秒。定时器唤醒直接用 IDF 接口官方示例在 libraries/ESP32/examples/DeepSleep/TimerWakeUp/改个时间参数就能用void sleepCycle() { // 一轮供电→采样→判断→上报→断电→睡 digitalWrite(14, HIGH); delay(120); // 传感器上电稳定 float m readSoilMoisture(); checkAndWater(m, readTemp(), readHum(), readLux()); reportToCloud(m); // Wi-Fi 上报 JSON digitalWrite(14, LOW); delay(100); // 等串口把日志发完 esp_sleep_enable_timer_wakeup(300ULL * 1000000); // 300 秒 esp_deep_sleep_start(); }两个细节顺手记一下睡眠前delay(100)是为了让串口日志发完否则醒来看到半行字唤醒后第一次读传感器会偏高所以我把首次读数丢弃只用第二次读数立刻老实了。装上之后响应速度、节水量与续航实测装置在阳台两个 20cm 花盆上跑了两周数据如下均为估算因环境而异响应从湿度跌破 30% 到继电器吸合延迟取决于采样间隔300 秒周期下约 1~6 分钟对花盆场景完全够用种大田要缩短间隔节水量对比之前每天早晚各浇 3 分钟的定时模式估算节水 30%~40%且再没出现过一次烂根续航5000mAh 5W 太阳能深睡模式下实测阴雨天连续跑约 3 周不掉电晴天白天充电基本无限续航翻车记录前 48 小时出过两次误触发都是探头表面凝水被当成很湿后来加了连续 2 个周期才改变状态的确认逻辑就稳定了FAQ连不上网、读数漂移与误触发问Wi-Fi 总是连不上先确认是 2.4GHz 频段ESP32 不支持 5GHz再查 SSID 里有没有特殊字符、密码有没有引号问题信号弱的户外加一句连接失败则睡 60 秒再试的兜底别死等。问湿度读数漂移或者跳变90% 是探头问题探头表面有水膜或冷凝会虚高擦干后 10 分钟回稳线缆太长引入干扰就跳变把信号线拧成对、缩短到 10cm 内。剩下的用 5 次平均 连续 2 周期确认两个滤波器解决别急着换硬件。问水泵被误触发一直转三层保险按顺序检查时长封顶我设 300 秒有没有生效、最小间隔3600 秒有没有生效、继电器电源是不是独立供电。三样齐了基本不可能烧泵我这套跑两周没有再出现过。问冬天还能用吗我在判断逻辑里加了一条低温熔断气温 5℃ 直接跳过浇水防冻伤也防探头结冰。北方露天的建议入冬前整体断电太阳能板收进屋。问两个花盆不够想扩到一片地见文末的扩展方向先说结论一拖多靠继电器模块加路数跨区组网再上 LoRa 或 Mesh固件结构不用推翻。想再往前一步方向其实就四条多区域控制换 4 路继电器板每区独立阈值、拉一个免费天气 API 做降雨预测、Wi-Fi 覆盖不到的棚用 LoRa 远传、多节点 Mesh 组网。代码结构不用大改判断和执行那两层原样保留。想继续翻的仓库内资源libraries/WiFi/ 的 Wi-Fi 接口与示例、libraries/ESP32/examples/DeepSleep/ 的深睡唤醒全家桶、cores/esp32/esp32-hal-adc.h 里 ADC 衰减档位探头分压偏低时把 11db 换成更高衰减能读得更准。跑通之后你会发现这套东西最难的不是代码是把探头从土里拔出来校准的那一下。【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价