一、自动售货机概述:项目背景、系统架构、硬件选型

各位同学,咱们今天正式开讲自动售货机项目。说实话,这个选题我琢磨了很久。为什么选它?因为自动售货机是一个典型的嵌入式系统,麻雀虽小五脏俱全。你想想看,它要处理支付、控制出货、管理库存、跟云端通信……几乎涵盖了嵌入式开发的全部核心技能。

我在2018年参与过一个校园自动售货机项目,当时踩了不少坑。今天我把这些经验揉碎了讲给你们听,希望能帮大家少走弯路。

1.1 项目背景:为什么是自动售货机?

自动售货机不是什么新鲜玩意儿。日本早在80年代就普及了。但最近几年,随着移动支付的爆发,它迎来了第二春。你想想,以前投币多麻烦,现在扫码就搞定。

从技术角度看,自动售货机有几个特点:

  • 实时性要求高:支付到出货,必须在几秒内完成
  • 可靠性要求高:7×24小时无人值守,出故障就是损失
  • 交互体验要求高:用户操作要流畅,界面要友好
  • 成本敏感:硬件成本直接决定利润空间

我个人习惯把这类项目叫做「边缘计算节点」。它不只是一个卖货的机器,更是一个数据采集终端。每卖出一瓶水,后台就知道哪个位置、什么时间、什么商品最受欢迎。这些数据比卖货本身更有价值。

核心观点:自动售货机是物联网+嵌入式+人机交互的完美结合体。学完这个项目,你基本能搞定80%的嵌入式产品开发。

1.2 系统架构:从硬件到云端的完整链路

咱们先画个整体架构图。嗯,虽然这里没有图,但我用文字描述清楚。

一个典型的自动售货机系统分为四层:

  1. 感知层:传感器、按键、扫码枪、摄像头
  2. 控制层:主控芯片(MCU/MPU)、电机驱动、支付模块
  3. 交互层:触摸屏、喇叭、指示灯
  4. 通信层:4G/WiFi模块、蓝牙、云端服务器

数据流向是这样的:用户扫码 → 支付模块确认 → 主控收到指令 → 驱动电机出货 → 屏幕显示结果 → 上报云端。

我曾经在一个项目里遇到过通信延迟问题。用户付了钱,等了5秒货还没出来,用户以为机器坏了,直接走了。后来发现是4G模块的AT指令处理太慢。这个坑后面会详细讲。

我的建议:设计架构时,一定要把「异常处理」考虑进去。比如支付成功但出货失败,系统该怎么回滚?这些在架构阶段就要想清楚。

1.3 硬件选型:主控、屏幕、支付模块

硬件选型是项目成败的关键。我见过太多人一上来就选最贵的芯片,结果成本压不住。也见过为了省钱选最便宜的,结果性能不够。

1.3.1 主控芯片选型

主控是自动售货机的大脑。选型时主要看这几个指标:

指标 要求 推荐方案
主频 ≥ 200MHz STM32F4系列 / ESP32
RAM ≥ 512KB 用于UI缓存和协议栈
Flash ≥ 4MB 存放UI资源和固件
外设接口 UART×3, SPI×2, I2C×1 连接支付、屏幕、传感器
成本 ≤ 30元 批量价

我个人习惯用STM32F429,原因很简单:它有硬件JPEG解码和LTDC控制器,驱动屏幕非常方便。如果你预算更紧,ESP32也是不错的选择,自带WiFi和蓝牙,省一个通信模块的钱。

注意:千万别用Arduino做产品!我见过有人用Arduino Mega做售货机,结果内存不够,跑着跑着就死机了。Arduino适合原型验证,不适合量产。

1.3.2 屏幕选型

屏幕是用户跟机器交互的窗口。选型时我建议关注这几点:

  • 尺寸:7寸是黄金尺寸,太小看不清,太大成本高
  • 分辨率:1024×600够用,别追求1080p,没必要
  • 接口:RGB接口或MCU接口,别选HDMI(成本高)
  • 触摸:电容屏优于电阻屏,响应快、寿命长
  • 亮度:≥ 300cd/m²,户外使用要≥ 500cd/m²

我推荐使用7寸IPS电容屏,RGB接口,分辨率1024×600。价格大概在80-120元之间。千万别买那种带HDMI接口的「显示器」,那是给树莓派用的,不适合嵌入式。

嗯,这里要特别提醒:屏幕的排线一定要选长一点的。我吃过这个亏,排线太短,装配的时候差点把屏幕扯坏。

1.3.3 支付模块选型

支付模块是自动售货机的核心。现在主流方案有三种:

方案 优点 缺点 适用场景
扫码支付(微信/支付宝) 用户习惯、无需硬件 依赖网络、需对接SDK 主流方案
刷卡支付(IC卡/NFC) 离线可用、速度快 需要发卡、维护成本高 校园/工厂
投币支付 无需网络、老少皆宜 硬币识别器贵、维护麻烦 老旧设备升级

我建议采用「扫码支付为主 + NFC刷卡为辅」的组合方案。扫码支付覆盖90%的用户,NFC用于校园卡、工卡等场景。

支付模块的通信接口通常是UART,协议是自定义的。每个厂商的协议都不一样,但核心流程差不多:

// 伪代码:支付流程
1. 用户选择商品 → 生成订单
2. 屏幕显示二维码(或启动NFC读卡)
3. 用户扫码/刷卡
4. 支付模块返回支付结果(成功/失败)
5. 成功 → 驱动电机出货
6. 失败 → 显示错误信息,提示重试

我曾经对接过一个杂牌支付模块,它的协议文档写得一塌糊涂。后来我直接抓串口数据,反推协议。嗯,这种野路子不建议你们学,但有时候确实管用。

避坑指南:支付模块一定要选有「掉电保护」功能的。万一机器突然断电,正在处理的交易不会丢。我曾经因为没注意这个参数,导致一批机器在断电后出现了「用户付了钱但没出货」的投诉。

1.4 本章小结

好了,第一章的内容就这些。咱们回顾一下重点:

  • 自动售货机是物联网+嵌入式+人机交互的典型应用
  • 系统架构分四层:感知、控制、交互、通信
  • 主控推荐STM32F429或ESP32,屏幕选7寸IPS电容屏,支付模块用扫码+NFC组合

下一章咱们开始动手搭建开发环境,把硬件跑起来。到时候我会手把手教大家怎么配置CubeMX、怎么初始化屏幕、怎么跟支付模块通信。

记住一句话:硬件选型决定了项目的下限,软件设计决定了项目的上限。选型这一步走稳了,后面就顺了。

有什么问题,咱们下节课见。