周三下午,我的番茄苗又蔫了。

不是缺水,是浇多了。土壤传感器显示湿度85%,但我三天前才浇过。这种"凭感觉"的种植方式,让我在过去半年里养死了四盆罗勒。于是我决定:用代码解决这个古老问题。

打开网易新闻 查看精彩图片

ESP32 Garden 就此诞生。这是一个端到端的农业物联网监控系统,用30美元的硬件成本,把阳台变成了数据驱动的微型农场。

硬件架构:边缘计算的极简实践

核心选用ESP32微控制器。不为别的,就图它内置Wi-Fi,省掉额外的通信模块。处理性能对付传感器数据采集绰绰有余,功耗也足够低,USB供电就能跑。

传感器阵列四件套:

1. DHT11:空气温湿度,最基础的植物环境指标

2. 土壤湿度传感器:电容式,测的是土壤体积含水量,比电阻式耐用

3. 雨滴传感器:检测降水事件,雨天自动跳过浇水逻辑

4. SSD1306 OLED屏:本地实时读数,不用每次都掏手机看网页

户外部署有个现实问题:泥土和湿气是电路板的死敌。我设计了一个3D打印的小房子造型外壳,把ESP32和线材全包进去,只留传感器探头外露。STL文件开源在GitHub,支持免支撑打印。

软件栈:四个模块,各干各的

整个系统拆成四层,每层独立演进,互不影响。

第一层:固件(C++/Arduino)

ESP32跑一个轻量级Web服务器,但不渲染HTML——那太耗资源了。它只暴露一个REST端点 /json,被请求时返回结构化JSON:

{
"temperatura": 24.5,
"humedad_amb": 68,
"suelo": 42,
"lluvia": 0
}

这种设计让微控制器专注于一件事:采集数据。渲染和存储交给后面环节。

第二层:数据摄取服务(Python后台进程)

一个Python脚本作为守护进程运行,定时轮询ESP32的API,把读数写入时序数据库。这里的关键是"定时"——我设的是每5分钟一次,既能捕捉环境变化,又不会把Flash写坏。

第三层:桌面管理GUI(PyQt)

非必需,但方便。可以实时查看传感器状态、手动触发数据抓取、调试硬件连接。开发阶段救了我很多次。

第四层:Web可视化面板

历史数据用图表呈现,支持按天/周/月缩放。核心功能是"对比视图"——把土壤湿度曲线和浇水记录叠在一起看,一眼就能发现"浇完水多久开始干"的规律。

实际运行中的发现

系统跑了一个月后,几个反直觉的数据浮出水面。

我的番茄盆,表层土看着干裂,但传感器显示深层湿度还有35%。原来毛细作用让水分分布极不均匀,肉眼判断完全失效。调整成"深层湿度低于25%才浇水"后,烂根问题消失了。

另一个发现:雨天传感器偶尔会误报。不是硬件问题,是叶片滴水落在感应区。加了一个"连续30秒检测到降水才确认"的软件滤波,误触发率从每天2-3次降到零。

成本与扩展性

整套硬件BOM成本约30美元,其中ESP32开发板5美元,传感器套件8美元,3D打印耗材忽略不计。代码全开源,部署文档写到了"插哪根线、填哪个Wi-Fi密码"的粒度。

架构预留了扩展接口。JSON格式加了版本字段,后续增加CO2传感器或光照探头,老数据不会解析失败。微服务拆分也意味着,哪天ESP32算力不够了,可以无缝迁移到ESP32-S3或树莓派Pico W,只改固件层,上层逻辑不动。

这个项目最满意的不是技术实现,是种植结果的改善。同一批番茄种子,去年收成1.2公斤,今年到目前已经2.7公斤,而且没再出现过因浇水不当导致的植株死亡。

数据驱动的农业,不一定需要万亩良田。一个阳台、一块开发板、几行Python,就够了。