ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

用 ESP32 搭建智能农业监测系统:从接线到上云的完整指南

用 ESP32 搭建智能农业监测系统:从接线到上云的完整指南 用 ESP32 搭建智能农业监测系统从接线到上云的完整指南【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32这个项目基于arduino-esp32官方核心库教你用一块 ESP32-C3 开发板加三只传感器约 60 元器件成本搭一套多节点智能农业监测系统土壤湿度、空气温湿度、土壤温度每 5 分钟采集一次并通过 WiFi 上传云端。全程含排障动手顺利的话 2 小时左右可以跑通第一条数据。最省事的硬件选型方案场景推荐硬件大致成本适合规模阳台盆栽、小阳台ESP32-C3 Mini / SuperMini10~20 元1~2 个监测点家庭菜园、大棚ESP32-C3 DevKitM-118~30 元3~5 个监测点小型温室ESP32-S3 开发板35~50 元5 个以上监测点本文以 ESP32-C3 DevKitM-1 为主线它是教程里资料最多、最容易买到的一档节点多起来之后再考虑 S3。传感器清单传感器测什么接口备注FC-28 土壤湿度土壤含水量AO 模拟输出0.9~2.7 V 摆动电容式探头可长期埋土DHT11空气温湿度数字单线温度误差 ±2 ℃DS18B20土壤温度1-Wire精度 ±0.5 ℃一根总线可串多只三只传感器合计 25~30 元。后面所有接线都围绕 C3 的固定引脚展开先记住一张分配表土壤湿度 FC-28 → AO 接 A0GPIO0VCC/GND 接 3V3/GNDDHT11 → DATA 接 GPIO6VCC/GND 接 3V3/GNDDS18B20 → DATA 接 GPIO7VCC 接 3V3GND 接 GND3.3 V 接线与 ADC 量程两个坑开发板 3V3 引脚输出稳定 3.3 V标称约 500 mA带三只传感器满载约 120 mA没问题但继电器、风扇这类负载不要从它上面取电需要独立的 5 V 电源并保证共地。第二个坑更隐蔽。ESP32-C3 的 ADC 固定在 GPIO0~GPIO5官方核心库的引脚定义variants/esp32c3/pins_arduino.h里 A0~A5 正是按这个顺序定义的。而 C3 的 ADC 即使开到最大衰减档量程上限也只有 2500 mV见 官方 ADC 文档FC-28 的模拟输出在干土端能摆到 2.7 V直接接 A0 会把量程头部截平。解法是分压AO 与 3V3 之间并一只 10 kΩGND 侧串一只 10 kΩ信号被压到 0.45~1.35 V全量程落进 ADC 可测区间。DS18B20 和 DHT11 的 DATA 线各需要一只4.7 kΩ 上拉电阻到 3.3 V这是后文排障环节的高频故障源。在 Arduino IDE 里完成第一版固件安装核心包只需两步在 IDE 首选项里添加开发者版板包地址然后在开发板管理器搜索 esp32 安装最新版。装好后在工具菜单选择ESP32C3 Dev Module串口监视器设到 115200。第一版固件先不接云只把数据打到串口用来验证接线对不对下面这段是核心采集循环负责连接 WiFi、按固定间隔读三只传感器、打印读数并预留了 JSON 打包和 HTTP 上传的位置。#define API_URL https://api.thingspeak.com/update #define KEY 你的API密钥 const int SOIL_PIN 0; // A0 const int DHT_PIN 6; // GPIO6 const int DS_PIN 7; // GPIO7 void setup() { Serial.begin(115200); WiFi.begin(你的SSID, 你的密码); } void loop() { if (WiFi.status() ! WL_CONNECTED) { delay(1000); return; } float soil readSoil(); // 见下方辅助函数 float airT dht.readTemperature(); float soilT ds.readTemperature(); Serial.printf(soil%.1f air%.1fC soilT%.1fC\n, soil, airT, soilT); // 打包 JSON 并通过 HTTP POST 发送到 API_URL带上 KEY 参数 // 这里保留位置具体用 HTTPClient 库几行即可 delay(5 * 60 * 1000); // 5 分钟一次 } float readSoil() { uint32_t sum 0; for (int i 0; i 10; i) { sum analogReadMilliVolts(SOIL_PIN); delay(5); } float mv sum / 10.0; // 10 次采样取平均压住抖动 return constrain(100.0 * (mv - 450) / 900.0, 0, 100); // 映射为百分比 }串口里稳定滚出三列数字说明硬件这半边已经通了。用 WiFi 把数据送上云农田里一般让 ESP32 以 Station 模式挂到现有的路由器上改WiFi.begin()的 SSID 和密码即可如果你打算自己配网官方核心里还带 RainMaker 云库省掉自建服务器这一步。接收端推荐从 ThingSpeak 开始建三个 channel 分别放湿度、空气温度、土壤温度拿到写入密钥填进代码里的API_URL和KEY采样间隔保持 5 分钟和免费套餐的限速正好匹配。最容易翻车的环节与排查现象大概率原因处理办法土壤读数一直 0 或 4095AO/GND 接反或 GND 没共地断电重新核对三个传感器接线DHT11 一直返回 NaN缺 4.7 kΩ 上拉或 DATA 线过长补上拉电阻线长控制在 30 cm 以内WiFi 连上但上传超时路由器开了 2.4 GHz 之外的频段或密钥写错路由器确认开启 2.4 GHz 并打印检查密钥土壤湿度值持续抖动单次采样噪声大保留代码里 10 次平均的写法排查顺序建议固定先看串口有没有读数再看 WiFi 状态码最后才怀疑云端配置——多数问题出在前两步。低功耗与 OTA 收尾电池供电的节点把采样间隔拉长、采完立即深睡就够了。官方核心提供 深睡眠 API可直接参考仓库示例 TimerWakeUp.ino这段代码负责把设备设成睡 5 分钟、醒一次采一次的节奏esp_sleep_enable_timer_wakeup(5 * 60 * 1000000ULL); // 5 分钟唤醒 esp_deep_sleep_start();深睡期间整机平均电流可以压到 1 mA 量级以下一次充电撑几个月没有问题。部署之后建议顺手加上 OTA用核心自带的 WebServer 和 Update 库做一个升级页面以后改程序不用拆电池仓。到这里你已经能独立完成一个从选型、接线、采集、上云到远程升级的完整链路会选开发板和传感器会绕开 ADC 量程和上拉电阻这类硬件陷阱也能在数据不对时按顺序定位问题。想再往前走一步加一只光照传感器或者用继电器控制电磁阀都是同一套接法监测点继续加密之后换用带向量指令的 ESP32-S3 跑轻量识别模型病虫害初筛这类事情可以挪到板子上做不用事事依赖云端。【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进