下面为你提供一个 完整可交付给硬件团队使用的《蓝牙通信协议(正式版)》,包含指令格式、数据帧结构、校验方式、指令示例、错误码等。
协议采用 自定义二进制协议,简洁、稳定、易于小程序 BLE 写入。
蓝牙通信协议(正式版)
1. 通信基础说明
- 通信方式:Bluetooth Low Energy(BLE)
- 协议方式:自定义二进制指令
- 通讯模式:小程序作为 Central,药箱作为 Peripheral
- 蓝牙特征值(UUID) Write Characteristic: 0xFFF1 Notify Characteristic: 0xFFF2 (可根据硬件最终版本自定义)
2. 数据帧结构(统一格式)
每一条蓝牙指令以如下格式发送:
┌────────┬────────┬────────┬───────────────┬────────┐
│ Head │ CmdCode│ Length │ Payload │ CRC │
├────────┼────────┼────────┼───────────────┼────────┤
│ 0xAA │ 1 byte │ 1 byte │ 0~20 bytes │ 1 byte │
└────────┴────────┴────────┴───────────────┴────────┘
字段说明
| 字段 | 说明 |
|---|---|
| Head | 固定为 0xAA |
| CmdCode | 指令码(见下) |
| Length | Payload 数据长度 |
| Payload | 参数区,不定长 |
| CRC | 校验:Head 到 Payload 的所有字节相加取低 1 字节 |
3. 指令列表(核心)
以下为药箱智能售货常用指令,已按你项目需求定制。
3.1 读取设备信息(设备编号、电量)
下行(小程序 → 设备)
AA 01 00 AB
- CmdCode = 0x01
- 无参数(Length=0)
上行(设备 → 小程序)返回
AA 01 07 [DeviceID 4B] [Battery 1B] [BoxMask 1B] CRC
| 参数 | 说明 |
|---|---|
| DeviceID | 设备唯一编号(4 bytes) |
| Battery | 电量百分比 0–100 |
| BoxMask | 4bits 表示 4 个格口是否有货(1=有货,0=无货) |
示例:
AA 01 07 12 34 56 78 64 0F YY
3.2 获取格口库存状态
下行
AA 02 00 AC
上行
AA 02 01 [BoxMask] CRC
| BoxMask(二进制) | 说明 |
|---|---|
| bit0 = box1 | 是否有货 |
| bit1 = box2 | 是否有货 |
| bit2 = box3 | 是否有货 |
| bit3 = box4 | 是否有货 |
示例:0b0111 → 第 4 个格口没货
3.3 开启指定格口(开箱)
下行(小程序 → 设备)
AA 03 01 [BoxID] CRC
| BoxID | 取值 |
|---|---|
| 0x01 | 开 1 号格口 |
| 0x02 | 开 2 号格口 |
| 0x03 | 开 3 号格口 |
| 0x04 | 开 4 号格口 |
上行(设备返回)
AA 03 02 [BoxID] [Result] CRC
| Result | 说明 |
|---|---|
| 0x00 | 开箱失败 |
| 0x01 | 开箱成功 |
3.4 更新某格口库存状态(管理员补货)
用于管理员补货后同步状态。
下行
AA 04 02 [BoxID] [StockStatus] CRC
| StockStatus | 说明 |
|---|---|
| 0x00 | 无货 |
| 0x01 | 有货(补货完成) |
上行
AA 04 01 [Result] CRC
| Result | 说明 |
|---|---|
| 0x01 | 更新成功 |
| 0x00 | 更新失败 |
3.5 请求开箱动作结果查询(可选)
硬件执行时间较长情况下使用。
下行:
AA 05 00 AF
上行:
AA 05 01 [Result] CRC
3.6 设备异常回报(Notify 主动上报)
AA 0E 02 [ErrorCode] [Info] CRC
| ErrorCode | 含义 |
|---|---|
| 0x01 | 电量低 |
| 0x02 | 电机异常 |
| 0x03 | 传感器异常 |
| 0x04 | 蓝牙通信异常 |
| 0x05 | 存在卡箱情况 |
4. 错误码列表
| 错误码 | 说明 |
|---|---|
| 0x00 | 成功 |
| 0x01 | 指令格式错误 |
| 0x02 | CRC 校验失败 |
| 0x03 | 不支持的指令码 |
| 0x04 | 参数错误 |
| 0x05 | 蓝牙通信失败 |
| 0x06 | 电箱电量过低不允许开箱 |
| 0x07 | 设备繁忙 |
5. CRC 校验说明(单字节校验)
计算方式:
CRC = (Head + CmdCode + Length + Payload[所有字节]) & 0xFF
示例:
AA 03 01 04
Sum = AA + 03 + 01 + 04 = B2
CRC = B2
6. 蓝牙交互流程(小程序侧)
用户购买开箱流程
- 扫码进入小程序
- 蓝牙扫描 → 连接药箱 → 绑定特征值
- 读取库存 AA 02 00 AC
- 用户选择格口并付款
- 支付成功 → 小程序发送开箱指令 AA 03 01 xx CRC
- 设备返回开箱成功
- 后台订单标记完成
管理员补货流程
- 进入管理员模式
- 蓝牙连接设备
- 查询库存状态
- 选择格口 → 点击开箱补货
- 补货完成 → 发送更新库存指令 AA 04 02 xx xx CRC
- 服务器同步库存状态
7. 附录:蓝牙协议示例(完整交互)
用户购买 2 号格口流程
小程序 → 设备:
AA 03 01 02 B0
设备 → 小程序:
AA 03 02 02 01 B2
(表示 2 号格口开箱成功)

