"用ESP32做售货机主控?开什么玩笑,那玩意儿跑不了Linux。"

这是我刚开始做这个项目时,团队里嵌入式工程师的原话。但最终我们用ESP32做了5000台,跑得挺稳。

一、为什么要用ESP32?——三个硬理由

当时选型有四个选项:STM32、树莓派、ESP32、RK系列。

STM32太底层,开发周期长,而且联网方案要外挂。树莓派太贵,工业级版本一块板子好几百,量产成本扛不住。RK系列性能强,但对这个不需要AI识别的弹簧机项目来说,算力严重过剩。

ESP32的优势:自带WiFi+蓝牙,不需要外挂网络模块。开发环境成熟,Arduino和ESP-IDF都行,招人容易。价格便宜,工业级模组批量采购不到30块。

但ESP32有个致命短板:算力有限,跑不了Linux。对于不需要AI识别、不需要触摸屏大界面、只需要控制货道电机和上报数据的弹簧机来说,刚好够用。

二、硬件设计:ESP32能接多少货道?

弹簧机最核心的需求:控制几十路货道电机,每路独立驱动。

ESP32的GPIO数量有限,直接驱动那么多电机不现实。我们的方案是ESP32 + 74HC595移位寄存器扩展GPIO,再加ULN2003驱动电机。

最后实现的硬件架构:

  • ESP32-WROOM-32E模组做主控

  • 4片74HC595扩展32路GPIO输出

  • 4片ULN2003驱动32路电机

  • 外接4G模块通过UART通信(发短信和走TCP)

  • 外接扫码模块通过UART通信

这套方案单板BOM成本不到80块,比树莓派方案便宜了三分之二。

坑点提醒:ESP32的GPIO驱动能力很弱,直接推ULN2003可能会不稳定。需要在中间加一级三极管放大,或者用光耦隔离。否则电机启动瞬间的电流冲击会把ESP32的GPIO烧掉。

三、固件开发:ESP-IDF vs Arduino,怎么选?

我们最开始用Arduino开发,快,确实快——三天就把基本逻辑跑通了。但进入量产测试阶段发现,Arduino的稳定性在工业场景下不够看。

串口接收数据的时候偶尔丢包,WiFi重连有时候卡死,看门狗触发后系统起不来。换了ESP-IDF之后这些问题全解决了。

ESP-IDF的优势:更底层,资源控制更精确;RTOS支持,多任务调度更稳定;官方维护,bug修复及时;OTA升级更可靠。

建议:原型验证阶段用Arduino快速跑通逻辑,进入量产开发后切到ESP-IDF。Arduino到ESP-IDF的迁移成本其实不高,核心逻辑是C/C++,移植工作量大概一到两周。

四、WiFi/蓝牙断线重连:ESP32最头疼的问题

ESP32的WiFi稳定性和4G模块一样,信号不好时也会掉线。但ESP32没有4G模块的"飞行模式"功能,重连机制得自己写。

我们的重连策略:

WiFi断线检测:每30秒ping一次网关。三次失败判定断线,触发重连。

重连流程:先尝试重新连接当前SSID。失败后扫描周边AP,尝试连接信号最强的已知网络。全部失败后,进入深度睡眠5分钟再尝试。

蓝牙同样处理:蓝牙连接主要用于本地调试和手机配网。如果蓝牙断线,设备每10秒广播一次,等待手机重新连接。

实测数据:WiFi重连成功率在信号一般的环境下约95%,信号较差的环境下约87%。剩下的13%需要人工干预——这就是为什么弹簧机也保留了4G模块作为备用通道。

五、OTA升级:远程更新固件的正确姿势

设备铺出去之后,OTA是刚需。不能每次更新固件都派人去现场烧录。

ESP32的OTA机制很成熟,ESP-IDF有现成的例程。但有几个坑:

坑1:分区表要预留足够的OTA空间。默认分区表只分了1.2MB给OTA,如果你的固件超过这个大小,升级就会失败。需要在分区表里把OTA分区改到2MB以上。

坑2:升级过程中断导致变砖。如果设备在OTA过程中断电,可能整个系统都起不来。解决方案是做双备份——OTA分区和工厂分区各存一份,新固件跑不起来自动回滚到旧固件。

坑3:升级时机选择。售货机正在交易的时候不能升级,升级过程可能需要十几秒,会中断交易。我们在后台设置了"闲时升级"策略——只在设备连续30分钟没有交易时才触发升级。

六、功耗管理:电池供电场景怎么办?

部分售货机场景(户外临时点位)没有市电,需要电池供电。

ESP32的功耗不算低——正常工作模式约150-200mA,WiFi传输时更高。对于电池供电场景,需要精细的功耗管理:

  • 空闲时进入轻度睡眠,保留WiFi连接,功耗降到30mA

  • 长时间无交易进入深度睡眠,功耗降到0.1mA量级

  • 用外部中断唤醒(开门传感器触发)

  • 定时唤醒上报心跳(每30分钟一次)

这套策略下,一组10000mAh的电池可以支撑约3-5天。对于大部分售货机场景来说够用了。

七、总结

ESP32做自动售货机主控,适合以下场景:不需要AI视觉识别、交互简单(扫码支付+电机出货)、不需要大触摸屏、对成本极度敏感。

不适合以下场景:需要AI视觉识别、需要运行Android应用、需要大屏交互、算力需求高。

我们用ESP32-WROOM-32E做了三个批次共5000台弹簧机,分布在200多个城市。故障率控制在2.3%以内,其中硬件故障占1.1%(主要是电源模块),固件问题占1.2%(OTA升级异常导致)。对于量产设备来说,这个数据在可接受范围内。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐