PDF下载地址:八电极应用手册
文档版本 |
作者 |
发布日期 |
修改说明 |
3.1.15 |
梁永新 |
2020/3/25 |
1、增加8电极体脂秤协议 |
3.1.16 |
Lyx |
2020/3/27 |
1、修改八电极体脂秤里的重量协议 |
3.1.17 |
Lyx |
2020/5/18 |
1、增加婴儿体脂两用秤协议 |
3.1.18 |
Lyx |
2020/5/22 |
1、增加血糖仪协议 |
3.1.19 |
LYX |
2020/6/24 |
1、八电极体脂秤里的阻抗长度,从2个byte改为4个byte |
3.1.20 |
LYX |
2020/7/1 |
1、添加颈椎按摩仪协议 |
3.1.21 |
LYX |
2020/7/9 |
1、增加八电极体脂秤指令:MCU发送测试完成,APP需回复。 |
本文档适用于BM系列模块(BM02/08/09/16/20/21/22……)。
使用UART透传,MCU可以通过BM模块与APP进行相互数据透传。
请扫描此二维码下载AiLink APP。
如使用AILink时,需严格按照协议透传产品介绍里面的流程进行操作。
下文中表明的MCU为与BM模块连接交互的芯片,BLE则为BM模块.
2.1 BLE(Slave)与APP(Master)交互的每包数据默认最大为20byte,当MCU端一次性发送超过20byte时,BLE会将数据进行分包发送给APP,需50byte则分为20+20+10,分3次发送给APP。
2.2 BM模块上电需要时间进行配置,当配置完成,进入就绪时,BM模块会主动给MCU返回一个BM模块状态信息。详情请查看“设置、获取BM模块状态”。
Ø BM模块支持两种工作模式,断电模式和不断电休眠模式,用户可以根据自身需求合
理选择工作模式。
用户可以在设计PCB的时候,预留两种方式的电路。详情请查看硬件规格书规格书。
Ø 在此模式下,BM模块完全断电,需要供电才能正常工作,这种模式有利于省电。
Ø 在此模式下,MCU可以根据BM模块的连接状态选择合适的时间断电关机,例如,在非蓝牙连接状态时,MCU工作完10s后断电关机,在蓝牙连接状态时,工作完30s后断电关机。获取BM模块的连接状态,可以根据蓝牙状态脚(BT-CS)进行判断,也可以通过串口读取模块状态。这种做法有利于用户能够顺利传输数据到APP上,而不会出现反复关机断连问题。
工作流程:
1、BM模块上电。
2、BM模块上电就绪后,BM会给MCU返回BM模块状态。
3、MCU设置CID 。
4、MCU设置模块其他内容。
5、MCU发送数据。
6、MCU、BM断电关机。
Ø 此模式下,BM模块需要长供电,不会断电关机(串口已关闭,BM处于低功耗模式)。
Ø 工作流程:
1、BM模块上电。
2、BM模块上电就绪后,BM会给MCU返回BM模块状态。
3、MCU设置CID 。
4、MCU设置模块其他内容。
5、MCU发送数据。
6、MCU 发送睡眠指令(可以选择是否开启低频广播),使BM模块进入低功耗模式。
若开启了BM模块进入了低功耗模式并且开启了低频广播,当BM模块连上APP后,BM模块会发送模块状态信息到MCU,同时蓝牙状态脚会拉低,用以唤醒MCU(MCU可以用串口唤醒或者蓝牙状态脚唤醒)。
7、MCU主动唤醒BM模块。当BM模块处于休眠状态时,若MCU需要发送数据到BM模块,需要先发一条唤醒指令到BM模块。注:BM模块刚唤醒时,是无法正常接收数据的,所以BM收到第一组的唤醒指令时,BM是不会回复MCU状态的。MCU可以发两次唤醒指令。
Ø 工作流程参考如下:
注:xxxx为Mac地址后4个字符
BM模块有两个服务UUID,一个是模块固定的服务UUID,为FFE0,一个是用户可以自定义的服务UUID,默认为FEE0。
易联物联网的AiLink APP交互使用的服务UUID为 FFE0。
同时,两个UUID都可以作为普通的数据交互UUID。
4.3.1 服务UUID:
0000FFE0-0000-1000-8000-00805F9B34FB
4.3.2 特征值UUID1:
0000FFE1-0000-1000-8000-00805F9B34FB
属性:read,write,write no response
功能 :APP下发的数据会通过此UUID透传给MCU
4.3.3 特征值UUID2:
0000FFE2-0000-1000-8000-00805F9B34FB
属性:read,notify
功能: MCU发给BLE的数据由此UUID透传给APP
4.3.4 特征值UUID3:
0000FFE3-0000-1000-8000-00805F9B34FB
属性:read,write,write no response,notify
功能:APP与BLE进行设置类指令的UUID,有write和notify
说明:广播数据有两类,用户只能选择其中的一类进行设置。
第一类广播:AiLink设置(默认)。使用我司AILInk APP接入的设置,需根据我司要求的格式进行设置。
第二类广播:用户自定义设置。不使用我司AiLink APP接入的设置,用户可以根据自身需求进行设置。若不设置则默认为我司设置。
AiLink设置广播数据内容包含(详情设置请查看设置读取CID、PID、VID):
1、Company ID 。固定:496e(In,Inet缩写,此处预留后续申请SIG company号)
2、CID:产品类型(2bytes)(例如血压计为0x0001,额温枪为0x0002,祥查看协议透传产品介绍)
3、VID:厂商ID (2byte) (由我司分配)
4、PID:产品ID (2byte) (由厂商分配)
5、Mac地址(MAC是固定的,大小端序可设置,默认小端序)
例如广播出来的自定义数据为:
6e49000100010001126134231102
6e49:为In,0001是CID,表示产品类型,0001是VID,表示厂商ID,0001是PID,表示产品ID。
126134231102是Mac地址,因为是小端序,所以Mac地址是:02 :11 :23 :34 :61 :12
蓝牙工具显示如下图:
若使用此类广播自定义数据,则第一类的广播自定义数据不启动(CID、VID、PID等设置不启用)。详情设置请查看第二类广播自定义设置。
l 设置类指令(以下指令不透传)。
l 设置、读取 模块广播名称
l 设置、读取第二类自定义广播数据
l 设置、读取 广播间隔时间
l 设置、读取 连接间隔
l 设置、读取串口波特率
l 读取 MAC地址
l 读取 BM模块硬件软件版本号
l 设置、读取 MCU设备版本号
l 设置、读取 模块主从模式
l 设置、读取 模块无连接模式自动休眠时间。
l 设置 模块进入睡眠模式
l 设置 唤醒模块
l 设置、读取 当前系统时间。
l 设置、读取CID、VID 、PID
l 设置 模块重启
l 设置 模块恢复出厂设置。
l 设置、获取模块状态
l 设置 MCU的电池状态
l 设置 读取MCU所支持的单位
l 设置、取消使能绑定
l MCU端设置蓝牙锁的开锁类型
l MCU上传设备基本信息
l APP同步时间到MCU
l master模式下设置、获取扫描的白名单
l master模式下设置、获取扫描识别的蓝牙名称
l master模式下设置、获取扫描状态(待完成)
l master模式下BM返回扫描到的广播厂商自定义数据
设置类指令格式规范(不透传):
Byte |
Value |
Description |
0 |
0xA6 |
包头 |
1 |
|
Payload长度(最大16byte) |
2 ~n |
|
Payload |
n+1 |
SUM(1~n) |
(1~n)校验和 |
n+2 |
0x6A |
包尾(注:n+2不能超过20) |
包头和包尾是固定的,分别为0xA6,和0x6A。
检验和是指byte1 + byte2 + …+byte n 的和,取低位1 byte。
设置指令里,数据的Byte数不能超过20
设置蓝牙名称:
l 设置蓝牙名称可以设置为固定字符作为蓝牙名称,例如设置为swan,所有的模块都会显示为swan。同时也可以设置为固定蓝牙名称+“_”+ Mac 地址的方式,这样子有利于每个模块的名称都有差异。详细见如下指令说明:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
Len |
Payload长度(最大16byte) |
|
2 |
0x01 |
Type:设置蓝牙名称 |
Payload |
3 ~ n |
Name |
名称(需要对应ASCII表) |
|
n+1 |
Num |
MAC字符个数:名称后面跟随的MAC字符的个数 0:代表没有,则是固定蓝牙名称。 1:代表后面带有mac地址的1个字符,例如: Swan_x。 2:代表后面带有mac地址的2个字符,例如: Swan_xx。 默认 Num=4;Num最大为12 注:Name长度+“_”+Num 最大为15 |
|
n + 2 |
Sum |
(1~n)校验和 |
|
N+3 |
0x6A |
包尾 |
举例 : 蓝牙的MAC地址为 12 : 34 : 56 : 78 : 9A : BC。
Ø 如果设置蓝牙名称为swan, 且不带MAC地址时,那么发送A6 06 01 73 77 61 6E 00 C0 6A ,则蓝牙名称为swan
Ø 如果设置蓝牙名称为swan,且带MAC地址2个字符,那么发送A6 06 01 73 77 61 6E 02 C2 6A ,则蓝牙名称为swan_BC
Ø 如果设置蓝牙名称为swan,且带MAC地址4个字符,那么发送A6 06 01 73 77 61 6E 04 C4 6A ,则蓝牙名称为swan_9ABC
Ø 整个蓝牙名称长度最长为15个字符。
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x01 |
Type:回复设置蓝牙名称结果 |
Payload |
3 |
|
结果值: 0:成功(立即生效) 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
举例:设置成功
返回 A6 02 01 00 03 6A
设置失败
返回 A6 02 01 01 04 6A
获取蓝牙名称:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x01 |
Payload长度 |
|
2 |
0x02 |
Type:获取蓝牙名称 |
Payload |
3 |
0x03 |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
BM返回蓝牙名称:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
Len |
Payload长度(最大16 byte) |
|
2 |
0x02 |
Type:回复蓝牙名称 |
Payload |
3 ~ n |
Name |
蓝牙名称(最长15 byte) |
|
n + 1 |
Sum |
(1~n)校验和 |
|
n +2 |
0x6A |
包尾 |
Ø 举例:蓝牙名称为swan_BC
Ø 发送查询指令 :A6 01 02 03 6A
Ø BM返回名称: A6 08 02 73 77 61 6E 5F 42 43 A7 6A
Ø 当用户想使用自定义广播数据时,不接入我司AiLink APP时,可使用此设置,不设置则默认为我司设置(第一类广播设置)。
设置广播自定义数据:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
Len |
Payload长度(最大16byte) |
|
2 |
0x03 |
Type:设置为第二类广播自定义数据 |
Payload |
3 ~ n |
|
设置内容 最长为15byte |
|
n + 1 |
Sum |
(1~n)校验和 |
|
N+2 |
0x6A |
包尾 |
BM返回设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x03 |
Type:回复设置为第二类广播自定义数据结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
Ø 举例:
BM的Mac 地址为 11: 22 : 33 : 44 : 55 :66 .
用户若要想设置广播自定义数据为“0x01 0x02 0x03 0x04 0x05” + “MAC 地址”。
步骤:
1、用户先读取BM的MAC地址
发送读取MAC地址的指令,获取MAC地址 :11 :22 :33 : 44 :55 :66
2、MCU再发送设置广播自定义数据。
A6 0C 03 01 02 03 04 05 11 22 33 44 55 66 83 6A
获取第二类广播自定义数据:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x01 |
Payload长度 |
|
2 |
0x04 |
Type:获取第二类广播自定义数据 |
Payload |
3 |
0x05 |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
返回第二类广播自定义数据:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
Len |
Payload长度(最大16byte) |
|
2 |
0x04 |
Type:返回第二类广播自定义数据 |
Payload |
3 ~ n |
|
返回的内容 最长为15byte |
|
n + 1 |
Sum |
(1~n)校验和 |
|
N+2 |
0x6A |
包尾 |
设置广播间隔:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x03 |
Payload长度 |
|
2 |
0x05 |
Type:设置广播间隔(单位:ms 范围:20-2000 ;默认200) |
Payload |
3 |
|
广播间隔时间的高字节 |
|
4 |
|
广播间隔时间的低字节 |
|
5 |
Sum |
(1~4)校验和 |
|
6 |
0x6A |
包尾 |
Ø 举例:设置广播间隔为:1000ms
发送:A6 03 05 03 E8 F3 6A
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x05 |
Type:回复设置蓝牙广播间隔结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
获取广播间隔时间:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x01 |
Payload长度 |
|
2 |
0x06 |
Type:获取蓝牙广播间隔 |
Payload |
3 |
0x07 |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
BM返回广播间隔:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x03 |
Payload长度 |
|
2 |
0x06 |
Type:回复广播间隔时间(单位:ms) |
Payload |
3 |
|
广播间隔时间的高字节 |
|
4 |
|
广播间隔时间的低字节 |
|
5 |
Sum |
(1~4)校验和 |
|
6 |
0x6A |
包尾 |
Ø 举例:广播间隔为 1000ms
返回 A6 03 06 03 E8 F4 6A
设置连接间隔参数:
Byte |
Value |
Description |
||
0 |
0xA6 |
包头 |
||
1 |
|
Payload长度 |
||
2 |
0x07 |
Type:设置连接间隔参数(连接间隔时间,从设备延时,连接超时时间) |
Payload |
|
3 |
|
连接间隔时间的高字节 |
单位:ms;范围:20-2000;默认值40 |
|
4 |
|
连接间隔时间的低字节 |
||
5 |
|
从设备延时(Latency)(取值:0-4;默认值0) |
||
6 |
|
连接超时的高字节 |
单位:ms; 范围:1000~6000;默认值:6000 |
|
7 |
|
连接超时的低字节 |
||
8 |
Sum |
(1~7)校验和 |
||
9 |
0x6A |
包尾 |
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x07 |
Type:回复设置蓝牙连接间隔结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
获取连接间隔时间:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x01 |
Payload长度 |
|
2 |
0x08 |
Type:获取蓝牙连接间隔 |
Payload |
3 |
0x09 |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
BM返回连接间隔:
Byte |
Value |
Description |
||
0 |
0xA6 |
包头 |
||
1 |
|
Payload长度 |
||
2 |
0x08 |
Type:设置连接间隔参数(连接间隔时间,从设备延时,连接超时时间) |
Payload |
|
3 |
|
连接间隔时间的高字节 |
单位:ms;范围:20-2000;默认值40 |
|
4 |
|
连接间隔时间的低字节 |
||
5 |
|
从设备延时(Latency)(取值:0-4;默认值0) |
||
6 |
|
连接超时的高字节 |
单位:ms; 范围:1000~6000;默认值:6000 |
|
7 |
|
连接超时的低字节 |
||
8 |
Sum |
(1~7)校验和 |
||
9 |
0x6A |
包尾 |
设置蓝牙发射功率:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度(最大17byte) |
|
2 |
0x09 |
Type:设置蓝牙发射功率 |
Payload |
3 |
dbm |
发射功率值 0:-5dbm 1:-4dbm 2:-3dbm 3:-2dbm 4:-1dbm 5:-0dbm 6:1dbm 7:2dbm 8:3dbm 9:4dbm 10:5dbm |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x09 |
Type:回复设置蓝牙发射功率结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
获取蓝牙发射功率:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x01 |
Payload长度 |
|
2 |
0x0A |
Type:获取蓝牙发射功率 |
Payload |
3 |
0x0B |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
BM返回发射功率值:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x0A |
Type:回复蓝牙发射功率 |
Payload |
3 |
dbm |
发射功率值 0:-5dbm 1:-4dbm 2:-3dbm 3:-2dbm 4:-1dbm 5:-0dbm 6:1dbm 7:2dbm 8:3dbm 9:4dbm 10:5dbm |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
设置串口波特率:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x0B |
Type:设置串口波特率 |
Payload |
3 |
|
Value: 0:9600 (默认) 1:19200 2:38400 3:57600 4:115200 5:921600 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
Ø 举例:设置串口波特率:9600
发送: A6 02 0B 00 0D 6A
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x0B |
Type:回复设置串口波特率结果 |
Payload |
3 |
|
结果值: 0:成功。(以旧的波特率回复后再切换新的波特率) 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
获取串口波特率:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x01 |
Payload长度 |
|
2 |
0x0C |
Type:获取串口波特率 |
Payload |
3 |
0x0D |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
BM返回串口波特率值:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x0C |
Type:回复串口波特率设置值 |
Payload |
3 |
|
串口波特率设置值 0:9600 1:19200 2:38400 3:57600 4:115200 5:921600 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
Ø 举例:若串口波特率为 9200
返回: A6 02 0C 00 0E 6A
读取Mac地址值:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x01 |
Payload长度 |
|
2 |
0x0D |
Type:读取MAC地址值 |
Payload |
3 |
0x0E |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
BM返回MAC地址值:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x07 |
Payload长度 |
|
2 |
0x0D |
Type:回复MAc地址值 |
Payload |
3 ~ 8 |
|
Mac地址值(6byte、小端序) |
|
9 |
Sum |
(1~8)校验和 |
|
10 |
0x6A |
包尾 |
举例:MAC 地址为11 :22 :33 :44 :55 :66
返回:A6 07 0D 66 55 44 33 22 11 79 6A
读取BM模块软硬件版本号:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x01 |
Payload长度 |
|
2 |
0x0E |
Type:读取BM模块软硬件版本号 |
Payload |
3 |
0x0F |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
BM返回软硬件版本号:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x0E |
Type:回复BM模块软硬件版本号 |
Payload |
3 |
|
产品型号。byte3 、byte4 为ASCII字符,byte5为数字。 |
|
4 |
|
||
5 |
|
||
6 |
|
硬件版本号 H |
|
7 |
|
软件版本号S |
|
8 |
|
定制版本号 P |
|
9 |
|
年 实际年份=年+2000 例如:2019年 年=2019-2000=19 |
|
10 |
|
月 1~12 |
|
11 |
|
日 1~31 |
|
12 |
Sum |
校验和 |
|
13 |
0x6A |
包尾 |
Ø 举例:如软硬件版本号为 BM16H1S1.0P0_20190507
解析:BM16为产品型号,对应实际实际数据为0x42 0x4D 0x10
H1为硬件版本号 1,对应实际数据为 0x01
S1.0 为软件版本号 1.0 ,对应实际数据为:0x0A(带1位小数点)
P0 为定制版本号,对应实际数据为 0
年:2019-2000=19,对应实际数据 0x13
则返回: A6 0A 0E 42 4D 10 01 0A 00 13 05 07 E1 6A
MCU设置MCU软硬件版本号:
Ø 建议:客户更新MCU软硬件版本号给BM模块,以便于APP区分统计。
Ø 数据格式与BM的软硬件版本号格式保持一致。
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x0F |
Type:MCU设置MCU软硬件版本号 |
Payload |
3 |
|
MCU类型:由厂家自己定义,可以不定义 |
|
4 |
|
硬件版本号 |
|
5 |
|
软件版本号 |
|
6 |
|
年 实际年份=年+2000 例如:2019年 年=2019-2000=19 |
|
7 |
|
月 1~12 |
|
8 |
|
日 1~31 |
|
9 |
Sum |
校验和 |
|
10 |
0x6A |
包尾 |
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x0F |
Type:回复设置MCU软硬件版本号结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
获取MCU软硬件版本号:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x01 |
Payload长度 |
|
2 |
0x10 |
Type:获取MCU软硬件版本号 |
Payload |
3 |
0x11 |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
BM返回MCU软硬件版本号:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x10 |
Type:返回MCU软硬件版本号 |
Payload |
3 |
|
MCU类型:由厂家自己定义 |
|
4 |
|
硬件版本号 |
|
5 |
|
软件版本号 |
|
6 |
|
年 实际年份=年+2000 例如:2019年 年=2019-2000=19 |
|
7 |
|
月 1~12 |
|
8 |
|
日 1~31 |
|
9 |
Sum |
校验和 |
|
10 |
0x6A |
包尾 |
设置主从模式:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x15 |
Type:设置主从模式 |
Payload |
3 |
|
Value: 0:从机模式(默认) 1:主机模式 |
|
4 |
|
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x15 |
Type:回复设置主从模式结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
获取主从模式设置:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x01 |
Payload长度 |
|
2 |
0x16 |
Type:获取主从模式 |
Payload |
3 |
0x17 |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
BM返回主从模式设置:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x16 |
Type:回复主从模式 |
Payload |
3 |
|
设置值: 0:从机模式 1:主机模式 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
可以设置模块无数据自动进入休眠模式(低功耗模式,此时设备的Tx要保持为高),但是要注意的是,当模块进入(休眠模式时,MCU在发数据前,需要提前发一组数据数据过来唤醒模块,模块才能正常开始接受数据。详可查看工作模式说明)
设置自动睡眠时间:
Byte |
Value |
Description |
||
0 |
0xA6 |
包头 |
||
1 |
|
Payload长度 |
||
2 |
0x17 |
Type:设置无连接自动睡眠时间 |
Payload |
|
3 |
|
自动睡眠标志位: 0:不开启自动休眠 1:开启自动休眠,模块没有连接自动进入低功耗模式 |
||
4 |
|
自动睡眠时间的最高字节 |
单位 :s 范围: 5 ~ 0xffffffff/100 (建议设为:60s) |
|
5 |
|
自动睡眠时间的次高字节 |
||
6 |
|
自动睡眠时间的次低字节 |
||
7 |
|
自动睡眠时间的最低字节 |
||
8 |
|
睡眠后是否立刻断开连接,是否开启低频广播: 0:断开连接,停止广播。 1:保持连接,开启广播。 2:断开连接 ,开启广播 。 3:保持连接 ,停止广播 。 |
||
9 |
|
低频广播间隔时间的高字节 |
单位:ms ;范围:20~2000;(建议设为1000); |
|
10 |
|
低频广播间隔时间的低字节 |
||
11 |
Sum |
(1~10)校验和 |
||
12 |
0x6A |
包尾 |
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x17 |
Type:回复设置自动睡眠时间结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
获取自动睡眠时间:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x01 |
Payload长度 |
|
2 |
0x18 |
Type:获取自动睡眠时间值 |
Payload |
3 |
0x19 |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
BM返回自动睡眠时间值:
Byte |
Value |
Description |
||
0 |
0xA6 |
包头 |
||
1 |
Len |
Payload长度 |
||
2 |
0x18 |
Type:返回无连接时自动睡眠时间 |
Payload |
|
3 |
|
自动睡眠标志位: 0:不开启自动休眠 1:开启自动休眠,模块没有连接 |
||
4 |
|
自动睡眠时间的最高字节 |
单位:s |
|
5 |
|
自动睡眠时间的次高字节 |
||
6 |
|
自动睡眠时间的次低字节 |
||
7 |
|
自动睡眠时间的最低字节 |
||
8 |
|
睡眠后是否开启低频广播: 0:不开启 1:开启 |
||
9 |
|
低频广播间隔的高字节 |
单位 :ms ;范围 20~2000 |
|
10 |
|
低频广播间隔的低字节 |
||
11 |
Sum |
(1~9)校验和 |
||
12 |
0x6A |
包尾 |
Ø 当BM模块进入休眠后,支持串口唤醒(MCU可以发任意数据唤醒模块,或者发送唤醒指令),支持蓝牙连接唤醒(需要开启睡眠后带广播功能,详情看下面设置进入睡眠指令格式)。
设置睡眠唤醒:
Byte |
Value |
Description |
||
0 |
0xA6 |
包头 |
||
1 |
Len |
Payload长度 |
||
2 |
0x19 |
Type:设置进入睡眠 |
Payload |
|
3 |
|
Value: 0x01
|
||
4 |
|
睡眠后是否断开连接,是否开启低频广播: 0:断开连接,关闭广播。 1:保持连接,开启广播。 2:断开连接 ,开启广播 。 3:保持连接 ,关闭广播 。 |
||
5 |
|
低频广播间隔时间的高字节 |
单位 :ms ;范围 20~2000(建议1000ms) |
|
6 |
|
低频广播间隔时间的低字节 |
||
7 |
Sum |
(1~6)校验和 |
||
8 |
0x6A |
包尾 |
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
Len |
Payload长度 |
|
2 |
0x19 |
Type:回复设置进入睡眠的结果 |
Payload |
3 |
|
结果值: 0:成功(成功后100ms后进入睡眠) 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
Ø MCU和APP都可以设置BM模块进入睡眠,BM模块在回复MCU/APP时,同时向APP/MCU发送BM当前状态“BM返回模块状态”。
设置模块唤醒:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x1A |
Type:设置模块唤醒 |
Payload |
3 |
0x01 |
Value: 1:唤醒模块 |
|
4 |
0x1D |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x1A |
Type:回复设置模块唤醒结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
该时间为蓝牙模块的系统时间。
设置系统当前时间:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x07 |
Payload长度 |
|
2 |
0x1B |
Type:设置系统当前时间 |
Payload |
3 |
|
0x00 :除能,关闭时间功能(默认) 0x01 :使能,开启时间功能 |
|
4 |
|
年:年份=年+2000 |
|
5 |
|
月(1~12) |
|
6 |
|
日(1~31) |
|
7 |
|
时(0~23) |
|
8 |
|
分(0~59) |
|
9 |
|
秒(0~59) |
|
10 |
Sum |
校验和 |
|
11 |
0x6A |
包尾 |
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x1B |
Type:回复设置系统时间结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
获取系统当前时间:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x01 |
Payload长度 |
|
2 |
0x1C |
Type:获取系统当前时间 |
Payload |
3 |
|
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
BM返回系统当前时间:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x08 |
Payload长度 |
|
2 |
0x1C |
Type:返回系统当前时间 |
Payload |
3 |
|
系统时间有效位 0:系统时间无效 1:系统时间有效 |
|
4 |
|
年:年份=年+2000 |
|
5 |
|
月(1~12) |
|
6 |
|
日(1~31) |
|
7 |
|
时(0~23) |
|
8 |
|
分(0~59) |
|
9 |
|
秒(0~59) |
|
10 |
Sum |
(1~9)校验和 |
|
11 |
包尾 |
0x6A |
Ø CID为产品类型ID,请按照协议透传产品类型设置(必须设。详情查看协议透传指令产品介绍)
Ø VID 为设备厂家ID,请联系我司分配(选设)
Ø PID 为产品型号ID,厂商自己分配,建议根据产品型号分配唯一值(选设)
Ø 以上三个值默认为0,不代表任何产品(调试阶段先设置CID)
设置ID:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x1D |
Type:设置ID |
Payload |
3 |
|
设置ID标志位 Bit0:0 :不设置 CID(CID值清0)。 1:设置CID Bit1:0 :不设置VID(VID值清0)。 1:设置 VID Bit2:0 :不设置 PID(PID值清0)。 1:设置PID |
|
4 |
|
CID:产品类型ID的高字节 |
|
5 |
|
CID:产品类型ID的低字节 |
|
6 |
|
VID:厂商ID的高字节 |
|
7 |
|
VID:厂商ID的低字节 |
|
8 |
|
PID:产品ID的高字节 |
|
9 |
|
PID:产品ID的低字节 |
|
10 |
Sum |
(1~9)校验和 |
|
11 |
0x6A |
包尾 |
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
Len |
Payload长度 |
|
2 |
0x1D |
Type:回复设置ID结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
获取ID:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x01 |
Payload长度 |
|
2 |
0x1E |
Type:获取ID设置值 |
Payload |
3 |
0x1F |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
BM返回ID值:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
Len |
Payload长度 |
|
2 |
0x1E |
Type:返回ID |
Payload |
3 |
|
设置ID标志位 Bit0 :0 :不设置 CID。 1:设置CID Bit1 :0 :不设置VID。 1:设置 VID Bit2: 0 :不设置 PID。 1:设置PID |
|
4 |
|
CID:产品类型ID的高字节 |
|
5 |
|
CID:产品类型ID的低字节 |
|
6 |
|
VID:厂商ID的高字节 |
|
7 |
|
VID:厂商ID的低字节 |
|
8 |
|
PID:产品ID的高字节 |
|
9 |
|
PID:产品ID的低字节 |
|
10 |
Sum |
(1~9)校验和 |
|
11 |
0x6A |
包尾 |
设置重启模块:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x21 |
Type:设置模块重启 |
Payload |
3 |
0x01 |
Value: 0x01 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
Len |
Payload长度 |
|
2 |
0x21 |
Type:回复设置模块重启结果 |
Payload |
3 |
|
结果值: 0:成功(成功后,100ms后模块重启) 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
设置恢复出厂设置:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x22 |
Type:设置恢复出厂设置 |
Payload |
3 |
0x01 |
Value: 0x01 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x22 |
Type:回复设置模块重启结果 |
Payload |
3 |
|
结果值: 0:成功(成功后,100ms后恢复出厂设置) 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
设置蓝牙连接状态
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x25 |
Type:设置蓝牙连接状态 |
Payload |
3 |
|
主动断开连接标志位 1:立刻断开连接 0:不断开连接 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x25 |
Type:回复设置蓝牙连接状态结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
获取模块状态
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x26 |
Type:获取状态 |
Payload |
3 |
Sum |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
BM返回模块状态:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x26 |
Type:返回模块状态 |
Payload |
3 |
|
连接状态: 0:无连接 1:已连接
|
|
4 |
|
工作状态: 0:唤醒 1:进入休眠 2:模块准备就绪 |
|
5 |
Sum |
(1~4)校验和 |
|
6 |
0x6A |
包尾 |
上报MCU电池状态
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x27 |
Type:设置MCU电池状态 |
Payload |
3 |
|
电池充电状态: 0:没有充电(默认) 1:充电中 2:充满电 3:充电异常 |
|
4 |
|
电池电量百分比 (0—100%) |
|
5 |
Sum |
(1~4)校验和 |
|
6 |
0x6A |
包尾 |
BM回复MCU上报结果
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x27 |
Type:回复MCU设置电池结果 |
Payload |
3 |
|
结果值: 0:成功(成功后会把电池电量上传到APP) 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
查询MCU电池状态
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x28 |
Type:获取MCU电池状态 |
Payload |
3 |
Sum |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
返回MCU电池状态
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x28 |
Type:返回MCU电池状态 |
Payload |
3 |
|
电池充电状态: 0:没有充电(默认) 1:充电中 2:充满电 3:充电异常 |
|
4 |
|
电池电量百分比 (0—100%) MCU没有数据上传时,默认为0xFFFF |
|
5 |
Sum |
(1~4)校验和 |
|
6 |
0x6A |
包尾 |
Ø APP端界面的单位显示是根据MCU端所拥有的单位来做处理的,所以当APP连接到MCU时,会发送读取指令来获取MCU端所拥有的单位,所以MCU端收到该指令时,则务必返回相应的单位数据(不返回则使用系统默认值)。
Ø MCU端需要开机后直接主动上传单位到APP。
APP查询MCU端单位指令:
(BM模块直接将此指令传给MCU)
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x2C |
Type:APP读取MCU端单位 |
Payload |
3 |
|
Value 0x01 |
|
4 |
|
校验和 |
|
5 |
0x6A |
包尾 |
MCU端返回所拥有的单位指令:
单位类型
类型编号 |
类型 |
支持类型(Bit15~Bit0) Bit=0 不支持 Bit=1 支持 |
01 |
重量 |
Bit0:kg Bit1:斤 Bit2:lb:oz Bit3:oz Bit4:st:lb Bit5:g Bit6:lb (纯lb显示) Bit7-bit15 保留 |
02 |
长度 |
Bit0:cm Bit1:inch Bit2:ft-in Bit3-bit15 保留 |
03 |
温度 |
Bit0 : C Bit1 : F Bit2-bit15 保留 |
04 |
血压 |
Bit0:mmhg Bit1:kPa Bit2-bit15 保留 |
05 |
轮胎胎压压力 |
Bit0:Kpa Bit1:Psi Bit2:Bar Bit3-bit15 保留 |
06 |
血糖仪 |
Bit0:mmol/L Bit1:mg/dL |
(BM模块通过A6指令协议传给APP)
数据格式*(每组数据长度不能多于20个byte)
Byte |
Value |
Description |
||
0 |
0xA6 |
包头 |
||
1 |
|
Payload长度 |
||
2 |
0x2C |
Type:MCU回复单位 |
Payload |
|
3 |
|
单位类型:例如:重量类型 =01,长度=02,温度=03 |
||
4 |
|
该单位支持类型高位: |
Bit15~Bit0 每一个Bit代表一个单位 Bit=0:不支持 Bit=1:支持 例如:重量支持kg和 oz 则byte4=0x00 ,byte5=0x09 |
|
5 |
|
该单位支持类型低位: |
||
6 |
|
单位类型: |
||
7 |
|
单位支持类型高位 |
Bit15~Bit0 每一个Bit代表一个单位 Bit=0:不支持 Bit=1:支持 |
|
8 |
|
单位支持类型低位 |
||
9 |
|
单位类型: |
||
10 |
|
单位支持类型高位 |
Bit15~Bit0 每一个Bit代表一个单位 Bit=0:不支持 Bit=1:支持 |
|
11 |
|
单位支持类型低位 |
||
12 |
|
校验和 |
||
13 |
0x6A |
包尾 |
Ø 举例:
APP读取MCU单位,发送指令:A6 02 2C 01 2F 6A
l 若MCU只拥有重量单位kg和斤,则返回:A6 04 2C 01 00 03 34 6A
l 若MCU只拥有重量单位kg和长度单位inch,则返回:A6 07 2C 01 00 01 02 00 02 39 6A
l 若MCU只拥有胎压单位Kpa、Psi、Bar和温度单位℃、℉和重量单位kg 和 长度单位cm,
则返回:A6 0D 2C 05 00 07 03 00 03 01 00 01 02 00 01 50 6A
n 若是MCU支持的类型太多,一组数据传不完,则可以分开多组来传,数据格式不变。
此条指令主要用以AILink APP连接协议透传产品,例如蓝牙锁,MCU开发端可以根据协议透传产品里的工作流程查看此指令的使用。(流程里无用到则说明该产品类型不需调到此指令)
MCU设置指令
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度(最大16byte) |
|
2 |
0x32 |
Type:MCU设置BM使能、取消绑定 |
Payload |
3 |
|
Value: 0:取消绑定 1:使能绑定 |
|
4 |
Sum |
(1~n)校验和 |
|
5 |
0x6A |
包尾 |
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x32 |
Type:BM回复设置绑定结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
此条指令主要用以AILink APP的蓝牙锁设备,MCU端需要主动设置蓝牙锁的开锁类型。
MCU设置指令
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度(最大16byte) |
|
2 |
0x33 |
Type:MCU上传MCU支持的蓝牙锁开锁类型 |
Payload |
3 |
|
MCU使用的绑定类型 : MCU可以根据自身的需求选择不同的绑定方式与APP进行绑定。 1:绑定码绑定方式(需要用户输入APP界面上的绑定码) 2:两次按功能键确认方式(需要用户按两次功能键) 3:一次按功能键确认方式(需要用户按一次功能键) |
|
4 ~5 |
|
设备支持的开锁类型:(MCU需要声明自身所支持的开锁类型,以方便APP界面的同步)
Bit =1 支持,Bit=0 不支持 Byte4 ~ byte5 Byte4_Bit 0:按键密码(界面) Byte4_Bit 1:指纹密码 Byte4_Bit 2:IC卡 Byte4_Bit 3:蓝牙遥控器 ....... |
|
6 |
Sum |
(1~n)校验和 |
|
7 |
0x6A |
包尾 |
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x33 |
Type:BM回复接收蓝牙锁支持类型结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
APP读取开锁类型指令
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x34 |
Type:锁的A6指令 |
Payload |
3 |
|
Value: 0x01:APP读取蓝牙锁开锁类型 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
BM回复给APP的开锁类型
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度(最大16byte) |
|
2 |
0x34 |
Type:锁的A6指令 |
Payload |
3 |
|
Value: 0x01:BM上传MCU支持的蓝牙锁开锁类型 |
|
4 |
|
MCU使用的绑定类型 : MCU可以根据自身的需求选择不同的绑定方式与APP进行绑定。 1:绑定码绑定方式(需要用户输入APP界面上的绑定码) 2:两次按功能键确认方式(需要用户按两次功能键) 3:一次按功能键确认方式(需要用户按一次功能键) |
|
5~6 |
|
设备支持的开锁类型:(MCU需要声明自身所支持的开锁类型,以方便APP界面的同步)
Bit =1 支持,Bit=0 不支持 Byte5~ byte6 Byte5_Bit 0:按键密码(界面) Byte5_Bit 1:指纹密码 Byte5_Bit 2:IC卡 Byte5_Bit 3:蓝牙遥控器 ....... |
|
7 |
Sum |
(1~n)校验和 |
|
8 |
0x6A |
包尾 |
此条指令主要用MCU上传设备的一些基本的信息,用于APP端数据的同步,详情请查看对应的协议透传产品介绍。
MCU设置设备基本信息指令
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x10 |
Payload 长度 |
|
2 |
0x35 |
Type:MCU上传设备的基本信息 |
Payload |
3 |
0x01 |
数据有效标志位 0x01 |
|
4~17 |
|
数据 |
|
18 |
Sum |
(1~n)校验和 |
|
19 |
0x6A |
包尾 |
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x35 |
Type:BM回复结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
读取设备基本信息指令
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x36 |
Type:读取设备的基本信息指令 |
Payload |
3 |
|
Value 0x01 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
BM返回设备基本信息指令
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x10 |
Payload 长度 |
|
2 |
0x36 |
Type:MCU上传设备的基本信息 |
Payload |
3 |
0x01 |
数据有效标志位 0x01 |
|
4~17 |
|
数据 |
|
18 |
Sum |
(1~n)校验和 |
|
19 |
0x6A |
包尾 |
对于某些设备,具有时间功能的,此时,可利用此指令进行数据的同步。
l APP下发时间。
Byte |
Default |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度(最大15byte) |
|
2 |
0x37 |
Tpye:APP同步时间 |
Payload |
3~9 |
|
时间:7个byte 年(当前年份-2000) 月 日 时 分 秒 星期(1~7 1=周一 ~ 7=周日) |
|
10 |
SUM(1~n) |
(1~n)校验和 |
|
11 |
0x6A |
包尾 |
l MCU返回同步时间结果
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x37 |
Type:MCU返回时间同步结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
l MCU 请求时间
设备有时间功能,且在与APP连接状态时,可以请求时间更新,APP收到该请求,会下发时间同步。
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x38 |
Type:MCU请求APP下发时间 |
Payload |
3 |
|
Value 0x01 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
master模式特有指令(master端固件也支持上面的普通指令)
设置白名单
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x29 |
Type:设置UUID和MAC |
Payload |
3 |
|
设置设置类型 bit0:0:清除UUID 1:设置UUID bit1:0:清除MAC 1:设置MAC |
|
4 |
|
UUID 高字节 |
|
5 |
|
UUID 低字节 |
|
6~11 |
|
MAC地址(6个字节,小端序) |
|
12 |
Sum |
(1~11)校验和 |
|
13 |
0x6A |
包尾 |
BM回复设置结果
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x29 |
Type:回复设置结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
查询白名单
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x2A |
Type:查询白名单 |
Payload |
3 |
Sum |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
返回白名单
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x2A |
Type:返回白名单UUID和MAC |
Payload |
3 |
|
设置设置类型 bit0:0:清除UUID 1:设置UUID bit1:0:清除MAC 1:设置MAC |
|
4 |
|
UUID 高字节 |
|
5 |
|
UUID 低字节 |
|
6~11 |
|
MAC地址(6个字节,小端序) |
|
12 |
Sum |
(1~11)校验和 |
|
13 |
0x6A |
包尾 |
设置主机扫描识别的蓝牙名称
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度(最大16byte) |
|
2 |
0x2D |
Type:设置识别的蓝牙名称 |
Payload |
3~n |
|
蓝牙名称(最大15byte) |
|
n+1 |
|
校验和 |
|
n+2 |
0x6A |
包尾 |
举例:
设置识别蓝牙名称SFST02:A6 07 2D 53 46 53 54 30 32 D6 6A
清除识别蓝牙名称:A6 02 2D 00 2F 6A
BM回复设置结果
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x2D |
Type:回复设置结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
6 |
0x6A |
包尾 |
获取主机扫描识别的蓝牙名称
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x01 |
Payload长度 |
|
2 |
0x2E |
Type:获取识别的蓝牙名称 |
Payload |
3 |
0x2F |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
返回主机扫描识别的蓝牙名称
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x2E |
Type:返回识别的蓝牙名称 |
Payload |
3~n |
|
蓝牙名称 |
|
n+1 |
|
校验和 |
|
n+2 |
0x6A |
包尾 |
举例:
返回识别的蓝牙名称SFST02:A6 07 2E 53 46 53 54 30 32 D7 6A
返回无识别的蓝牙名称:A6 01 2E 2F 6A
设置、获取主机扫描状态
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x2F |
Type:设置、获取扫描状态 |
Payload |
3 |
|
1:打开扫描,只需返回mac地址和RSSI值(暂不支持) 2:打开扫描,需返回mac地址、RSSI、厂商自定义数据(默认该状态) 3:关闭扫描(暂不支持) 4:获取扫描状态 |
|
4 |
|
校验和 |
|
5 |
0x6A |
包尾 |
BM回复设置结果
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x2F |
Type:回复设置结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 3:扫描中 4:未打开扫描 5:连接成功(断开后会自动进入扫描) |
|
4 |
Sum |
(1~3)校验和 |
|
6 |
0x6A |
包尾 |
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x30 |
Type:返回扫描到的数据 |
Payload |
3~8 |
|
该设备的mac地址,小端序 |
|
9 |
|
RSSI值(如50是-50dbm的意思) |
|
10~n |
|
厂商自定义数据(当不需返回该数据时无该数据) |
|
n+1 |
|
校验和 |
|
n+2 |
0x6A |
包尾 |
此指令比较特殊,返回的总数据长度可以超过20byte
举例:
A6 19 30 BB FF B9 EC B4 01 32 AC 00 C6 5A 5A 01 00 7B 26 0B 0B BB FF B9 EC B4 01 81 6A
mac地址:BB FF B9 EC B4 01(小端序)
信号强度:-50dbm
厂商自定义数据为:AC 00 C6 5A 5A 01 00 7B 26 0B 0B BB FF B9 EC B4 01
设置白名单
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x38 |
Type:设置BM连接 |
Payload |
3~8 |
|
MAC地址(6个字节,小端序) |
|
9 |
Sum |
(1~8)校验和 |
|
10 |
0x6A |
包尾 |
BM回复设置结果
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x38 |
Type:回复设置结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
根据已定好的协议,做数据的传输。
传输格式:
Byte |
Default |
Description |
0 |
0xA7 |
包头 |
1~2 |
|
产品类型CID |
3 |
|
Payload长度(最大15byte) |
n |
|
Payload
|
n+1 |
SUM(1~n) |
(1~n)校验和 |
n +2 |
0x7A |
包尾 |
协议透传指令的识别:
包头和包尾是固定的:0xA7,0x7A。
校验和是指byte1 +…+ byte n 的值,取低8位。
不符合设置指令与协议透传指令的数据一律采用数据透传,即收到什么数据就传什么数据。
产品编号 |
产品名称 |
产品类型(CID) |
1 |
血压计 |
0001 |
2 |
额温枪 |
0002 |
3 |
0003 |
|
4 |
0004 |
|
5 |
0005 |
|
6 |
000C |
|
7 |
000D |
|
8 |
体重/体脂秤 |
000E |
9 |
000B |
|
10 |
箱包锁 |
000F |
11 |
八电极体脂秤 |
0013 |
以下流程步骤,缺一不可。
BM模块上电。
MCU设置蓝牙其他参数,(可根据自身需求设置)。
设备启动,上传数据。
设备测量完毕,上报测量完毕指令。
APP设置单位。
MCU休眠。
数据格式:
Byte |
Default |
Description |
||
0 |
0xA7 |
包头 |
||
1~2 |
0x0013 |
产品类型(CID) |
||
3 |
|
Payload长度 |
||
4 |
|
类型:称重 01 |
Payload |
|
5 |
|
Type:测量状态 01:实时体重 02:稳定体重 |
||
6 |
|
重量数据高位 |
注:当单位是组合单位时 如1ST:5LB ,则该值是1*14+5=19 ,需将数值转为小单位数值 ,同时在后面的单位声明里申明是 st:lb 单位。 |
|
7 |
|
重量数据次高位 |
||
8 |
|
重量数据低位 |
||
9 |
|
数据标志: Bit7~4:重量数据精度(该数据标识的是次级单位里的数据格式) 0000:0位小数 0001:1位小数 0010:2位小数 0011:3位小数
Bit3~0:当前单位:(标识整一组数据的单位类型) 0000:kg 0001:斤 0100:st:lb 0110:lb |
||
10 |
|
保留为:00 |
||
11 |
SUM |
校验和(byte1~byte12) |
||
12 |
0x7A |
包尾 |
数据格式:
Byte |
Default |
Description |
|
0 |
0xA7 |
包头 |
|
1~2 |
0x0013 |
产品类型(CID) |
|
3 |
|
Payload长度 |
|
4 |
|
类型:测试阻抗 02 |
Payload |
5 |
|
Type:阻抗测量 01:测阻抗中 02:测阻抗失败 03:测阻抗成功,带上阻抗数据,并使用APP算法(APP 会根据byte7的算法标识进行计算) 04:测阻抗结束。 |
|
6 |
|
通道: 0x00 双脚阻抗 0x01 双手阻抗 0x02 左手阻抗 0x03 右手阻抗 0x04 左脚阻抗 0x05 右脚阻抗 0x06 左全身阻抗 0x07 右全身阻抗 0x08 右手左脚阻抗 0x09 左手右脚阻抗 0x0A 躯干阻抗
|
|
7-10 |
|
阻抗数据(大端序,精度1Ω) |
|
11 |
|
体脂算法ID,每个客户都有自己的算法ID(1~255) |
|
12 |
0 |
保留位 |
|
13 |
SUM |
校验和(byte1~byte12) |
|
14 |
0x7A |
包尾 |
数据格式:
Byte |
Default |
Description |
|
0 |
0xA7 |
包头 |
|
1~2 |
0x0013 |
产品类型(CID) |
|
3 |
|
Payload长度 |
|
4 |
|
类型:测试心率 03 |
Payload |
5 |
|
Type:心率测量 01:测心率中 02:测心率成功,带上心率数据 03:测心率失败 |
|
6 |
|
心率数据(精度1bpm) |
|
7 |
0x00 |
保留 |
|
8 |
SUM |
校验和 |
|
9 |
0x7A |
包尾 |
数据格式:
Byte |
Default |
Description |
|
0 |
0xA7 |
包头 |
|
1~2 |
0x0013 |
产品类型(CID) |
|
3 |
|
Payload长度 |
|
4 |
|
类型:温度数据 04 |
Payload |
5 |
|
温度正负 0 :正温度 1 :负温度 |
|
6 |
|
温度数据高字节 |
|
7 |
|
温度数据低字节 |
|
8 |
|
数据标志: Bit7~4:温度数据精度 0000:0位小数 0001:1位小数 0010:2位小数 0011:3位小数
Bit3~0:当前单位:(标识整一组数据的单位类型) 0000:℃ 0001:℉ |
|
9 |
0 |
保留 |
|
10 |
SUM |
校验和 |
|
11 |
0x7A |
包尾 |
数据格式:
Byte |
Default |
Description |
|
0 |
0xA7 |
包头 |
|
1~2 |
0x0013 |
产品类型(CID) |
|
3 |
|
Payload长度 |
|
4 |
0x0F |
Type:测量完成 0x0F |
Payload |
5 |
0 |
保留 |
|
6 |
SUM |
校验和 |
|
7 |
0x7A |
包尾 |
APP收到MCU的测量完成指令后,需回复该指令。
数据格式:
Byte |
Default |
Description |
|
0 |
0xA7 |
包头 |
|
1~2 |
0x0013 |
产品类型(CID) |
|
3 |
|
Payload长度 |
|
4 |
0x84 |
Type:APP测量完成 0x84 |
Payload |
5 |
0 |
保留 |
|
6 |
SUM |
校验和 |
|
7 |
0x7A |
包尾 |
数据格式:
Byte |
Default |
Description |
|
0 |
0xA7 |
包头 |
|
1~2 |
0x0013 |
产品类型(CID) |
|
3 |
|
Payload长度 |
|
4 |
0x81 |
Type:app下发操作指令 0x81 |
Payload |
5 |
|
操作: 0x01 : 校准 0x02 : 温度单位切换 0x03 : 重量单位切换 |
|
6 |
|
当操作是0x02时 0:摄氏度℃ 1:华氏度℉
当操作是0x03时 0:kg 1:斤 4:st:lb 6:lb |
|
7 |
|
保留 0x00 |
|
8 |
SUM |
校验和 |
|
9 |
0x7A |
包尾 |
MCU回复操作结果:
数据格式:
Byte |
Default |
Description |
|
0 |
0xA7 |
包头 |
|
1~2 |
0x0013 |
产品类型(CID) |
|
3 |
|
Payload长度 |
|
4 |
0x82 |
Type:MCU回复操作结果 0x82 |
Payload |
5 |
|
操作: 0x01 : 校准 0x02 : 温度单位切换 0x03:重量单位切换 |
|
6 |
|
操作结果: 0:操作成功 1:操作失败 2:正在操作中 |
|
7 |
|
保留 0x00 |
|
8 |
SUM |
校验和 |
|
9 |
0x7A |
包尾 |
数据格式:
Byte |
Default |
Description |
|
0 |
0xA7 |
包头 |
|
1~2 |
0x0013 |
产品类型(CID) |
|
3 |
|
Payload长度 |
|
4 |
0xFF |
Tpye:错误码 |
Payload |
5 |
|
错误内容: 1:超重 … |
|
6 |
SUM |
校验和 |
|
7 |
0x7A |
包尾 |
Copyright © 2020 深圳市易连物联网有限公司 All rights reserved.