蓝牙控制板底层通信协议V2版
<center>蓝牙底层通信协议</center>
注意事项:
1、不发和发0意义不同。
一、广播数据
LEN | TYPE | VALUE | 备注 |
---|---|---|---|
2 | 0x01 | 0x06 | 蓝牙特性 |
3 | 0x03 | 0xF0FF | 蓝牙主服务 |
9 | 0xFF | 0x0101XXXXXXXXXXXXXX | “0101”为厂商标识,“xx..xx”为MAC地址 |
10 | 0x08 | 0xXXXXXX… | 广播名称,10byte |
注:Mac地址为系统识别设备使用,iOS系统mac为加密地址所以不能直接用mac定位。
二、应用服务
服务ID:00000001-0000-1000-8000-00805F9B34FB
characteristicId-write:000284CF-F7E3-55B4-6C4C-9FD140100A16
characteristicId-notify:000384CF-F7E3-55B4-6C4C-9FD140100A16
三、设备控制过程
- 扫描通过“主服务”过滤扫描设备。
- 通过“广播”数据中的mac定位需要连接设备的地址(ios为加密地址,Android为设备mac地址)。
- 连接设备。(3s内认证设备自动断开)
- 发现应用服务。
- 开启characteristicId-notify特征监听。
- 接收到设备发送的通讯加密参数。
- 使用通讯加密参数向设备发送指令。
四、设备发送秘钥解析
当主机与设备连接成功后在开启监听characteristicId-notify的情况下会收到设备的认证参数
认证参数:0x31584d5f6c63685776363338314635434241
ASCII对照:31=字符1 58=字符X 依次类推可得结果:
1XM_lock_v6381F5CBA
1
为流程ID:连接成功
XM_lock_v6
为 10个字符长度的设备名称
381F5CBA
为 8个字符长度的随机串,每次连接和断开会重置
取 XM_lock_v6381F5CBA
保存,用于后期交互验证【以下均称为认证串】
五、流程2-指令发送
指令集:
指令ID | 响应数 | 功能 |
---|---|---|
20 | 2 | 读配置 |
21 | 2 | 开锁 |
24 | 1 | 改密码 |
25 | 1 | 改名字 |
26 | 1 | 查状态 |
27 | 1 | 写27 |
28 | 1 | 写28 |
29 | 1 | 读版本 |
2a | 1 | 带参数的开锁 |
2b | 1 | 带参数的关锁 |
默认密码“00000000”
读取锁的配置信息“20”:
第一次通知characteristicId-notify:3330xxxxxxxxxxxxxxxxxxxx
- 33 => 字符3
- 30 => 字符0
3330=>30 表示对20的回复 如果:xxxx….为0则密钥验证失败
第二次通知characteristicId-notify:3338xxxxxxxx
开指令21
第一次通知characteristicId-notify:转换为ASCII字符串310d120003000300
(收到开锁指令,直接发送)
- 31 对 21 指令的回复
- 0D12 16进制电压mv
- 0003 16进制开锁次数
- 0003 电池剩余电量百分比
- 0 接收指令时的状态 [0关/1开]
- 0x30+(钥匙开锁<<2 |锁舌触发<<1 | 锁被锁定)(图片此处未更新)
第二次通知characteristicId-notify:转换为ASCII字符串310d120003000310
(开锁成功后,由锁状态中断触发。未检测到开锁或无开锁传感器,本次不会发送)
内容同第一次。
第三次通知characteristicId-notify: (超时触发。) 内容同第一次。
对比收到的前两次回复的锁状态
- 0->1 表示打开成功
- 0->0 表示打开失败
- 1->1 表示打开成功
注意: 2a 定时器开,超时时间最大值为: 0x000fffff 单位: 秒
--20220411修改:
1、更新版本号0x4040。
2、返回锁状态最后一位增加入户门控锁状态监控,值=0x30+(钥匙开锁<<2 |锁舌触发<<1 | 锁被锁定)
3、开锁返回又固定2次,改为2~3次。正常3次,未成功开锁返回2次。
--20220412修改:
1、增加电机锁锁舌关闭等待时间配置,非0按设置等待,==0则不自动关闭锁舌。
2、增加电机锁AB相交换参数,用来解决电机接口不统一导致的正反转相反问题。
3、增加电池电量及百分比计算三个参数:最大压差、最低电压、分压比。
4、失能,电机锁最小运行时间、重试次数、是否重试功能。