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=开启
我的小经验: 查询指令的返回数据,我建议把「当前模式」「当前力度」「加热状态」都带上。为什么?因为用户打开App时,需要同步显示设备的真实状态。我在早期一个项目里只返回了电量,结果App显示的模式和实际设备不一致,用户投诉说「我明明调了模式,App怎么没变?」——其实就是没同步。

4.2 模式切换

按摩模式,说白了就是电机转动的组合方式。常见的模式有:

  • 0x01: 揉捏模式(两个电机交替正反转)
  • 0x02: 敲击模式(快速脉冲)
  • 0x03: 推拿模式(慢速揉捏+敲击组合)
  • 0x04: 针灸模式(定点高频振动)
  • 0x05: 自动模式(循环切换以上四种)

模式切换指令:

手机 → 设备:AA 02 01 03 00 00 BB
// 第3字节 0x03 表示切换到推拿模式

设备收到后,应该立即切换电机控制逻辑,并回复确认帧:

设备 → 手机:AA 02 01 03 00 00 BB
注意: 我曾经踩过一个坑——设备切换模式时,电机突然停转再启动,导致用户感觉「卡顿」了一下。后来我改成「先减速到零,再按新模式启动」,虽然切换时间多了200ms,但手感顺滑多了。嗯,用户体验往往就藏在这些细节里。

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 表示开启低温加热
安全第一: 加热控制必须做「超时自动关闭」保护。我见过一个产品,用户忘记关加热,按摩仪放在沙发上烧了个洞。所以我在协议里加了一条:设备端每30秒检测一次,如果加热开启超过15分钟没有收到任何指令,自动关闭加热并上报状态。

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分钟」的倒计时效果。

避坑指南: 我曾经遇到一个问题——用户设定了15分钟定时,但中途切换了模式,结果定时器被重置了。后来我规定:定时器独立于模式运行。 无论你怎么切换模式、调力度、开关加热,定时器都不受影响。只有收到新的定时指令或关机指令,定时器才会重置。

4.6 命令集总览

好了,五个核心命令都定义完了。我习惯把它们整理成一个表格,方便查阅:

命令ID 功能 数据段长度 数据段说明
0x01 设备信息查询 0 无数据,返回8字节状态
0x02 模式切换 1 模式编号(0x01-0x05)
0x03 力度调节 1 力度档位(0x01-0x05)
0x04 加热控制 1 加热档位(0x00-0x02)
0x05 定时设置 1 定时选项(0x00-0x05)

嗯,命令集定义到这里就差不多了。你可能会问:「就这五个命令够用吗?」其实核心操作就这些。其他像OTA升级、恢复出厂设置、错误码上报这些,属于扩展功能,咱们后面章节再聊。

下一章,我会带你看看这些命令在实际蓝牙通信中是怎么收发的——包括粘包处理、超时重传、以及我最头疼的「手机发指令设备没反应」的排查思路。到时候见。