资讯动态

基于RFID的物流分拣系统 | STM32F103C8T6+MFRC522+MQTT | X505021

发布时间:2026/10/5 6:57:41 来源:尧图企业网站定制
项目编号X505021| 主控 STM32F103C8T6 | 读卡 MFRC52213.56 MHz | 测温 DS18B20单总线 | 通信 ESP8266 MQTT | 服务端 jeesite SpringBoot MySQL | 应用端 WebView 内嵌 H5摘要本文介绍一套面向物流分拣场景的 RFID 分拣终端。硬件侧以 STM32F103C8T6 为主控外接 MFRC522 射频读卡模块读取货物 RFID 标签 UIDDS18B20 数字温度传感器采集货物温度SG90 舵机按分拣结果摆动指示出口 A / B红绿指示灯与有源蜂鸣器构成状态提示DY-SV17F 语音模块在温度异常时播报固定语句ESP8266 模组经 USART1 接入以 MQTT 客户端的身份与上位机交换数据。服务端基于 jeesite 平台与 SpringBoot 框架构建以 MySQL 完成数据持久化并实现 MQTT 客户端与业务接口两侧的收发移动端通过 WebView 内嵌 H5 页面的方式实现把标签绑定、温度比对、分拣出口指示与异常隔离处置整合进同一套作业闭环。一、技术栈速览层次技术选型职责主控 MCUSTM32F103C8T6ARM Cortex-M372 MHz读卡时序、温度采集、阈值判定与外设驱动Keil 5 固件开发读卡MFRC52213.56 MHz四线制串行接口读货物 RFID 标签 UID作为全部业务的触发源与关联主键测温DS18B20单总线数字输出精度 ±0.5 ℃采集货物温度与仓储要求比对后决定放行或拦截指示SG90 舵机PWM 摆角 0~180°SIGNAL 接 PB5按分拣结果摆动指示出口 A / B状态LED 红 / 绿各一各串 220 Ω 限流绿接 PB11、红接 PB10合格亮绿、异常亮红报警有源蜂鸣器 DY-SV17F 语音模块蜂鸣器接 PB1语音模块串口侧接 PB12 / PB13播报异常语句通信ESP8266ESP-01SUSART1PA9 / PA10 与主控相连MQTT 发布与订阅消息中转EMQX 中国区公共节点EMQX Public Broker按主题转发上下行报文两端互不直连服务端jeesite Java SpringBoot MySQL业务接口、MQTT 客户端与数据持久化应用端WebView 内嵌 H5 BootstrapHBuilder 打包移动端入库、出库、隔离处置与记录查询二、系统架构设计系统自下而上划分为感知执行层、控制层、网络层、服务层与应用层层间以明确的接口解耦。这里的分层逻辑是判定放在主控内完成网络只承担搬运。图 1 系统总体架构图图 2 系统功能结构图从功能边界看设备侧只做「采集 判定 执行 报警」四件事业务规则与数据留痕全部集中在服务端。这样后续新增一个仓储位置、或调整冷藏与冷冻的判定区间时改动都落在服务端的参数表里不需要重新烧录固件。三、硬件系统设计图 3 硬件系统原理框图3.1 引脚分配各外设与主控的连接关系由硬件原理图确定嘉立创 EDA 绘制PDF 版带完整文字层除 ESP8266 使用 USART1 外其余外设均使用通用 IO连接对象信号引脚说明MFRC522 读卡SDA片选PA7四线制串行接口的第一根信号方向按原理图连线记录MFRC522 读卡SCK时钟PA6同上MFRC522 读卡MOSI / MISOPA5 / PA4同上四根信号线落在 PA4~PA7即 SPI1 引脚组MFRC522 读卡RST复位PA1复位由 GPIO 单独控制IRQ 引脚未连接可知采用轮询寻卡SG90 舵机SIGNAL信号PB5另两端接 5 V 与 GNDPB5 经重映射可作为 TIM3 通道 2 输出LED 红灯阳极驱动PB10回路为 PB10 → LED → R1220 Ω→ GNDLED 绿灯阳极驱动PB11回路为 PB11 → LED → R1220 Ω→ GND有源蜂鸣器信号端PB1另一端接地异常时就地给出声学提示语音模块 DY-SV17FTXD/IO0模块侧PB12模块串口发送端接主控 PB12语音模块 DY-SV17FRXTD/IO1模块侧PB13模块串口接收端接主控 PB13喇叭接 SPK / SPK−ESP8266 通信USART1TX / RXPA9 / PA10与模组 RX / TX 交叉连接作为二次开发时的速查可直接复制下面这段引脚映射# X505021 基于RFID的物流分拣系统 · 引脚映射取自嘉立创 EDA 原理图 MFRC522 SDA(NSS)PA7 SCKPA6 MOSIPA5 MISOPA4 RSTPA1 # 复位由 GPIO 控制 IRQ未连接 # 采用轮询寻卡不用中断 DS18B20 DATA接主控 GPIO # 单总线图纸未绘制该单元数据脚无从确认 SG90 舵机 SIGNALPB5 # 另两端 5V / GNDPB5 重映射后为 TIM3_CH2 LED 红灯 PB10 - LED - R1(220R) - GND LED 绿灯 PB11 - LED - R1(220R) - GND 蜂鸣器 SIGNALPB1 # 有源 DY-SV17F TXD/IO0PB12 RXTD/IO1PB13 # 走 GPIO 模拟串口 扬声器 SPK / SPK- # V55V V2.23.3V ESP8266 STM32_PA9(TX) - RX STM32_PA10(RX) - TX # 供电轨3.3V —— MFRC522 / DS18B20 / ESP8266 # 5V —— SG90 舵机 / DY-SV17F 功放3.2 原理图与实物图 4 硬件原理图图 5 硬件实物总览图 6 硬件实物装配采用扩展板加杜邦线而非定制 PCB。样机阶段这一取舍降低了迭代成本更换读卡模块或调整舵机安装位置时只需调整插接位置。一处素材情况需要如实说明需要如实说明一处素材情况本项目原理图的标题与《项目介绍》的器件清单都列出了 DS18B20但导出的原理图 PNG 与 PDF 只绘制了七个功能块 —— ESP8266、读卡器、SG90 舵机、红色指示灯、绿色指示灯、语音模块、蜂鸣器以及 STM32F103C8T6 最小系统板并未画出 DS18B20 单元。因此本文对该器件的描述取自《项目介绍》其数据脚在图纸上无从确认涉及引脚的位置只写「接主控 GPIO」不作具体推测。四、通信链路设计设备与上位端之间不建立直连全部经 MQTT 服务器中转设备侧订阅一个主题等待指令向另一个主题发布读卡结果与实测温度服务端以 MQTT 客户端身份做同样的两件事。双方互不知道对方地址只按主题收发。图 7 系统数据交互时序图链路协议 / 方式说明无线承载Wi-Fi 2.4 GHzSTA 模式演示环境由电脑或手机开热点接入默认热点名 8266wifi、密码 123456789应用层协议MQTT 发布 / 订阅设备与上位机之间不直连全部经 MQTT 服务器中转双方各自维护一条长连接MQTT 服务器broker-cn.emqx.io采用 EMQX 中国区提供的公共中转节点同一账号下由主题名区分不同设备数据上报主题mybs/bsdata/设备 MAC设备向该主题发布标签 UID 与实测温度本机实测后缀为 70039F865534指令下发主题mybs/bsctr/设备 MAC上位机向该主题发布读卡与测温指令设备订阅后执行调试观测MQTT 客户端工具可在电脑端订阅同一主题实时查看数据通信的完整过程4.1 主题命名与设备寻址主题名的末段是设备 MAC 地址。同一台服务器因此可以挂载多台同型号终端而互不串扰排查问题时只要知道设备 MAC就能单独订阅它的两个主题观察数据流。# X505021 终端侧 MQTT 参数 MQTT 服务器 : broker-cn.emqx.io 上行设备 - 上位机: mybs/bsdata/70039F865534 下行上位机 - 设备: mybs/bsctr/70039F865534 主题末段 : 设备 MAC 地址本机实测后缀 70039F865534 # 无线接入演示环境 热点名SSID : 8266wifi 热点密码 : 123456789 接入方式 : 由电脑或手机开启 2.4 GHz 热点模组以 STA 模式接入 # 调试观测 可在电脑端用 MQTT 客户端工具订阅上述两个主题实时查看数据通信过程。4.2 一次入库的完整往返以「一次入库」为例把移动端、服务端、MQTT 服务器、ESP8266 模组与主控五个节点之间的往返拆开可以得到十二步时序1 App 用户填写商品信息点击「绑定RFID标签」 2 App - 服务端 提交读卡请求订单编号 单据信息 3 服务端 - MQTT 向 mybs/bsctr/MAC 发布读卡指令 4 MQTT - ESP8266 按订阅关系推送下行报文 5 ESP8266 - STM32 经 USART1 透传主控解析指令 6 STM32 驱动 MFRC522 寻卡读出标签 UID 7 STM32 启动 DS18B20 转换读出货物实测温度 8 STM32 按仓储要求比对温度得出放行 / 拦截结论 9 STM32 - ESP8266 回传标签 UID、实测温度与判定结果 10 ESP8266 - MQTT 向 mybs/bsdata/MAC 发布上报报文 11 MQTT - 服务端 推送上行报文服务端解析并落库 12 STM32 驱动执行器本地闭环不经网络 放行绿灯亮 / 舵机摆向对应出口 拦截红灯亮 蜂鸣器鸣响 语音播报货物转入隔离区其中第 8 步与第 12 步值得单独说明判定与执行全部由主控按阈值自行完成与上行链路在时间上没有依赖关系即便此刻网络不通分拣动作照常执行。4.3 现有固件的三处接口特征把原理图导出的 PDF 文字层提取出来、按坐标还原成「引脚号—引脚名—网络标号」的对应关系可以确认三处与常规写法不同的地方# 特征一读卡走通用 IO 逐位驱动而非硬件 SPI 外设 MFRC522 的 MISO/MOSI/SCK/SDA 四线落在 PA4~PA7 —— 这正是 SPI1 引脚组 但原理图给出的信号顺序 MISO-PA4 MOSI-PA5 SCK-PA6 SDA-PA7 与硬件 SPI1 的标准功能分配 NSSPA4 SCKPA5 MISOPA6 MOSIPA7 并不相同再叠加「RST 单独占用 PA1、IRQ 悬空」两条 可以判断寻卡采用 GPIO 逐位模拟时序 轮询方式。 # 特征二语音模块走模拟串口硬件串口让给了指示灯 DY-SV17F 串口两侧接 PB12 / PB13而 PB12、PB13 在 STM32F103C8T6 上 并不是任何一路 USART 的收发脚 —— USART3 位于 PB10 / PB11 而这两个引脚恰好被红、绿两只指示灯占用。 # 语音播报用 GPIO 模拟串口片上第三路硬件串口留给了状态指示。 # 特征三舵机信号脚具备硬件 PWM 条件 SG90 的 SIGNAL 接 PB5PB5 经 AFIO 部分重映射后正是 TIM3_CH2 输出脚 可产生 50 Hz 舵机驱动波形与「PWM 信号控制舵机角度」的描述一致。五、业务数据模型以下字段均取自系统实际运行界面可作为二次开发时的建表参考。# 出入库记录实测 14 字段 订单编号 收件人 客户电话 客户地址 商品名称 规格 RFID 仓储位置 入库温度 仓储要求 商品状态 出库温度 入库时间 出库时间 -- 商品状态取值入库 / 出库 / 在库 / 入库隔离 / 已处置 -- 订单编号形如 D20250506010739是物流单在系统内的主键 # 在库商品实测 7 字段 订单编号 商品名称 规格 RFID 仓储位置 商品状态 入库时间 -- 与流水表共用同一份数据源查询时按商品状态筛选 # 隔离区商品在库商品基础上增加 4 个字段 隔离时温度 隔离时间 处置时间 处置方式 -- 列表角标已处置 / 待处置处置方式实测样例「按要求销毁」 # 参数参数管理页实测字段 大类 大类代码 参数值名称 参数值 # 分拣终端分拣终端页实测字段 编号 名称 状态 -- 实测ZDBH01 / 分拣终端 / 在线入库与出库界面的字段分为四组共用同一套结构区别只在末项是写入还是回读字段分组字段说明基本信息订单编号 / 收件人 / 客户电话 / 客户地址订单编号形如 D20250506010739是物流单在系统内的主键商品信息商品名称 / 商品规格 / RFID / 仓储位置RFID 字段即标签 UID读出后由系统回填仓储位置取自参数表分冷藏库与冷冻库储藏要求仓储要求最低温度/ 入库温度 / 出库温度三个温度字段共同决定判定结果入库温度高于仓储要求即判为不符流转记录商品状态 / 入库时间 / 出库时间商品状态取值为入库、出库、在库、入库隔离、已处置五类其中「仓储位置」不写死在代码里而是作为参数项存入数据库页面按「大类」分组展示大类大类代码参数值名称参数值仓储位置ccwz冷藏库 A冷藏库 A仓储位置ccwz冷藏库 B冷藏库 B仓储位置ccwz冷冻库 A冷冻库 A仓储位置ccwz隔离区 E隔离区 E仓储位置ccwz隔离区 F隔离区 F抽成字典表的好处是显而易见的 —— 新增一个温区时只需增加一行参数不必改动任何代码。值得注意的是隔离区与正常仓储位置共用同一张字典表说明隔离区在设计上就是一类特殊的仓储位置而不是另起一套表结构。环节操作方式说明入库录入商品信息 → 绑定 RFID 标签 → 温度比对后入库先填写订单编号、收件人、电话、地址与商品名称、规格、仓储位置、仓储要求再点「绑定RFID标签」读卡温度符合储藏要求即入库不符则声光语音报警出库选商品 → 刷卡读取 → 选择出口 → 确认出库点「读取」刷标签后界面自动带出货物信息与当前温度选择出口 A 或出口 B 后点「出库」舵机随之摆动指示方向隔离处置异常自动转入 → 登记处置方式 → 完成处置温度不符的货物自动进入隔离区页面上登记处置方式实测样例如「按要求销毁」或「退回厂家」三笔实测样本可以直接说明字段含义与判定口径D20250506010739 刘尚 鲜牛奶 箱 F1DAD405 冷藏库 B 入库 -20C 仓储要求 4C 状态 出库 出库 -20C D20250506005818 邹欣慧 雪糕 100 支 031A7394 冷冻库 A 入库 -18.94C 仓储要求 -18C 状态 入库 D20250506005526 邹欣慧 雪糕 100支/箱 F1DAD405 隔离区 E 隔离时温度 -17.5C 状态 已处置 处置方式 按要求销毁六、界面实测移动端界面按「业务办理为主、状态查看为辅」组织层级扁平一处首页宫格承载全部功能一次点击即进入具体业务页。首页功能入口数入口清单功能入口8 项分拣终端、参数管理、商品入库、商品出库、出入库记录查询、在库商品查询、隔离区商品处置、个人中心6.1 登录与首页图 8 登录页与首页功能入口系统以手机号码作为登录账号登录后进入八项功能的宫格首页从左到右、从上到下依次为分拣终端、参数管理、商品入库、商品出库、出入库记录查询、在库商品查询、隔离区商品处置与个人中心。实测截图中手机号与收件人电话字段已作遮蔽处理。6.2 商品入库与商品出库图 9 商品入库页图 10 商品出库页入库页把填单与读卡合成一个页面上半部分是必填信息下半部分是商品信息。任一必填项为空该项会立即标红提交时再汇总提示商品信息区的 RFID 字段由读卡动作回填无法手工输入。出库页的操作顺序与入库相反先点「读取」刷标签界面自动带出货物信息与当前温度再选择出口 A 或出口 B最后点「出库」完成写入舵机随之摆动指示方向。如果没刷标签就直接点出库系统会弹出「请先读取商品信息」阻止操作 —— 这一条校验把「先刷卡、后操作」的物理顺序固定了下来。界面校验提示是判定逻辑最直接的证据必填校验提示语只有「必填信息」四个字具体缺哪一项靠红框自行判断温度不符时弹出「冷冻温度不能低于0摄氏度」说明系统对入库温度设了上下界而不只是一条单向比较。界面上提示语末尾用的是半角感叹号为符合平台的中文标点规范本文正文中统一改写为全角文字内容未作任何改动。6.3 出入库记录与在库商品查询图 11 出入库记录查询页与在库商品查询页一条完整的在库记录实测为订单编号 D20250506002816 商品名称 鲜牛奶 规格 24 包装 RFID 3E11B005 仓储位置 冷藏库 B 商品状态 在库 入库时间 2025-05-06 00:29:376.4 隔离区商品处置图 12 隔离区商品处置页温度不符的货物不会停留在「入库失败」这一步而是自动转入隔离区并进入待处置清单页面上新增了隔离时温度、隔离时间、处置时间与处置方式四个字段列表项以「已处置」与「待处置」两枚角标区分状态。处置方式之所以要单独落库是因为它涉及货物去向的责任认定 —— 销毁与退回厂家的后续流程完全不同事后需要能查到是谁、在什么时间做的决定。6.5 参数管理与分拣终端图 13 参数管理页与分拣终端页分拣终端页实测注册内容为编号ZDBH01、名称分拣终端、状态在线。这个编号与 MQTT 主题中用于区分设备的标识相互独立前者是业务系统里的展示名后者是通信链路上的寻址依据。七、工程要点① 判定放在本地网络只做搬运。温度比对与执行器驱动由主控按阈值自行完成与上行链路无依赖。链路异常时分拣动作照常执行这也是把判定放在设备侧而非服务端的主要理由。② 两端互不知道对方地址。设备与上位端都只面对 MQTT 服务器按主题收发。设备换网络环境、服务端换部署位置都不影响对接。③ 主题末段用设备 MAC 寻址。同一台服务器可挂载多台同型号终端而互不串扰排障时只要知道设备 MAC就能单独订阅它的两个主题。④ 报警出口分三路。红灯、蜂鸣器、语音模块同时触发分工是「远看灯、近听响、需要时听清内容」——现场操作员可能离终端数米远指示灯负责第一时间的视觉提示语音负责说明具体是哪一类异常。⑤ 字典抽表。仓储位置存为参数项新增温区或调整取值只需改数据不必改代码、更不必重新烧录固件。隔离区复用同一张表避免了为异常流程另建一套结构。⑥ 供电轨要区分。SG90 舵机与语音模块功放取 5 VMFRC522、DS18B20 与 ESP8266 取 3.3 V同一块扩展板并存两条轨接线时需逐线核对。八、演示与获取图 14 演示视频封面完整的演示视频记录了整机接线与上电、刷卡时舵机与指示灯的响应、App 端从登录到完成一次入库、出库与隔离处置的全过程以及隔离区商品处置页新增待处置记录的落库结果。如需本项目的完整资料可在评论区留言或私信说明需要的项目编号X505021及用途学习 / 二次开发 / 课程设计以便提供对应的资料组织方式。交付内容形式硬件实物已装配并完成联调的整机扩展板 杜邦线程序源码STM32F103C8T6 固件工程与服务端 Web 工程硬件原理图嘉立创 EDA 源文件及导出的原理图与图像文件演示视频系统完整运行的演示录像技术支持远程协助环境搭建、程序调试与小规模修改答疑项目编号 X505021。本文所述系统的引脚分配、通信参数与业务字段均逐项取自硬件原理图与系统运行界面界面中的收件人姓名与电话为演示数据手机号与电话字段已作遮蔽处理相关技术问题可在评论区交流。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑