ESP32做自动售货机主控到底靠不靠谱?——从原型验证到5000台量产的实战复盘~YH
"用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升级异常导致)。对于量产设备来说,这个数据在可接受范围内。
更多推荐



所有评论(0)