4、命令集定义:设备信息查询、模式切换、力度调节、加热控制、定时设置
好,咱们接着聊。上一章我们把通信协议的基础框架搭好了,就像盖房子打好了地基。现在,该往里面填「砖块」了——也就是具体的命令集。
我个人习惯,在设计命令集之前,先想清楚一件事:用户到底要通过手机控制按摩仪的哪些行为?你想想看,无非就是查状态、换模式、调力度、开加热、定时间。嗯,就这五类核心操作。咱们一个一个来拆。
4.1 设备信息查询
这个命令,说白了就是手机端发一个「你是谁?你还好吗?」的请求。设备收到后,得把自己的家底报一遍。
查询指令格式:
手机 → 设备:AA 01 00 00 00 00 BB
设备 → 手机:AA 01 08 00 01 02 03 64 32 01 00 BB
我来解释一下返回的数据段(从第4字节开始):
| 字节偏移 | 含义 | 示例值 | 说明 |
|---|---|---|---|
| 0 | 设备类型 | 0x01 | 01=颈部按摩仪,02=腰部,03=眼部 |
| 1 | 硬件版本 | 0x02 | 主版本.次版本,这里是V2.0 |
| 2 | 软件版本 | 0x03 | V3.0 |
| 3 | 电池电量 | 0x64 | 0-100,这里100% |
| 4 | 当前模式 | 0x32 | 50=揉捏模式 |
| 5 | 当前力度 | 0x01 | 1档 |
| 6 | 加热状态 | 0x00 | 0=关闭,1=开启 |
4.2 模式切换
按摩模式,说白了就是电机转动的组合方式。常见的模式有:
- 0x01: 揉捏模式(两个电机交替正反转)
- 0x02: 敲击模式(快速脉冲)
- 0x03: 推拿模式(慢速揉捏+敲击组合)
- 0x04: 针灸模式(定点高频振动)
- 0x05: 自动模式(循环切换以上四种)
模式切换指令:
手机 → 设备:AA 02 01 03 00 00 BB
// 第3字节 0x03 表示切换到推拿模式
设备收到后,应该立即切换电机控制逻辑,并回复确认帧:
设备 → 手机:AA 02 01 03 00 00 BB
4.3 力度调节
力度控制,本质上是调节电机的PWM占空比。我建议分5档:
| 档位 | PWM占空比 | 适用场景 |
|---|---|---|
| 1 | 20% | 轻柔放松,适合敏感用户 |
| 2 | 40% | 日常舒缓 |
| 3 | 60% | 标准按摩力度 |
| 4 | 80% | 深层放松 |
| 5 | 100% | 强力模式,肌肉酸痛时用 |
力度调节指令:
手机 → 设备:AA 03 01 04 00 00 BB
// 第3字节 0x04 表示设置为4档
这里有个细节:力度调节不能跨模式生效。 比如你在揉捏模式下设置了4档,切换到敲击模式时,力度应该保持为4档,还是回到默认的3档?
我个人建议:力度值全局共享。 用户调了一次力度,所有模式都沿用这个力度。除非某个模式有特殊限制(比如针灸模式最高只能到3档,否则太疼了)。
4.4 加热控制
加热功能,说白了就是控制贴在按摩头后面的陶瓷发热片。温度控制一般分两档:
- 0x00: 关闭加热
- 0x01: 低温档(约38-40℃,温热感)
- 0x02: 高温档(约42-45℃,明显热感)
加热控制指令:
手机 → 设备:AA 04 01 01 00 00 BB
// 第3字节 0x01 表示开启低温加热
4.5 定时设置
定时功能,就是用户设定按摩时长,时间到了自动停止。常见的定时选项:
- 0x00: 无定时(一直运行,直到手动关闭)
- 0x01: 5分钟
- 0x02: 10分钟
- 0x03: 15分钟
- 0x04: 20分钟
- 0x05: 30分钟
定时设置指令:
手机 → 设备:AA 05 01 03 00 00 BB
// 第3字节 0x03 表示定时15分钟
设备收到后,启动一个倒计时。每过1分钟,设备可以主动上报一次剩余时间(可选功能)。这样App上可以显示「剩余14分钟」的倒计时效果。
4.6 命令集总览
好了,五个核心命令都定义完了。我习惯把它们整理成一个表格,方便查阅:
| 命令ID | 功能 | 数据段长度 | 数据段说明 |
|---|---|---|---|
| 0x01 | 设备信息查询 | 0 | 无数据,返回8字节状态 |
| 0x02 | 模式切换 | 1 | 模式编号(0x01-0x05) |
| 0x03 | 力度调节 | 1 | 力度档位(0x01-0x05) |
| 0x04 | 加热控制 | 1 | 加热档位(0x00-0x02) |
| 0x05 | 定时设置 | 1 | 定时选项(0x00-0x05) |
嗯,命令集定义到这里就差不多了。你可能会问:「就这五个命令够用吗?」其实核心操作就这些。其他像OTA升级、恢复出厂设置、错误码上报这些,属于扩展功能,咱们后面章节再聊。
下一章,我会带你看看这些命令在实际蓝牙通信中是怎么收发的——包括粘包处理、超时重传、以及我最头疼的「手机发指令设备没反应」的排查思路。到时候见。