PDF下载地址:BM29主从一体应用手册
BM29模块透传应用说明
版本:V1.0.1
更新日期:2020年05月05日
深圳市易连物联网有限公司版权所有
本产品的规格书如有变更,恕不另行通知。
深圳市易连物联网有限公司保留在不另行通知的情况下,对其中所包含的规格书和材料进行更改的权利,同时由于信任所引用的材料所造成的损害(包括结果性损害),包括但不限于印刷上的错误和其他与此出版物相关的错误,易连物联网公司将不承担责任。
文档版本 |
作者 |
发布日期 |
修改说明 |
V0.1 |
廖展锋 |
2020/04/26 |
基于AiLink模块透传应用说明V3.1.16_20200327_UART通用端,修改主端部分指令 |
V1.0 |
廖展锋 |
2020/04/28 |
添加《主从一体说明》,删除《协议透传产品部分》 |
V1.0.1 |
罗贤丽 |
2020/5/5 |
更新公司信息 |
本文档适用于BM系列模块(BM29……)。
使用UART透传,MCU可以通过BM模块与APP进行相互数据透传。也支持模块参数设置满足不同需求,也可以通过协议透传命令快速适配综合超级应用APP:AiLink,快速实现血压计、额温枪、体温计、婴儿秤、身高仪等智能化。
请扫描此二维码下载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模块上电。
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设置、获取透传通道的目标(仅APP、MCU)
l master获取连接BM的MAC地址
l master BM返回扫描到的广播数据
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 |
0x03 |
Payload长度 |
|
2 |
0x15 |
Type:设置主从模式 |
Payload |
3 |
|
从机是否断开连接: 1:断开连接 |
|
4 |
|
主机是否断开连接: 1:断开连接 |
|
5 |
|
(1~4)校验和 |
|
6 |
0x6A |
包尾 |
BM回复设置结果:
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x03 |
Payload长度 |
|
2 |
0x15 |
Type:回复设置主从模式结果 |
Payload |
3 |
|
从机是否断开连接成功: 0:失败 1:成功 |
|
4 |
|
主机是否断开连接成功: 0:失败 1:成功 |
|
5 |
Sum |
(1~4)校验和 |
|
6 |
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 |
0x03 |
Payload长度 |
|
2 |
0x16 |
Type:回复主从模式 |
Payload |
3 |
|
从机是否连接: 0:未连接 1:已连接 |
|
4 |
|
主机是否连接: 0:未连接 1:已连接 |
|
5 |
Sum |
(1~4)校验和 |
|
6 |
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显示) |
02 |
长度 |
Bit0:cm Bit1:inch Bit2:ft-in |
03 |
温度 |
Bit0 : C Bit1 : F |
04 |
血压 |
Bit0:mmhg Bit1:kPa |
05 |
轮胎胎压压力 |
Bit0:Kpa Bit1:Psi Bit2:Bar |
(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:设置扫描参数 |
Payload |
3 |
|
扫描状态: 0:停止扫描 1:扫描所有设备的广播内容及RSSI 2:扫描所有设备的广播内容 3:扫描指定MAC地址的RSSI 4:扫描指定MAC地址的广播内容 5:扫描含特定UUID的RSSI 6:扫描含特定UUID的广播内容 7:扫描以特定名字开头的RSSI 8:扫描以特定名字开头的广播内容
|
|
4~5 |
|
扫描间隔(小端序) |
|
6~n |
|
附加内容: 当Byte3是3、4时,长度为6,内容为MAC地址; 是5、6时,长度为2,内容为需要过滤的一个UUID; 是7、8时,长度最长为13,内容为需要过滤的名字开头 |
|
N+1 |
Sum |
(1-n)校验和 |
|
N+2 |
0x6A |
包尾 |
BM回复设置结果
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x29 |
Type:回复设置结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 2:不支持 |
|
4 |
Sum |
(1~3)校验和 |
|
6 |
0x6A |
包尾 |
读取扫描参数
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x01 |
Payload长度 |
|
2 |
0x2A |
Type:读取扫描参数 |
Payload |
3 |
Sum |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
BM返回设备扫描参数
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload 长度 |
|
2 |
0x2A |
Type:读取扫描参数 |
Payload |
3 |
|
扫描状态: 0:停止扫描 1:扫描所有设备的广播内容及RSSI 2:扫描所有设备的广播内容 3:扫描指定MAC地址的RSSI 4:扫描指定MAC地址的广播内容 5:扫描含特定UUID的RSSI 6:扫描含特定UUID的广播内容 7:扫描以特定名字开头的RSSI 8:扫描以特定名字开头的广播内容 |
|
4~5 |
|
扫描间隔 |
|
6~n |
|
数据 |
|
N+1 |
Sum |
(1~n)校验和 |
|
N+2 |
0x6A |
包尾 |
设置透传通道的目标
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x2D |
Type:设置透传通道的目标 |
Payload |
3 |
|
设置对象: 0:MCU的透传设置 1:APP的透传设置 2:连接的从端透传设置 |
|
4 |
|
透传的目标: 0:直接连接的MCU 1:另一个PEER |
|
5 |
Sum |
(1-4)校验和 |
|
6 |
0x6A |
包尾 |
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 |
|
读取的对象 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
BM返回透传通道的目标
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload 长度 |
|
2 |
0x2E |
Type:读取扫描参数 |
Payload |
3 |
|
读取的对象: 0:MCU的透传设置 1:APP的透传设置 2:连接的从端透传设置 |
|
4 |
|
透传的目标: 0:直接连接的MCU 1:另一个PEER |
|
4 |
Sum |
(1~4)校验和 |
|
5 |
0x6A |
包尾 |
读取连接BM的MAC地址
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x01 |
Payload长度 |
|
2 |
0x2F |
Type:读取连接BM的MAC地址 |
Payload |
3 |
Sum |
(1~2)校验和 |
|
4 |
0x6A |
包尾 |
BM返回透传通道的目标
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload 长度 |
|
2 |
0x2F |
Type:读取连接BM的MAC地址 |
Payload |
3~8 |
|
MAC地址(小端) |
|
9 |
Sum |
(1~8)校验和 |
|
10 |
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 |
0x39 |
Type:设置BM连接 |
Payload |
3~8 |
|
MAC地址(6个字节,小端序) |
|
9 |
Sum |
(1~8)校验和 |
|
10 |
0x6A |
包尾 |
BM回复设置结果
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
0x02 |
Payload长度 |
|
2 |
0x39 |
Type:回复设置结果 |
Payload |
3 |
|
结果值: 0:成功 1:失败 3:连接超时 |
|
4 |
Sum |
(1~3)校验和 |
|
5 |
0x6A |
包尾 |
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x3A |
Type:返回扫描到的数据 |
Payload |
3~n |
|
|
|
n |
|
校验和 |
|
n+1 |
0x6A |
包尾 |
Byte |
Value |
Description |
|
0 |
0xA6 |
包头 |
|
1 |
|
Payload长度 |
|
2 |
0x3B |
Type:返回扫描到的数据 |
Payload |
3~n |
|
|
|
n |
|
校验和 |
|
n+1 |
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位。
主从协议传输格式:
Byte |
Default |
Description |
0 |
0xAA |
包头1 |
1 |
0xAB |
包头2 |
2 |
|
接收这个数据的目标: 0:MCU 1:MCU连接的另一个PEER |
3~n |
|
Payload
|
n+1 |
SUM(1~n) |
(2~n)校验和 |
协议透传指令的识别:
包头是固定的:0xAA,0x7B,接收的目标;包尾是校验和。
校验和是指byte2 +…+ byte n 的值,取低8位。
举例:
发送给BM连接的另一个PEER数据:0x01,0x12
需要发送 0xAA,0xAB,0x01,0x01,0x12,0x14
不符合设置指令与协议透传指令的数据一律采用数据透传,即收到什么数据就传什么数据。
主从一体透传为BM模块(以下简称为BM)被一个主机角色(以下简称为Host Peer)连接,同时连接一个从机角色(以下简称为Slave Peer)。他们的数据透传方向有:
设备的数据透传方向:
l Host Peer与BM为蓝牙连接,于Characteristic FFE2、FFE1进行数据透传,默认数据透传为①;可设置的数据透传方向为①、⑤
l BM与MCU为串口连接,默认数据透传为②;可设置的数据透传方向为②、③
l Slave Peer与BM为蓝牙连接,于Characteristic FFE2、FFE1进行数据透传,默认数据透传为④;可设置的数据透传方向为④、⑥
Host Peer与Slave Peer的方向,可于Characteristic FFE3通过设置透传通道指令自行配置;MCU可以通过串口对三个角色的方向进行配置。除此之外,BM还提供了协议透传以增加灵活性:
Host Peer与Slave Peer于Characteristic FFE2、FFE1,MCU串口在原有的数据添加包头(0xAA,0xAB,0xXX透传目标)及包尾(0xXX从Byte3即透传目标至数据结束的累积和)直接发送至选定的透传目标,例如:
Host Peer发送0xAA,0xAB,0x01, 0x11,0x22 ,0x34
如果连接了Slave Peer,Slave Peer将直接收到数据0x11,0x22
设备的数据接收说明:
Host Peer与Slave Peer直接接收原始数据不带来源标识
MCU收到非默认的数据透传,会添加包头、包尾以标识来源(A6指令的0x3A(Host Peer),0x3B(Slave Peer))
*连接Slave Peer时,建议发送间隔大于200ms
l 设备支持直接配置广播间隔、扫描间隔,同时进行扫描及广播。
l 设备发起连接从机角色时,广播、扫描将暂时关闭(最长2s返回连接失败)。连接不管失败或成功后,均会尝试重启广播、扫描(已被主机角色连接后,广播默认不再开启)
深圳市易连物联网有限公司
地址:深圳市宝安区西乡街道银田工业区侨鸿盛文化创意园写字楼A栋五层502室
Tel: +(86)0755-81773367
Email:hw@elinkthings.com
Web: www.elinkthings.com
Copyright © 2020 深圳市易连物联网有限公司 All rights reserved.