第三章 硬件平台选型:主控芯片选型(ESP32/STM32)、Wi-Fi/蓝牙模组选择、传感器与驱动电路设计
好,咱们进入第三章。这一章聊硬件选型,说白了就是「搭积木」——你得知道手里有哪些积木,每块积木什么脾气,怎么把它们拼起来不出问题。
我做智能照明OTA升级系统,硬件选型是第一步,也是最容易踩坑的一步。你想想看,芯片选错了,后面软件写得再好也白搭。我见过不少项目,前期拍脑袋选了MCU,结果OTA升级时发现Flash不够,或者Wi-Fi信号不稳定,最后只能推倒重来。嗯,咱们今天就把这事聊透。
3.1 主控芯片选型:ESP32 vs STM32
主控芯片是整个系统的「大脑」。智能照明场景下,主流选择就两个:ESP32和STM32。我两个都用过,各有各的脾气。
3.1.1 ESP32:天生为IoT而生
ESP32是乐鑫家的明星产品。我个人习惯,但凡项目需要Wi-Fi或蓝牙直连,首选ESP32。为什么?
- 内置Wi-Fi + 蓝牙:省掉一个外挂模组,BOM成本直接降下来。我在一个智能灯泡项目里,用ESP32-S3一颗芯片搞定所有,连MCU都省了。
- 双核处理器:一个核跑协议栈,一个核跑应用逻辑。OTA升级时,后台下载固件不影响前台调光,用户体验好很多。
- 大Flash支持:ESP32通常配4MB~16MB Flash。OTA升级需要至少两个固件分区(当前版本+新版本),Flash小了根本玩不转。我建议至少选8MB的型号。
- 成熟的OTA框架:ESP-IDF自带OTA例程,HTTP/HTTPS下载、回滚机制、版本校验都写好了。你改改就能用,省心。
重要提醒:ESP32的ADC精度一般,做高精度调光(比如PWM调色温)需要外挂DAC或专用LED驱动芯片。别指望它内置的ADC能搞定12位以上的调光分辨率。
3.1.2 STM32:稳如老狗
STM32是意法半导体的王牌。如果你对实时性要求极高,或者需要跑复杂的控制算法,STM32是更好的选择。
- 实时性:STM32的定时器、中断响应比ESP32快一个量级。做PWM调光时,STM32可以做到微秒级精度,ESP32只能做到毫秒级。
- 生态丰富:HAL库、LL库、CubeMX配置工具,开发效率很高。我早期做照明项目时,用STM32F103搭配ESP8266(Wi-Fi模组),虽然多一颗芯片,但稳定性确实好。
- 低功耗:STM32L系列待机功耗可以做到微安级。如果你做电池供电的智能开关,STM32L0是首选。
注意:STM32本身不带Wi-Fi/蓝牙,必须外挂模组。这会增加PCB面积和成本,而且两个芯片之间的通信(UART/SPI)也可能成为瓶颈。我曾经在STM32+ESP8266的项目里,遇到UART波特率不匹配导致数据丢包,排查了两天才找到原因。
3.1.3 选型对比表
| 对比项 | ESP32 | STM32 |
|---|---|---|
| Wi-Fi/蓝牙 | 内置 | 需外挂 |
| OTA支持 | 原生支持 | 需自行实现 |
| 实时性 | 中等 | 优秀 |
| 功耗 | 较高 | 低(L系列) |
| 开发难度 | 低(ESP-IDF) | 中等(HAL库) |
| 成本 | 低(单芯片) | 中(需加模组) |
| 适用场景 | Wi-Fi直连照明 | 高精度/低功耗照明 |
我个人建议:如果是做消费级智能灯泡,直接上ESP32;如果是做工业级调光系统,或者对实时性有硬性要求,选STM32+外挂模组。
3.2 Wi-Fi/蓝牙模组选择
如果你选了STM32,或者需要更强的无线性能,就得单独选模组了。市面上模组很多,我挑几个常用的说说。
3.2.1 Wi-Fi模组:ESP8266系列
ESP8266是老将了,便宜、稳定、资料多。我最早做智能照明时就用它。
- ESP-01S:最便宜的方案,但只有2个GPIO,Flash只有1MB。做OTA升级?别想了,Flash不够。
- ESP-12F:4MB Flash,支持OTA。我建议至少用这个级别。注意,ESP8266是单核,跑OTA时应用会卡顿。
- ESP-07S:带陶瓷天线和IPEX接口,信号比PCB天线好。如果灯具是金属外壳,建议用这种外接天线版本。
小技巧:ESP8266的AT固件虽然方便,但做OTA升级时,建议用SDK自己写固件。AT固件的OTA流程不灵活,而且容易出问题。我吃过这个亏,后来全改成SDK开发了。
3.2.2 蓝牙模组:Nordic nRF52系列
如果产品只需要蓝牙控制(比如手机App调光),不需要Wi-Fi远程,nRF52系列是首选。
- nRF52832:经典款,功耗极低,支持蓝牙5.0。做电池供电的智能开关很合适。
- nRF52840:性能更强,支持蓝牙Mesh。如果你做全屋照明组网,这个很合适。
不过要注意,蓝牙模组做OTA升级比较麻烦。蓝牙传输速度慢(通常几十KB/s),一个几百KB的固件要传好几分钟。我建议用DFU(Device Firmware Update)方式,分块传输,断点续传。
3.2.3 组合模组:ESP32-C3 / RTL8720
现在有些模组把Wi-Fi和蓝牙做到一颗芯片里,比如ESP32-C3(RISC-V架构,便宜)和RTL8720(双频Wi-Fi+蓝牙5.0)。
我个人觉得,如果不想用ESP32-S3,ESP32-C3是个不错的替代。它比ESP8266强,价格差不多,而且支持蓝牙。不过要注意,C3是单核,跑复杂应用时可能吃力。
3.3 传感器与驱动电路设计
智能照明不只是「亮」和「灭」。你得感知环境,还得控制光源。这部分我踩过不少坑,咱们一个一个说。
3.3.1 环境光传感器
自动调光需要环境光传感器。常用的有:
- 光敏电阻(LDR):便宜,但线性度差,温度漂移大。我建议只用在低成本方案里。
- BH1750:数字输出,I2C接口,精度高。我几乎所有项目都用它。注意,它的测量范围是1~65535 lux,室内照明完全够用。
- TSL2591:比BH1750更灵敏,可以测到0.0001 lux。做夜间小夜灯很合适。
电路设计要点:BH1750的I2C上拉电阻要选对。我一般用4.7kΩ,如果线长超过10cm,换成2.2kΩ。另外,传感器要避开LED光源直射,否则读数会偏高。我有个项目把传感器放在灯罩旁边,结果白天读数一直是65535,排查了半天才发现是灯珠漏光。
3.3.2 人体红外传感器(PIR)
人来灯亮,人走灯灭,靠的就是PIR传感器。
- HC-SR501:经典款,便宜,但误报率高。我建议加一个菲涅尔透镜,提高探测角度。
- AM312:体积小,功耗低,适合做嵌入式。注意它的输出是3.3V电平,可以直接接MCU。
PIR传感器有个通病:热源干扰。空调、暖气片都可能触发误报。我建议在软件里加一个「去抖」逻辑——连续检测到3次高电平才认为有人,连续5秒低电平才认为没人。
3.3.3 LED驱动电路
这是核心中的核心。LED驱动电路决定了调光效果和寿命。
方案一:线性恒流驱动
用三极管或MOS管做线性恒流。优点是电路简单、无EMI问题。缺点是效率低,发热大。适合小功率(<5W)的夜灯。
// 线性恒流驱动示例(PWM调光)
// 使用N沟道MOS管(如AO3400)
// PWM频率建议1kHz以上,避免人眼可见闪烁
void led_set_brightness(uint8_t duty) {
// duty: 0~255
TIM2->CCR1 = duty; // 设置PWM占空比
}
方案二:Buck降压驱动
用专用LED驱动芯片(如PT4115、MP2482)。效率高(>90%),适合大功率(>10W)的筒灯、射灯。注意,Buck电路有EMI问题,PCB布局要小心。
避坑指南:我曾经在Buck电路里把电感选小了,结果输出纹波很大,LED灯珠肉眼可见的闪烁。后来换成饱和电流更大的电感才解决。记住,电感的饱和电流至少要是峰值电流的1.5倍。
方案三:PWM调光注意事项
调光频率不能太低,否则人眼会看到闪烁。我建议:
- 白炽灯/卤素灯:200Hz以上
- LED灯:1kHz以上(最好2kHz)
- 如果做摄影灯,需要10kHz以上,避免拍摄时出现条纹
另外,PWM调光时,LED驱动芯片的EN引脚要直接接MCU的GPIO,不要经过电平转换。我见过有人用光耦隔离,结果PWM频率高了之后波形失真,调光不平滑。
3.3.4 电源电路设计
智能照明通常用AC-DC电源(220V转低压)。我建议用隔离型电源,安全第一。
- 非隔离方案(如阻容降压):便宜,但整个电路板都带电,触摸有风险。只适合外壳全绝缘的产品。
- 隔离方案(如反激式):安全,但成本高。我建议用PI(Power Integrations)的芯片,比如LNK304,外围元件少,设计简单。
电源的纹波要控制在100mV以内,否则会影响Wi-Fi模组的射频性能。我有个项目,电源纹波200mV,结果ESP32的Wi-Fi连接距离直接减半。后来在输出端加了一个10μF+0.1μF的滤波电容,问题解决。
3.4 本章小结
硬件选型没有绝对的对错,关键看你的产品定位。我总结一下:
- 想做低成本、快速上市的Wi-Fi智能灯泡?选ESP32-S3,单芯片搞定。
- 想做高精度、工业级调光系统?选STM32G4 + ESP32-C3模组。
- 传感器选BH1750(环境光)+ AM312(人体红外),稳定可靠。
- LED驱动用Buck方案,PWM频率设2kHz以上。
- 电源一定要隔离,纹波要小。
下一章咱们聊软件架构,看看怎么把OTA升级的流程跑起来。到时候我会分享一个我实际项目中用过的分区方案,保证你少走弯路。