花不到 200 元,搭一套 ESP32 农田监测站:arduino-esp32 从接线到云端报警
【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32
凌晨两点,手机亮了
凌晨两点,手机震了一下:「土壤湿度 27%,低于阈值」。
不用起身下地,你在被窝里已经心里有数了。这就是 ESP32 农业监测系统给你的东西——设备埋在土里,数据自己跑到你手机上。传统做法是拿个测墒仪一天走两趟地,走完数据已经过时了。
这篇文章带你用 arduino-esp32 核心把这套系统搭出来:接线、读数据、联网、上云报警,硬件总成本不到 200 元,一个下午就能跑通。
先看清一条数据的完整路径
别急着接线,先看数据从哪里来、到哪里去:
| 角色 | 谁来做 | 干什么 |
|---|---|---|
| 采集 | FC-28 土壤湿度模块 | 把土壤含水量变成一个电压值 |
| 处理 | ESP32 + arduino-esp32 核心 | 读 ADC、打包成 JSON |
| 传输 | 芯片内置 WiFi | 连家里路由器,不用额外买模块 |
| 存储报警 | onenet 云平台 | 存数据,低于阈值时推送到你手机 |
流程是单向的:传感器 → ESP32 → WiFi → 云 → 手机。整条链路里你只写"读"和"发"两件事,存储和阈值判断都丢给云平台。
为什么选这颗芯片?WiFi 和蓝牙是烧在芯片里的,不用另购通信模块;GPIO 数量够同时接好几路传感器;还有深度睡眠——芯片的最低功耗状态,电流能压到几十微安,让电池撑过整个种植季。这是最典型的 ESP32 物联网应用形态。
仓库里的 arduino-esp32 核心把这些能力都封装好了:WiFi、HTTPClient、DeepSleep 的 API 直接调,不用自己啃底层。
ESP32-C3 DevKitM-1 引脚布局:接线前对照这张图确认电源、地线和 ADC 引脚
顺带说一句:核心里 ADC 是 12 位的,analogRead 返回 0~4095,实现在 cores/esp32/esp32-hal-adc.h,读数据时心里有数。
ESP32 土壤湿度传感器怎么接:电源、信号、地线
先装核心:Arduino IDE 打开板卡管理器,搜 esp32 装上,装完在菜单里选中你的开发板型号。
板卡管理器中搜索 "esp32" 并安装核心,这是后面一切的前置动作
FC-28 是最便宜的 ESP32 土壤湿度传感器,一共三根线:VCC 接 3.3V,GND 接地,AO(模拟输出)接 GPIO4。
记住三要素:电源、信号、地线。模块是 3.3V 逻辑,接到 5V 会烧;地线虚接则是大多数诡异现象的根源。
ESP32 GPIO 外设连接架构:所有传感器都通过 GPIO 矩阵汇入核心,接线前先看懂这张图
想再加一个 DS18B20 温度传感器,把它的 DATA 接到另一个 GPIO,再串一个 4.7K 上拉电阻就行。
核心逻辑:读土、发云
读的部分只有一件事:拿 ADC 原始值,换算成百分比。
float readSoilMoisture() { int raw = analogRead(SOIL_PIN); // 12 位,0~4095 return map(raw, 0, 4095, 100, 0); // 换算成百分比 }跑起来,串口监视器里应该刷出一个 60 左右的数字,把探头从土里拔出来,数值会明显变大。⚡ 如果数字纹丝不动,先查三根线和引脚号,九成问题出在这。
发的部分是:等 WiFi 连上,把 JSON 用 HTTP POST 到 onenet。这就是 ESP32 云端报警的最后一公里。
void setup() { WiFi.begin(WIFI_SSID, WIFI_PWD); http.begin("http://api.heclouds.com/<device_id>/datapoints"); }void loop() { String body = "{\"data\":[{\"id\":\"moisture\",\"value\":" + String(readSoilMoisture()) + "}]}"; http.sendHeader("Content-Type", "application/json"); http.POST(body); delay(60000); // 每分钟发一次 }成功的话串口打印出状态码 200,onenet 控制台的"物数据"页面里跳出湿度值。✅
为什么只推荐 onenet?免费的"物"足够单节点演示,数据点(datapoint)概念简单,发一个 POST 就行;阈值告警在控制台里配一下,超线就推送到你手机,不用自己维护服务器。device_id 是控制台"物"页面里的那个数字,填进 setup 里即可。
设备以 Station 模式(主动连路由器的那种,反之为 AP 热点模式)连家里路由器,农业监测的标准组网方式
踩坑手册:四个高频问题
下面四个是新手第一个星期最常碰到的,都是能当场修好的小事,不用慌:
| 现象 | 原因 | 一句话修复 |
|---|---|---|
| 土壤湿度读数跳十几点 | 接触不良或电源噪声 | 探头线焊牢,连读 10 次取平均再发 |
| WiFi.begin 后拿不到 IP | 密码错,或路由器只有 5G | 在 setup 里打印 WiFi.status() 和 rssi 定位 |
| ESP32 深度睡眠后不唤醒 | 忘了配唤醒源 | 睡眠前调用 esp_sleep_enable_timer_wakeup,写法看 DeepSleep 文档 |
| 读数一直是 4095 | AO 接了没有 ADC 通道的引脚 | 对照上面的引脚布局图换到 ADC 引脚 |
设备跑起来之后还有个好处:可以 OTA——不插线也能从网上给它换固件,不用再抱开发板回书桌,登录页长这样:
固件联网后可从 Web 页面升级,登录页挡一下未授权访问
延伸方向:低功耗、多节点、自动灌溉
- 低功耗改造:加一行深度睡眠定时唤醒,每 5 分钟醒一次读一次数据,电池续航能上一个数量级,改动只在 loop 末尾。
- 多节点组网:用仓库自带的 ESP_NOW 库 做点对点传输,田里的子节点不用各自配 WiFi,由一台基站统一收数转发。
- ESP32 智能灌溉:加个继电器驱动电磁阀,湿度连续半小时低于阈值就自动浇水,报警系统就此变成控制系统。
接上第一根线,串口里跳出第一个数值的那一刻,这套系统就活了。
【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考