3、核心硬件选型(主控):STM32 vs ESP32 vs 树莓派,选型对比表,我为什么最终选了ESP32

做嵌入式项目,第一步就是选主控。这一步选错了,后面全是坑。

我记得刚入行那会儿,有个师兄跟我说过一句话:「选芯片就像选老婆,不能光看参数,还得看脾气。」当时觉得是玩笑,后来自己踩了坑才明白——芯片的「脾气」就是它的生态、功耗、开发效率。这三样东西,数据手册里可不会写。

今天咱们就掰扯掰扯,STM32、ESP32、树莓派这三款主流方案,到底哪个更适合做多路灌溉控制器。

3.1 三款主控的「人设」

先给它们画个像:

  • STM32:老牌工业级选手。稳定、可靠、外设丰富。我最早做灌溉项目用的就是它。
  • ESP32:后起之秀。自带Wi-Fi和蓝牙,价格便宜到离谱。说白了就是「卷王」。
  • 树莓派:全能型选手。跑Linux,能接摄像头,能跑Python。但功耗高、启动慢。

你想想看,灌溉控制器需要什么?

  • 控制多路电磁阀(GPIO够用)
  • 读取土壤湿度、流量传感器(ADC、I2C)
  • 联网上报数据(Wi-Fi或4G)
  • 低功耗(太阳能供电场景)
  • 成本敏感(一个农场几十个节点)

带着这些需求,咱们来看对比表。

3.2 核心选型对比表

对比维度 STM32F103(主流型号) ESP32 树莓派 Zero W
价格(批量) ¥8-15 ¥10-18 ¥80-120
主频 72MHz 240MHz(双核) 1GHz(单核)
RAM 20KB 520KB 512MB
Flash 64KB-512KB 4MB-16MB MicroSD卡
Wi-Fi/蓝牙 需外挂模块 内置双模蓝牙+Wi-Fi 内置Wi-Fi
ADC精度 12位(2-3路) 12位(2路) 无(需外接)
GPIO数量 37(LQFP48封装) 25(常用) 26
低功耗模式 Stop模式:~5μA Deep sleep:~10μA 无真正低功耗
开发环境 Keil/IAR/STM32Cube Arduino/ESP-IDF/MicroPython Raspbian/Python
启动时间 毫秒级 毫秒级 10-30秒
生态成熟度 ★★★★★ ★★★★☆ ★★★★☆

关键发现:

  • STM32在工业稳定性上无敌,但联网成本高(外挂Wi-Fi模块+¥15)
  • ESP32在性价比和集成度上碾压,尤其适合分布式节点
  • 树莓派性能过剩,功耗和成本不适合做终端节点

3.3 我为什么最终选了ESP32?

说实话,一开始我是偏向STM32的。毕竟做了十年嵌入式,对ST的生态太熟了。但这次项目有几个特殊要求,让我不得不重新考虑。

第一,成本压力。

一个农场少说50个节点,多则200个。如果用STM32+ESP8266(Wi-Fi模块),单节点成本多出12-15块。200个节点就是3000块。老板听了直摇头。

ESP32一片搞定,还多一个蓝牙,将来做手机近场调试也方便。

第二,开发效率。

这个项目时间紧。用STM32,我得写底层驱动、移植TCP/IP协议栈、处理Wi-Fi配网。一套下来至少两周。

ESP32用Arduino框架,Wi-Fi配网库现成的,MQTT库现成的,OTA升级库也是现成的。我花了一天就把原型跑通了。

嗯,这里要注意——不要觉得Arduino很low。在工业原型验证阶段,快速迭代比什么都重要。

第三,OTA升级。

灌溉控制器装在地里,你总不能每个节点都拿烧录器去刷固件吧?

ESP32原生支持OTA,分区分得好,还能做回滚。我曾经在STM32上做过OTA,那叫一个折腾——得自己写bootloader、算CRC、处理断线重传。搞了整整一周。

避坑指南:

我曾经在一个项目中用STM32+4G模块做远程灌溉。结果发现,4G模块的功耗比主控还高,电池撑不过三天。后来换成ESP32+深度睡眠,配合太阳能板,续航直接拉到半年。

所以选型时,别只看主控本身,要把整个系统的功耗算进去

3.4 什么情况下我还会选STM32?

别误会,我不是说ESP32万能。有些场景STM32依然是首选:

  • 工业温度范围:-40°C到85°C,ESP32虽然标称也能到,但长期可靠性不如ST
  • 实时性要求极高:比如PWM控制步进电机,STM32的定时器更精准
  • 安全认证:有些项目要求通过IEC 61508,STM32有安全手册,ESP32没有
  • 客户指定:有些老客户就认ST,你跟他解释ESP32便宜,他不管

但咱们这个多路灌溉控制器,说白了就是个「传感器采集+阀门控制+数据上报」的活。ESP32完全够用,而且绰绰有余。

3.5 最终选型结论

我最终选了ESP32-WROOM-32D,理由总结如下:

  1. 集成Wi-Fi/蓝牙:省掉外挂模块,BOM成本降低30%
  2. 双核240MHz:一个核跑协议栈,一个核跑业务逻辑,互不干扰
  3. 深度睡眠10μA:配合太阳能充电,可以做到无人值守
  4. OTA升级:远程修复bug,不用下地干活
  5. 生态丰富:Arduino、ESP-IDF、MicroPython随便选,社区资料多

注意:

ESP32的ADC线性度不太好,测量土壤湿度时建议用外部ADS1115。另外,ESP32的GPIO耐压只有3.3V,驱动电磁阀必须加光耦隔离和MOS管驱动。这些细节咱们后面章节会详细讲。

好了,主控选型就聊到这儿。下一章咱们开始画电路原理图,重点讲「多路电磁阀驱动电路设计」——这里面的坑可不少,我当年烧过三个MOS管才搞明白。


公众号:蓝海资料掘金营,微信deep3321