1. 无线MCU与传感器采集系统总览
做无线传感器项目,第一步就是选芯片。这事儿看着简单,其实坑不少。我见过太多人,上来就选ESP32,理由是“便宜、资料多”。结果做到低功耗环节,发现怎么都降不下去,换芯片又得重新画板子,折腾得够呛。
所以这一章,咱们就聊聊怎么选无线MCU。我会拿三款主流芯片——ESP32、nRF52840、STM32WB——做个对比,再讲讲选型时真正该看什么。
1.1 三款主流芯片,各自什么路数?
先给个总览。这三款芯片,定位完全不同:
| 芯片型号 | 无线协议 | 内核 | 典型功耗(RX) | 最大发射功率 | Flash / RAM | 适合场景 |
|---|---|---|---|---|---|---|
| ESP32 | Wi-Fi + BLE | 双核 Xtensa LX6 | ~80 mA | +20 dBm | 4 MB / 520 KB | Wi-Fi直连、OTA、原型验证 |
| nRF52840 | BLE + Thread + Zigbee | 单核 Cortex-M4F | ~4.6 mA | +8 dBm | 1 MB / 256 KB | 低功耗传感器、可穿戴 |
| STM32WB55 | BLE + Thread + Zigbee | 双核 M4 + M0+ | ~4.5 mA | +6 dBm | 1 MB / 256 KB | 工业控制、协议栈分离 |
你看,光看接收电流,ESP32就比另外两款高了将近20倍。这不是说ESP32不好,而是它天生就不是为纽扣电池设计的。
1.2 选型核心指标——别只看主频和Flash
很多工程师选MCU,习惯先看主频、Flash、RAM。做无线产品,这些当然重要,但还有几个指标,你得更上心。
1.2.1 功耗——最容易被低估的坑
功耗分三块:发射、接收、休眠。我习惯先看休眠电流,再看接收电流。
- 休眠电流:nRF52840能做到0.4 µA(保留RAM),STM32WB大概0.6 µA,ESP32在深度睡眠下也能到5 µA左右。但注意,ESP32从深度睡眠唤醒需要时间,大概几毫秒,这期间电流会冲到几十毫安。
- 接收电流:这个差距最大。nRF52840和STM32WB都在4-5 mA,ESP32直接跳到80 mA。为什么?因为Wi-Fi的OFDM解调器本身就比BLE的GFSK复杂得多,功耗自然高。
- 发射电流:取决于发射功率。ESP32在+20 dBm时能到240 mA,nRF52840在+8 dBm时大概14 mA。你想想看,如果项目用两节AA电池供电,ESP32可能撑不过一周,nRF52840能跑几个月。
我的经验:做电池供电的产品,先算平均功耗,别只看峰值。我曾经有个项目,用ESP32做温湿度采集,每5分钟上报一次,结果电池只撑了3天。后来换成nRF52840,同样的上报频率,电池撑了半年多。
1.2.2 发射功率与灵敏度——通信距离的真相
发射功率高,不一定传得远。灵敏度同样关键。
- ESP32:发射功率最高+20 dBm,灵敏度-98 dBm(BLE)。Wi-Fi模式下灵敏度能到-92 dBm左右。
- nRF52840:发射功率最高+8 dBm,但灵敏度能做到-103 dBm(BLE长距离模式)。
- STM32WB:发射功率最高+6 dBm,灵敏度-100 dBm。
这里有个公式:链路预算 = 发射功率 + 灵敏度(绝对值)。nRF52840的链路预算大概是111 dB,ESP32是118 dB。看起来ESP32更高,但别忘了,ESP32的接收电流是nRF52840的十几倍。说白了,用高功率换距离,代价是电池寿命。
避坑指南:我曾经在一个工厂项目里,为了覆盖200米距离,硬把ESP32的发射功率调到+20 dBm。结果通信是稳定了,但设备发热严重,电池仓都烫手。后来改用nRF52840加外置PA,功耗降了一半,距离还多了50米。
1.2.3 外设资源——够用就好,别贪多
做传感器采集,常用的外设就那几个:ADC、I2C、SPI、UART、GPIO。三款芯片都够用,但有些细节要注意:
- ESP32:两个I2C、三个SPI、三个UART,还有触摸传感器接口。但它的ADC线性度一般,做高精度采集得校准。
- nRF52840:一个I2C、两个SPI、一个UART,支持USB和QSPI。ADC是12位的,精度不错。
- STM32WB:外设最丰富,多个I2C、SPI、UART,还有CAN、USB、LCD接口。ADC也是12位,带硬件过采样。
我个人习惯,做传感器节点,外设够用就行。别为了“万一以后要用”选个外设最多的芯片,结果功耗和成本都上去了。
1.3 成本与生态——别只看芯片单价
芯片单价只是冰山一角。开发成本、认证成本、生产维护成本,这些都得算进去。
| 维度 | ESP32 | nRF52840 | STM32WB |
|---|---|---|---|
| 芯片单价(1k) | ~$2.5 | ~$4.5 | ~$5.0 |
| 开发环境 | Arduino / ESP-IDF | nRF5 SDK / Zephyr | STM32Cube / Mbed |
| 文档质量 | 中等,社区活跃 | 优秀,官方例程多 | 优秀,但学习曲线陡 |
| 认证成本 | FCC/CE 需注意Wi-Fi谐波 | BLE认证简单 | BLE认证简单 |
| 量产维护 | 版本迭代快,注意兼容性 | 稳定,长期供货 | 稳定,工业级支持 |
你看,ESP32虽然便宜,但Wi-Fi认证比BLE麻烦得多。我有个朋友做智能插座,ESP32的FCC认证花了两个月,改了三版天线才过。而nRF52840的BLE认证,基本一次过。
注意:别只看芯片单价。如果项目量不大(几千台),开发时间和认证成本才是大头。选一个你熟悉的生态,比省几块钱芯片钱划算得多。
1.4 选型决策流程——我一般这么走
嗯,这里我画了个流程图,帮你理清思路:
这个流程我用了好几年,基本没出过大的选型失误。核心就一句话:先定供电方式,再定无线协议,最后看生态和成本。
1.5 小结——选型没有银弹
说实话,没有哪款芯片是万能的。ESP32适合需要Wi-Fi直连、不苛求功耗的场景;nRF52840是低功耗传感器的首选,生态成熟、文档齐全;STM32WB适合工业级应用,特别是需要双核隔离的场景。
我个人的建议是:如果你刚开始做无线传感器项目,从nRF52840入手。它的低功耗特性会让你少走很多弯路。等把低功耗调明白了,再回头看ESP32,你会发现很多问题都能迎刃而解。
一个小技巧:选型时,先买几块开发板回来,用示波器测一下实际功耗。数据手册上的数字都是理想情况,实际跑起来可能差不少。我吃过这个亏,现在每次选型都先实测。