基于边缘计算与多模态感知的服药依从性系统|X604261
STM32F103C8T6 + HX711 + HC-SR501 + ASRPRO + ESP8266 | 硬件原理图 · 实物搭建 · App 界面 · MQTT 数据链路全解析
服药依从性(Medication Adherence)是决定慢性病长期治疗效果的关键变量。本系统以 STM32F103C8T6 为边缘计算节点,融合「称重式药量感知」与「红外人体感知」两类异构模态,在本地完成服药行为的采集、判别与语音干预,再由 ESP8266 经 MQTT 协议将结构化结果同步至移动端,从而构建「计划下发---到点提醒---行为判别---记录回传」的完整闭环。
一、项目基本情况
临床实践表明,慢性病患者的实际服药行为与医嘱之间存在显著偏差,漏服、错服与重复服用往往难以及时发现。传统的服药提醒手段(定时闹钟、药盒标记)只能完成「提醒」这一单向动作,无法回答「患者究竟有没有把药取走」这一核心问题,更无法形成可追溯的服药记录。本项目正是围绕这一空白展开设计。
1.1 设计目标与技术路线
系统面向家庭与社区养老场景,设计目标可归纳为三点:其一,以物理量替代主观确认 ------用称重传感器测量药品剩余重量的变化,将「是否服药」转化为可量化的重量差分判据,避免依赖用户手动点击确认;其二,以多模态融合提高判别可靠性 ------将人体红外感知与重量感知组合使用,只有「检测到人员靠近」且「检测到重量下降」两个条件先后成立,才判定为一次有效服药;其三,以边缘计算换取实时性------行为判别在 STM32 本地完成,语音提醒无需等待云端往返,即使网络中断也不影响提醒与判别功能。
技术路线上,系统采用「下位机 + 无线网关 + 服务端 + 移动端」的分布式结构。下位机由 STM32F103C8T6 与 HX711、HC-SR501、ASRPRO 语音模块、按键、LED 组成,通过扩展板与杜邦线连接,使用 Keil 5 开发;无线网关由 ESP8266(ESP-01S)承担,以 MQTT 协议接入消息中间件;服务端基于 JeeSite 平台与 Java SpringBoot 构建,使用 MySQL 持久化业务数据;移动端 App 通过 WebView 控件加载 H5 页面(由 HBuilder 编译生成),实现跨平台复用。
1.2 系统总体架构
系统在纵向上划分为四个层次,自下而上依次为感知执行层、边缘计算层、网络传输层与应用层。感知执行层负责物理世界的信号采集与动作输出;边缘计算层由 STM32F103C8T6 承担,完成时序调度、重量差分判别与依从性状态机运转;网络传输层由 ESP8266 与 MQTT 中间件构成,提供双向异步通信;应用层则由服务端与 App 共同承载服药计划的配置与服药记录的呈现。

▲ 图 1 系统总体架构:感知执行、边缘计算、网络传输与应用四层结构
1.3 系统功能构成
从功能视角看,系统可切分为硬件系统、软件系统与交付服务三个维度。硬件系统围绕「采集---判断---提示」展开,软件系统覆盖用户登录、终端管理、服药计划管理、服药记录查询与个人中心五类功能,交付内容则包含实物、源码、原理图与演示视频。

▲ 图 2 系统功能结构:硬件系统、软件系统与交付服务三个维度
1.4 硬件构成与器件选型
系统的硬件选型遵循「低功耗、低成本、接口简单」的原则。主控选用 STM32F103C8T6,其 Cortex-M3 内核运行于 72 MHz,具备充足的 GPIO 与多路串口资源,可同时挂载称重模块、语音模块与无线模块;药量感知选用 HX711 专用 24 位模数转换芯片配合应变式称重传感器,其分辨率足以识别单粒药片取放所引起的重量变化;人体感知选用 HC-SR501 被动红外模块,输出为数字电平,接口开销极小。各器件的具体接口对应关系如下表所示。
| 器件 | 型号 / 规格 | 接口方式 | 功能定位 |
|---|---|---|---|
| 主控 MCU | STM32F103C8T6(Cortex-M3,72 MHz) | --- | 系统控制核心,Keil 5 开发 |
| 称重采集 | HX711 + 应变式称重传感器 | 串口(SCK→PB10,DT→PB11) | 药量变化检测与服药判定 |
| 人体感知 | HC-SR501 被动红外模块 | GPIO(OUT→PA3) | 人员靠近检测,触发语音提醒 |
| 语音交互 | ASRPRO-2M 语音模块 | 串口(TX→PB5,RX→PB6,9600 bps) | 服药提醒播报与操作确认 |
| 交互按键 | 轻触按键 SW2 | GPIO(PC14,10 kΩ 上拉) | 称重数据清零与初始重量校准 |
| 状态指示 | 3 mm 红色 LED | GPIO(PB1) | 监测状态提示 |
| 无线通信 | ESP8266(ESP-01S) | 串口(TX→PA9,RX→PA10) | MQTT 数据上行与指令下行 |
| 供电模块 | YL-00604 电源模块 | USB 5 V 输入 | 输出 3.3 V / 5 V 双路供电 |
值得说明的是,HX711 承担的并非简单的「称重」功能,而是把连续变化的模拟重量信号转换为离散的服药事件。系统在初始化阶段由用户按下清零键记录药品初始重量,此后每次取药都会在该基准上产生一次可观测的负向跳变,这正是依从性判定的物理依据。
二、系统架构设计
2.1 硬件系统结构与引脚分配
硬件以 STM32F103C8T6 核心板为中枢,左侧为输入通道,右侧为输出通道,下方为供电单元。输入侧包含 HX711 称重模块、HC-SR501 人体红外模块与清零按键;输出侧包含 LED 状态指示灯、ASRPRO 语音模块与 ESP8266 无线模块。三路串口分别承担称重数据读取、语音指令下发与 MQTT 数据透传,彼此在物理层与逻辑层上相互独立,避免了功能耦合导致的相互阻塞。

▲ 图 3 硬件系统原理框图:主控、输入通道、输出通道与供电单元
2.2 硬件原理图
原理图使用嘉立创 EDA 绘制,按功能划分为 ESP8266 通信单元、人体红外单元、HX711 称重单元、按键单元、LED 指示单元、语音模块单元与 STM32F103C8T6 核心板单元六个功能区块。所有外设均就近去耦,按键通道配置 10 kΩ 上拉电阻以保证电平稳定,LED 支路串入限流电阻以保护 IO 口。原理图同时提供 schdoc、json、pdf 与图片等多种格式,便于直接投板打样或二次修改。

▲ 图 4 硬件原理图(嘉立创 EDA 绘制,含 STM32F103C8T6、HX711、HC-SR501、语音模块、按键、LED、ESP8266)
2.3 硬件实物
实物按原理图在扩展板上搭建完成,采用杜邦线连接各功能模块,便于演示与调试。称重传感器与 HX711 模块共同构成独立的药盒托盘:传感器一端固定于透明托板,另一端悬空承载药品,取药动作引起的形变经 HX711 转换为数字序列送入主控。主控侧自上而下依次布置 STM32 核心板、HC-SR501 人体红外模块、清零按键、ASRPRO 语音模块与 ESP8266 无线模块,底部为电源单元。

▲ 图 5 硬件实物:主控板、传感器与语音/无线模块的整机布局

▲ 图 6 硬件实物俯视接线:称重托盘、HX711 模块与扩展板走线
2.4 语音交互设计
语音模块采用 ASRPRO-2M,通过串口 0 与主控通信,波特率 9600 bps(TX→PB5,RX→PB6),使用天问 Block 图形化平台完成语音逻辑配置。系统的语音策略为**「按药品种类分条播报 + 循环提醒」**:主控在到达预设服药时刻后向语音模块下发对应指令码,语音模块播报该药品的名称与剂量;若在设定时间内未检测到人员靠近,播报将循环执行,直至检测到来人或完成服药。各指令码的对应关系如下表。
| 指令码 | 播报内容 | 触发条件 |
|---|---|---|
| A01 | 服药时间已到,请服用奥美沙坦 2 片 | 到达奥美沙坦计划服药时刻 |
| A02 | 服药时间已到,请服用阿司匹林肠溶片 2 片 | 到达阿司匹林肠溶片计划服药时刻 |
| A03 | 服药时间已到,请服用碳酸钙 2 片 | 到达碳酸钙计划服药时刻 |
| A04 | 用户完成服药 | HX711 检测到重量下降并判定已服药 |
| A05 | 称已清零 | 按下清零按键,完成初始重量校准 |
从上表可以看出,语音模块不仅是输出终端,同时也是一个语义化的状态反馈通道。「用户完成服药」与「称已清零」两条提示把主控内部的状态迁移显式地表达给使用者,降低了系统的使用门槛。

▲ 图 7 ASRPRO 语音模块指令配置(天问 Block):上电初始状态与串口指令映射
2.5 软件架构与通信协议
服务端基于 JeeSite 平台构建,采用 Java SpringBoot 提供业务接口,MySQL 完成数据持久化,前端使用 Bootstrap 实现响应式布局。服务端内置 MQTT 客户端,通过订阅与硬件约定的主题实现数据交互;移动端 App 由 HBuilder 编译 H5 页面后,以 WebView 控件加载,使得同一套前端代码可同时运行于 Android 与 iOS 平台。
通信层采用 MQTT 协议,服务端可选用自建 EMQX 节点或公共节点(如 broker-cn.emqx.io),二者接口一致,便于在不同部署条件下切换。上下行主题以前缀 mybs 开头,并以客户端标识作为末级路径,从而实现多台设备的同时接入与相互隔离。
| 通信方向 | 主题 | 载荷内容 |
|---|---|---|
| 下行(上位机 → 硬件) | mybs/bsctr/{clientId} | 服药计划:药品名称、服药时间、剂量 |
| 上行(硬件 → 上位机) | mybs/bsdata/{clientId} | 服药结果:实际服用时间、服药状态 |
说明:{clientId} 由 ESP8266 芯片标识生成。本项目实测节点的标识为 2462AB65F2F2,因此实际订阅的主题分别为 mybs/bsctr/2462AB65F2F2 与 mybs/bsdata/2462AB65F2F2。调试阶段可借助 MQTT 客户端工具对通信过程进行实时监控。
2.6 边缘判别逻辑与数据交互时序
系统的核心判别逻辑运行于 STM32 一侧,可概括为一个四阶段的有限状态机:计划配置阶段 ,用户在 App 端录入服药计划,数据经服务端下发至主控,用户将药品放置于称重托盘并按下清零键,主控记录初始重量;提醒触发阶段 ,系统时间到达预设服药时刻后启动 HC-SR501,检测到人员靠近即通过语音模块播报提醒,未检测到人员则循环播报;状态判别阶段 ,人员取药后 HX711 采样值相对初始重量出现负向跳变,主控据此判定「用户已服药」,并将包含实际服用时间的结果上报;异常处理阶段,若到达服药时间后既未检测到人员靠近,也未检测到重量变化,系统判定「未按时服药」,将异常状态同步至 App 端并触发提醒。

▲ 图 8 系统数据交互时序:正常服药链路与异常(未按时服药)链路
三、系统界面展示
移动端采用九宫格主页导航结构,功能入口包括终端管理、服药计划管理、服药记录查询与个人中心四类。用户以手机号作为账号登录,登录成功后进入主页,可在同一界面内完成设备绑定、计划录入与历史记录检索等操作。

▲ 图 9 App 登录界面与首页九宫格功能导航
服药计划管理是系统的核心配置界面。每条计划以卡片形式呈现计划名称、药品名称、服用剂量、服药时间、提醒状态与服药状态六项信息,支持按药品名称或计划名称检索,并可通过卡片滑动调出「修改」与「删除」操作。新建计划时需填写基本信息的计划名称、药品名称、服用剂量与计划服药时间(每日),并可附加「事由」字段用于记录用药依据。

▲ 图 10 App 服药计划管理列表与服药计划明细编辑页
服药记录查询界面按时间倒序展示每一次服药行为,记录内容包含计划名称、药品名称、实际服用时间与服药状态四项。与计划界面不同,此处的时间为根据称重信息反推的实际服用时刻,而非计划时刻,因而能够客观反映患者是否存在延迟服药的情况。个人中心提供信息修改、密码修改与退出登录三项功能,并展示当前登录账号与用户名。

▲ 图 11 App 服药记录查询界面与个人中心
四、系统视频展示
为便于完整呈现系统的软硬件联动过程,项目配套录制了功能演示视频。视频以屏幕录制与实机拍摄交替切换的方式,依次演示 App 端服药计划的录入、主控端语音提醒的触发、取药动作引起的重量变化以及服药记录在 App 端的自动更新,并同步展示原理图与实物之间的对应关系。

▲ 图 12 功能演示视频封面
建议的观看顺序为:先观看无字幕的纯演示版本以建立整体印象,再观看带解说的版本理解各环节的技术细节,最后对照原理图与实物图复核硬件连接关系。视频文件与封面图随项目资料一并提供。
五、获取方法
源码与技术资料获取
- 在本文评论区留言,或通过 B站 站内私信说明需求;
- 说明需要的是「源码 + 原理图 + 硬件实物」的完整套装,还是其中的单项资料;
- 收到回复后按指引提供接收方式,资料将由专人整理打包后发送;
- 如需环境搭建协助或二次开发支持,可在联系时一并说明具体需求。
| 交付项 | 内容 |
|---|---|
| 硬件实物 | 按原理图搭建完成的整机一套(含称重托盘与各功能模块) |
| 程序源码 | STM32 下位机工程、服务端工程与 App 端工程 |
| 硬件原理图 | 嘉立创 EDA 工程文件及 PDF、图片导出 |
| 演示视频 | 功能演示视频(含封面图) |
| 文档资料 | 接线与使用说明、业务流程说明 |
源码获取与技术支持备查:微信 xswzls;微信公众号:小豆豆物联网。项目的资料整理、硬件调试与技术支持由「小豆豆物联网」提供。