ESP32 智能灌溉实战:4 步搭出 Arduino 物联网节水系统 ESP32 智能灌溉实战4 步搭出 Arduino 物联网节水系统【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32做完之后你能做到手机上随时看菜地墒情土壤低于 30% 时 ESP32 自动开水泵 30 秒每半小时把数据传一次云端。这是一套 Arduino 物联网节水的组合全部配件加起来不到 100 元。读完本文你能学会把电容式土壤湿度探头、继电器接到 ESP32 上并验证读数写一个干了才浇、热了多浇的多参数决策算法用深度休眠把整机待机做到微安级定时醒来读数通过 Wi-Fi 把墒情 JSON 上传到云端手机可见方案速览硬件清单和闭环原理先看硬件清单全部是市面上现成的模块模块型号 / 规格作用预算参考主控ESP32-WROOM-32DevKitC采集数据、做决策、Wi-Fi 上传约 25 元土壤湿度电容式模拟输出读土壤干湿度灌溉依据约 8 元温湿度DHT11温度、相对湿度约 6 元光照BH1750I2C 接口光照强度晴天修正约 10 元继电器单路 5V开关水泵隔离强电约 5 元电源5V 适配器 太阳能板/锂电池可选供电约 30 元原理一句话感知 → 决策 → 执行 → 回传的闭环。三个传感器先给 ESP32 一组读数程序判断要不要浇、浇多久继电器接通水泵最后 Wi-Fi 把结果送回云端你在手机上看。四步实战第 1 步Arduino IDE 装好 ESP32 支持包先装 Arduino IDE官方 2.x 版即可然后做三件事文件 → 首选项在附加开发板管理器网址里填入乐鑫提供的板包索引直接粘贴纯文本即可https://espressif.github.io/arduino-esp32/package_esp32_index.json工具 → 开发板 → 开发板管理器搜 esp32安装最新稳定版约 200MB耐心等待。重启 IDE工具 → 开发板里能看到 ESP32 Dev Module 就算成功。判断依据开发板列表出现 esp32 条目版本号显示 3.x当前稳定版是 3.3。第 2 步3 步接线——探头、继电器、电源以 DevKitC 为例关键引脚如下。ESP32 的引脚编号由芯片决定换开发板只是丝印名不同。土壤探头VCC 接 3.3VGND 接 GNDOUT 接 GPIO34该脚只能输入正好用来读传感器。DHT11VCC 接 3.3V 或 5V数据脚接 GPIO4。BH1750SDA 接 GPIO21SCL 接 GPIO22这是 I2C 默认引脚程序不用改地址就能找到它。继电器 IN 接 GPIO13继电器的 VCC 和 GND 接外部 5V 适配器GND 必须和 ESP32 共地。⚠️ 水泵的供电不要从 ESP32 的 5V 脚取。判断依据上电后打开串口监视器115200 波特率读探头空气里应接近 4095浸入水中应降到 2000 以下。若读数卡死不动或恒为 0先查线。第 3 步烧录并串口验证打开仓库里的官方示例直接烧录比如 DeepSleep 示例目录 下的 GPIO 相关 demo编译、上传屏幕出现 Done uploading 即成功。然后自己敲两行代码验证硬件串口打印readSoilMoisture()的返回值往探头上滴水百分比应该上升。digitalWrite(13, HIGH)再LOW继电器应咔哒一声吸合释放。判断依据读数随环境变化、继电器有响应说明接线和烧录通道都没问题可以写正式逻辑了。第 4 步连云上报墒情数据联网部分用核心自带的 WiFi 库就够了。setup()里WiFi.begin(ssid, password)循环等待直到WiFi.status() WL_CONNECTED超时 10 秒重试。连上后打印 IP方便确认本机已进路由器网络。每 30 分钟用 HTTPClient 发一次 POST JSON土壤湿度、温度、湿度、光照、本轮灌溉时长。云端先用任意接收 POST 的接口就行本地没有服务器就先打印到串口。判断依据云端收到一条记录且状态码 200 系列字段和你串口里看到的一致系统就闭环了。关键代码解读校准把原始读数变成百分比const int SOIL_PIN 34; const int DRY_RAW 4095; // 探头在空气中的读数 const int WET_RAW 1500; // 探头完全浸入水的读数 float readSoilMoisture() { int raw analogRead(SOIL_PIN); float pct 100.0 * (DRY_RAW - raw) / (DRY_RAW - WET_RAW); return constrain(pct, 0.0, 100.0); // 钳制在 0-100% }这段在做什么把 12 位原始读数0–4095线性映射成 0–100%。为什么这么写每个探头的干、湿值都不一样别照抄别人的数字——先把你自己的探头放在空气里、再浸入水中各记一个数替换 DRY_RAW 和 WET_RAW这就是校准。ESP32 的 ADC 是 12 位底层实现在 esp32-hal-adc.h。多参数决策干了才浇热了加时bool needWatering false; int duration 0; if (soil 30.0) { // 30% 为干旱阈值 needWatering true; duration 30; // 基础 30 秒 if (temp 30.0 hum 50.0) duration 15; // 高温低湿加 15 秒 if (lux 50000) duration 10; // 强光加 10 秒 if (duration 300) duration 300; // 上限 5 分钟 }这段在做什么土壤湿度低于 30% 才启动然后在基础 30 秒上按环境加时。为什么这么写阈值全是可调常量下地跑一周后看数据再微调最后那行封顶是防止传感器误读让水泵连开半小时把地浇成河。深度休眠睡 30 分钟醒来干一轮void setup() { Serial.begin(115200); initWiFi(); // 深度休眠会清空寄存器 initSD(); // WiFi、SD、SPI 必须重新初始化 } void doOneRound() { float soil readSoilMoisture(); // ...决策、上传... esp_sleep_enable_timer_wakeup(1800ULL * 1000000); // 睡 1800 秒 esp_deep_sleep_start(); }这段在做什么跑完一轮测 → 判 → 传就睡定时器 30 分钟后叫醒它。为什么这么写ESP32 开 Wi-Fi 活跃时电流约 80mA深度休眠降到微安级半小时一轮电池用一周不成问题。注意setup()里的initWiFi()不能省——每次从深度休眠醒来等同冷启动。ESP32 灌溉避坑清单5 个高频问题水泵一开整机突然重启现象继电器咔哒一声串口立刻断流程序从头跑。原因水泵供电接在 ESP32 的 5V 脚上电机启动瞬间拉低全板电压触发欠压复位。解法水泵用独立 5V 适配器供电只和 ESP32 共 GND。土壤探头读数越来越飘探片上有白霜现象同一块土上个月读 45%现在只读 20%。原因电阻式探头在湿土里有直流电流流过水被电解腐蚀白霜就是腐蚀产物。解法换电容式探头靠介电常数变化工作无直流电流、不腐蚀。Wi-Fi 偶发断网云端断数据现象跑几天突然云端没有新记录重启设备又恢复。原因WiFi.begin只在 setup 里执行一次断线后没人重连。解法每次上传前检查连接状态断线执行WiFi.reconnect()重连失败就把这轮数据写进本地缓冲下次补传。深度休眠唤醒后 SD 卡、Wi-Fi 报错现象唤醒后第一轮SD.begin失败或 Wi-Fi 卡死。原因深度休眠清空所有寄存器外设回到出厂状态代码却以为它们还开着。解法把每次唤醒都当全新开机setup()里先读唤醒原因再完整初始化所有外设。湿度值抖动水泵乱启停现象水泵偶尔自己咔哒一下又停日志里时长只有 1 秒。原因单次模拟读数噪声大偶发跌破阈值。解法取 10 次读数的中位数并且连续 2 轮都低于阈值才真正启动灌溉。下一步与延伸阅读多区域灌溉加继电器和探头每个区域独立阈值与时间表。天气预报集成浇水前先查当天降水雨天跳过。远距离场景Wi-Fi 覆盖不到的田块改 LoRa 回传。供电优化太阳能板 锂电池把深度休眠当常驻状态。想深入实现细节仓库里可以看联网部分看 WiFi 库本地缓冲看 SD 库官方示例集中在 examples 目录串口、休眠、GPIO 都有现成 demo 可以直接改。今天就能做的第一件事花 8 元买一个电容式土壤探头接上你的 ESP32把上面那段 8 行的校准代码扔进串口监视器——把手伸进土里看到数字跟着变这个项目就算真正开始了。【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考