4、主控芯片选型:ESP32 vs STM32 vs Arduino

做天窗漏水检测系统,第一步就是选“大脑”。

我见过不少新手,一上来就纠结选哪个芯片。其实没那么玄乎。今天我就把这三款主流芯片掰开揉碎了讲清楚。性能、功耗、成本,一个都不落下。

4.1 三款芯片的定位差异

先说说我的理解。这三款芯片,说白了就是三个不同的“性格”。

  • Arduino(以ATmega328P为例):入门神器。8位单片机,主频16MHz。我最早做智能家居原型时就用它。优点是上手快,生态好。缺点是性能弱,内存小(2KB SRAM)。
  • STM32(以STM32F103C8T6为例):工业级选手。32位ARM Cortex-M3内核,主频72MHz。我做过几个量产项目都用它。稳定、可靠、外设丰富。但开发门槛稍高。
  • ESP32:物联网之王。双核32位Xtensa LX6,主频240MHz。自带Wi-Fi和蓝牙。我最近两年做联网项目,基本首选它。性价比极高。

核心结论:如果你做的是纯本地控制、不联网的天窗检测,STM32是首选。如果需要联网上报数据,ESP32更合适。Arduino适合快速验证原型。

4.2 性能对比:谁跑得更快?

性能这东西,不能光看主频。我习惯从三个维度看:处理能力、内存、外设接口。

参数 Arduino Uno (ATmega328P) STM32F103C8T6 ESP32
架构 8位 AVR 32位 ARM Cortex-M3 32位 Xtensa LX6
主频 16 MHz 72 MHz 240 MHz
SRAM 2 KB 20 KB 520 KB
Flash 32 KB 64 KB 4 MB
ADC通道 6路 (10位) 10路 (12位) 18路 (12位)
PWM输出 6路 12路 16路
硬件定时器 3个 7个 4个

你看这个表就明白了。Arduino的2KB SRAM,跑个漏水检测逻辑还行,但你要是想加个MQTT协议栈,内存直接爆掉。我踩过这个坑——有一次用Arduino做温湿度上报,数据量稍微大一点,程序就死机了。

STM32的20KB SRAM,跑FreeRTOS都够用。ESP32就更不用说了,520KB SRAM,跑个完整的物联网协议栈绰绰有余。

我的建议:天窗检测系统需要同时处理漏水传感器、雨量传感器、电机控制、Wi-Fi通信。至少选STM32或ESP32。Arduino只适合做传感器数据采集的“小节点”。

4.3 功耗分析:电池能撑多久?

天窗检测系统,很多时候是装在屋顶或阳台的。不一定有220V电源。所以功耗很关键。

我做过一个项目,客户要求用电池供电,至少撑半年。当时我对比了三款芯片的功耗数据:

工作模式 Arduino (ATmega328P) STM32F103 ESP32
活跃模式 ~15 mA @ 5V ~50 mA @ 3.3V ~80 mA @ 3.3V
深度睡眠 ~1 μA ~2 μA ~5 μA
Wi-Fi开启(ESP32) N/A N/A ~150 mA

这里有个关键点:ESP32的Wi-Fi是耗电大户。如果你让ESP32一直连着Wi-Fi,电池撑不了几天。但如果你用深度睡眠模式,每隔10分钟醒来一次发数据,功耗可以降到很低。

我曾经做过一个测试:ESP32深度睡眠+定时唤醒,每10分钟采集一次数据并上报,用18650电池(3000mAh)可以撑3个月左右。STM32如果只做本地逻辑控制,用同样的电池可以撑半年以上。

注意:Arduino虽然活跃功耗低,但它的处理能力弱。如果你需要做复杂的漏水检测算法(比如滤波、阈值判断),Arduino可能得一直处于活跃模式,反而更耗电。

4.4 开发成本评估:钱花在哪?

成本不只是芯片价格。我习惯从三个角度算账:硬件成本、开发时间成本、维护成本。

4.4.1 硬件成本

项目 Arduino STM32 ESP32
芯片单价(批量) ~¥5 ~¥8 ~¥12
开发板价格 ¥30-50 ¥15-30 ¥20-40
所需外围元件 少(晶振+电容) 中等(晶振+电容+复位) 少(集成度高)
PCB设计难度 中(注意天线布局)

你看,单看芯片价格,Arduino最便宜。但加上开发板、外围元件,其实差距不大。ESP32虽然芯片贵一点,但它集成了Wi-Fi和蓝牙,省去了外接通信模块的钱。

4.4.2 开发时间成本

这个我最有发言权。我做过三个平台的开发对比:

  • Arduino:从零到跑通,1天。库函数丰富,但调试手段有限。我遇到过一个bug,查了3天才发现是库版本冲突。
  • STM32:从零到跑通,3-5天。需要配置时钟树、外设初始化。但一旦熟悉了HAL库,开发效率很高。我习惯用STM32CubeMX生成初始化代码,省事。
  • ESP32:从零到跑通,2-3天。Arduino IDE就能开发,也可以用ESP-IDF。我推荐用Arduino框架做原型,用ESP-IDF做量产。

我的经验:如果你团队里有人熟悉STM32,选STM32开发周期最短。如果是从零开始,ESP32的学习曲线更平缓。Arduino只适合做demo。

4.4.3 维护成本

这个很多人会忽略。我见过一个项目,用Arduino做了100套设备,结果半年后坏了20套。原因是Arduino的Flash寿命有限(约1万次擦写),频繁OTA升级导致Flash损坏。

STM32和ESP32的Flash寿命都在10万次以上。而且ESP32支持安全启动和Flash加密,安全性更好。

4.5 我的最终选型建议

好了,说了这么多,我直接给结论:

  1. 做原型验证:用Arduino。便宜、快、好改。但别拿它做量产。
  2. 做本地控制、不联网:选STM32。稳定、可靠、功耗低。我做过一个天窗控制器,用STM32F103,电池供电,一年没出问题。
  3. 做物联网、需要远程监控:选ESP32。自带Wi-Fi,性能强,生态好。我最近做的漏水检测系统就用ESP32,配合MQTT上报数据,手机端实时查看。

避坑指南:我曾经在一个项目中选了ESP32,但没注意天线布局。结果Wi-Fi信号差得离谱。后来重新画了PCB,加了π型匹配网络,才解决问题。如果你用ESP32,一定要参考官方的天线设计指南。

嗯,选型这块就聊到这。下一章我会讲传感器选型——漏水检测到底用电阻式还是电容式?到时候见。