拓冰建站拓冰建站
首页 / 资讯中心 / 正文

用 ESP32 做智能农业灌溉系统:30 分钟跑通自动浇花

用 ESP32 做智能农业灌溉系统30 分钟跑通自动浇花【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32阳台上的绿萝总在你出差时蔫掉浇多了又怕烂根用一块 ESP32 加一只土壤湿度传感器配合 arduino-esp32 核心库我们就能搭出一个会自己判断该不该浇水的智能农业灌溉系统。做完后你手里会有一块插在花箱边、每 5 分钟自己测土、土干了就开继电器浇水、数据还能推上云的设备。读完全文你会掌握配通 ESP32 的 ADC 采集链路校准土壤湿度传感器读数写出多参数灌溉决策函数用 Wi-Fi HTTP 上报 JSON 数据配 ESP32 深睡模式压低平均功耗备料硬件、软件与环境先把料备齐每项都给一句为什么选它。部件选型理由ESP32 WROOM-32 开发板Wi-Fi 稳定、引脚够多电容式土壤湿度传感器抗腐蚀、读数稳5V 继电器模块单路隔离强电、价格便宜DHT11 温湿度传感器单总线、占 1 个引脚12V 小水泵或电磁阀灌溉执行端USB 数据线 防水盒调试与长期部署软件只需要两样Arduino IDE官网下载即可。装完在文件 → 首选项里添加开发板管理器地址https://espressif.github.io/arduino-esp32/package_esp32_index.json再到工具 → 开发板 → 开发板管理器搜 esp32 安装详细步骤见 docs/en/installing.rst。确认成功开发板列表里出现 ESP32 Dev Module烧录任意示例后打开串口监视器115200 波特率能看到芯片启动打印即安装 OK。Arduino IDE 首选项界面在此添加 ESP32 开发板管理器地址配通采集链路从接线到设备能呼吸按电源 → 传感器 → 执行器 → 调试口的顺序接接完烧一段最小程序确认链路通了。传感器接线土壤湿度传感器VCC → 3.3V、GND → GND、AOUT → GPIO34GPIO34 是 ADC1 通道 6只收不输出正好当纯输入口DHT11VCC → 3.3V、GND → GND、DATA → GPIO4数据脚与 VCC 之间加 10kΩ 上拉电阻执行器与调试口继电器IN → GPIO13、VCC → 5V、GND → GND继电器 COM 串进水泵回路调试USB 线接开发板 USB 口就是串口 供电一体ESP32 开发板引脚布局GPIO34 与 GPIO13 都在右侧排针一侧下面这段最小验证程序只干一件事每 2 秒打印一次土壤湿度 ADC 原始值和换算百分比。烧录后把探头插进土里看到串口读数在 1000~4000 之间稳定变化就说明 ADC 采集链路通了。#define SOIL_MOISTURE_PIN 34 #define DRY_VALUE 4095 // 探头悬空测得 #define WET_VALUE 1500 // 探头浸水测得 void setup() { Serial.begin(115200); delay(500); } void loop() { int raw analogRead(SOIL_MOISTURE_PIN); float pct 100.0 * (DRY_VALUE - raw) / (DRY_VALUE - WET_VALUE); pct constrain(pct, 0.0, 100.0); // 标定值没标好时读数可能越界 Serial.printf(raw%d moisture%.1f%%\n, raw, pct); delay(2000); }⚠️ 两个最容易翻车的点传感器 AOUT 是模拟信号千万别顺手接到 5V 供电的模块上ADC 引脚超过 3.3V 会拉偏整路读数继电器模块的VCC/GND如果接的是水泵的 5V 电源就别再从 ESP32 取电两边 GND 必须共地否则信号线电位差可能烧 GPIO。实现灌溉决策设备怎么想、怎么动整条逻辑一句话讲清每 5 分钟读一次传感器如果土壤湿度低于 30% 且距上次灌溉已超过 1 小时则打开继电器浇水时长随温湿度和光照加时否则跳过并记一条原因。决策函数返回要不要浇、浇多久。高温低湿和强光都会加速土壤失水所以只在触发灌溉时才考虑加时总时长封顶 5 分钟防一次性浇透。struct Decision { bool water; int seconds; }; Decision decide(float moisture, float tempC, float hum, bool intervalOk) { Decision d{false, 0}; if (moisture 30.0) { // 没到干旱线就不浇宁可少浇 return d; } if (!intervalOk) { // 1 小时内已浇过避免频繁动作 return d; } int sec 30; // 基础时长先按一次 30 秒 if (tempC 30.0 hum 50.0) sec 15; // 又热又干蒸发快 d.water true; d.seconds min(sec, 300); // 封顶 5 分钟防一次浇透 return d; }执行函数真正驱动继电器并记录时间戳供下次判断间隔。#define RELAY_PIN 13 unsigned long lastWatering 0; // 上次灌溉结束秒 void water(int seconds) { if (seconds 300) seconds 300; // 与决策端双重封顶 digitalWrite(RELAY_PIN, HIGH); // 开阀 delay(seconds * 1000); digitalWrite(RELAY_PIN, LOW); // 关阀 lastWatering millis() / 1000; Serial.println(灌溉完成); }参数不合适会怎样如果把 30% 的干旱阈值定到 40%午后太阳一晒就频繁触发一上午浇十几次如果基础时长给到 3 分钟花盆直接变水塘。阈值和时长必须按你的土壤、容器大小实测校准先用最小验证程序观察几天的读数分布再定。把数据送上线Wi-Fi 上传与展示数据流向ESP32 → Wi-Fi → HTTP POSTJSON→ 你的服务端 → 仪表盘/脚本展示。选 HTTP 的理由很简单ESP32 的 Wi-Fi 库和 HTTPClient 都是核心自带的libraries/WiFi/、libraries/HTTPClient/串口里看到HTTP 200就是连接成功的判断标准不需要额外协议栈知识。ESP32 作为 Wi-Fi 站点模式接入路由器是智能农业灌溉系统联网的基本形态这段代码负责联网并打印 IP。烧录后串口出现Wi-Fi OK, IP:加上一串点分地址即算通过10 秒连不上就进入深睡省电等下轮再试。#include WiFi.h const char* SSID 你的WiFi名称; const char* PASS 你的WiFi密码; void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.begin(SSID, PASS); for (int i 0; i 20 WiFi.status() ! WL_CONNECTED; i) { delay(500); } if (WiFi.status() WL_CONNECTED) { Serial.print(Wi-Fi OK, IP: ); Serial.println(WiFi.localIP()); } else { ESP.deepSleep(60 * 1000000UL); // 连不上就睡 60 秒再试 } } void loop() {}连上之后把决策数据 POST 出去httpCode 200才算真正到达服务端#include HTTPClient.h const char* API_URL http://你的服务器地址/api/irrigation; void upload(float soil, float tempC, float hum) { HTTPClient http; http.begin(API_URL); http.addHeader(Content-Type, application/json); String body String({\soil\: String(soil) ,\temp\: String(tempC) ,\hum\: String(hum) }); int code http.POST(body); Serial.printf(http_code%d\n, code); // 看到 200 即成功 http.end(); }云端展示不用自己写服务端代码只需配齐 3 个参数SSID、WiFi 密码、API URL。数据落地后接 Grafana 之类的仪表盘或者每天跑个脚本汇总就能在手机/电脑上看到湿度曲线和灌溉记录。让它跑得久安全、省电与容错智能农业灌溉系统长期无人值守按先保命 → 再省能 → 后优化体验排优先级。先保命执行器保护问题水泵空转或长通会烧设备、浪费水。做法单次时长封顶 300 秒前面min已做lastWatering时间戳保证 1 小时内不重复灌溉上电前把继电器默认状态设为关阀。验证方式拔电源再上电观察继电器不动作、串口打印当前状态。再省能深睡模式问题5V 常开时整机约 240mA太阳能/电池方案撑不住。做法利用 arduino-esp32 封装好的ESP.deepSleep()内部即 ESP-IDF 的esp_deep_sleep见 cores/esp32/Esp.cpp每 5 分钟唤醒采一次样再睡回去平均电流可压到 mA 级。验证方式用串口监视器观察每次唤醒时间是否稳定间隔 300 秒。后优化容错与防护问题传感器偶发读失败、Wi-Fi 偶尔掉线、雨天怕进水。做法读数失败raw 为 0 或传感器未接时跳过本次决策宁可少浇也不误浇连续 5 次失败再报警Wi-Fi 掉线用递增延时重连而不是死循环硬刷主控板装进 IP65 防水盒、涂三防漆传感器线缆走防水接头。验证方式拔一次天线 10 秒模拟弱信号观察日志是否自动重连恢复。下一步 资源基础版跑稳之后可以往这几个方向加多路继电器 多只湿度传感器按区域分区灌溉把 HTTP 换成 MQTT 主题化上报接入 Home Assistant 这类现成仪表盘用 ESP-NOW 让多个节点互传数据覆盖没有 Wi-Fi 角落的菜地仓库内值得翻的几个文件ADC 接口参考 cores/esp32/esp32-hal-adc.h、Wi-Fi 库 libraries/WiFi/、本地日志可换用 LittleFSlibraries/LittleFS/。先烧录最小验证代码把串口里那组 ADC 读数贴出来下一步就是按你的土校准 DRY/WET 两个值。【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门