更新时间:2024-06-24 10:06:49下载pdf
蓝牙单点通用模组支持通过命令的方式,访问或控制蓝牙相关功能,包括广播、连接和设备信息等。
蓝牙单点通用模组提供以下协议指令,用于访问和控制蓝牙相关功能:
命令字 | 命令说明 |
---|---|
0xE7 | 控制蓝牙模组主动断开蓝牙连接。 |
0xA3 | 控制蓝牙模组的广播开关。 |
0xBC | 集成蓝牙模组广播开关控制逻辑的高级功能,用于配网窗口的配置。 |
0xA5 | 通过广播设置标志位,请求网关对蓝牙模组发起连接。 |
0xE2 | 修改蓝牙模组在低功耗状态时的广播间隔。 |
0xB1 | 修改蓝牙模组在连接维持状态时的连接间隔。 |
0xBA | 与 HID 靠近解锁方案相关的功能。 |
0xBB | 设置蓝牙广播名称。 |
0xBD | 修改蓝牙发射功率。 |
0xBE | 查询蓝牙模组的 MAC 地址。 |
断开蓝牙连接并进入广播状态。
MCU 发送
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xE7 |
4 5 |
2 | 数据长度 | 0x00 0x00 |
6 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
模组回复
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xE7 |
4 5 |
2 | 数据长度 | 0x00 0x01 |
6 | 1 | State | 返回的状态值 |
7 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
State
返回值说明:
0x00
:成功默认配网模式下,模组工作在非低功耗状态时以固定的 100ms 间隔广播,工作在低功耗状态时下默认以 1000ms 间隔广播(MCU 可设置范围为 0~2000ms,其中 0 表示不广播)。
App 配网或连接设备都需要首先扫描到广播信号,以便发现设备,才可以继续下一动作。如果希望配网时机完全由 MCU 控制,可调用该接口来实现。
广播使能状态会记录在 Flash 中。如果希望配网时间由 MCU 控制,需在串口初始化后调用该接口,调整至 MCU 期望的默认使能状态。MCU 应在允许设备被配网或连接时开启使能,在不允许设备被配网或连接时关闭使能。
模组默认处于广播使能状态,通过该接口可以关闭模组广播使能。无论是低功耗还是非低功耗模式,关闭广播使能后,模组将不会广播。
如果模组在关闭广播使能之前处于广播状态,关闭后模组会立即停止广播。
打开广播使能后,模组会立即启动广播。
通过修改低功耗模式下的广播间隔只能控制低功耗状态下的广播。而通过该接口可以控制非低功耗模式下的广播,因此需要使用使能广播接口来控制配网时机。
如果模组支持高级功能——触发配网(CMD-0xBC),建议使用触发配网功能进行配网窗口的控制。
MCU 发送
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xA3 |
4 5 |
2 | 数据长度 | 0x00 0x01 |
6 | 1 | Data | 见下表 |
7 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
Data
取值说明:
0x00
:关闭广播使能0x01
:打开广播使能模组回复
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xA3 |
4 5 |
2 | 数据长度 | 0x00 0x01 |
6 | 1 | State | 返回的状态值 |
7 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
State
返回值说明:
0x00
:成功MCU 发送
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
01 | 2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xBC |
45 | 2 | 数据长度 Len | Len 高 8 位 Len 低 8 位 |
6~6+Len-1 | Len | Data | 见说明 |
6+Len | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
Data 说明:
ENABLE | ON_OFF | TIME |
---|---|---|
1 字节 | 1 字节 | 2 字节 |
ENABLE
:
0x00
:关闭触发配网模式,使用默认配网模式。当该字段为 0x00
时,后面字段无意义,模组不解析。0x01
:启用触发配网模式。ON_OFF
:
0x00
:立即退出配网状态。当该字段为 0x00
时,后面字段无意义,模组不解析。0x01
:立即进入配网状态。TIME
:触发配网超时停止时间,单位秒,可设置范围 10~600(S)。模组返回
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xBC |
4 5 |
2 | 数据长度 Len | Len 高 8 位 Len 低 8 位 |
6~6+Len-1 | Len | Status | 见说明 |
6+Len | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
Status:
0x00
:成功0x01
:参数错误0x02
:请求失败0x03
:状态错误(设备非未绑定状态)0xE0
上报。如果 MCU 检测到模组为绑定未连接状态,则调用该接口请求上线,模组上线后会自动释放通过 0xE0
上报的数据。0xE0
的 0x02
格式上报实时数据,模组上线后会将数据释放给 App(不建议使用)。MCU 发送
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xA5 |
4 5 |
2 | 数据长度 | 0x00 0x00 |
6 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
模组回复
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xA5 |
4 5 |
2 | 数据长度 | 0x00 0x01 |
6 | 1 | State | 返回的状态值 |
7 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
State
返回值说明:
0x00
:成功BK3432 共享类通用固件暂不支持该接口。
为了降低休眠时的功耗,可以通过该指令修改广播间隔,广播参数将永久保存。当设置为 0
时,将关闭广播。该设置将永久储存。
低功耗下广播间隔默认 1s。广播间隔越大,连接所需要的时间越长,甚至某些性能差的手机可能很难连接上,因此不建议您修改成更大的广播间隔值。
MCU 发送
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xE2 |
4 5 |
2 | 数据长度 | 0x00 0x01 |
6 | 1 | Adv_interval | 见下表 |
7 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
Adv_interval
:可设置数值范围为 0
到 20
,单位为 100ms,即实际广播间隔范围为 100ms 到 2 秒。当设置数值为 0
时将关闭广播。
示例:
55 aa 00 E2 00 01 00 E2
:设置低功耗模式下关闭广播55 aa 00 E2 00 01 06 E8
:设置低功耗下广播间隔为 600ms模组回复
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xE2 |
4 5 |
2 | 数据长度 | 0x00 0x01 |
6 | 1 | State | 返回的状态值 |
7 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
State
返回值说明:
0x00
:成功MCU 发送
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xB1 |
4 5 |
2 | 数据长度 | 0x00 0x0B |
6~16 | 11 | CFG | 见说明 |
17 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
CFG 格式:
1 字节 | 1 字节 | 1 字节 | 2 字节 | 2 字节 | 2 字节 | 2 字节 |
---|---|---|---|---|---|---|
cfg_type | cfg_ack | mode | min_interval | max_interval | latency | timeout |
cfg_type
:配置方式
0x00
:按模式配置,根据 mode
字段选择连接参数,min_interval
、max_interval
、latency
、timeout
字段不生效。一般建议使用这种方式。0x01
:自定义配置方式,支持自定义连接参数,即根据 min_interval
~timeout
字段参数配置连接间隔,该方式供蓝牙设备使用。cfg_ack
:配置响应
0x00
:不需要配置成功响应0x01
:需要配置成功响应。连接参数主要由主节点指定,有的情况会更新不成功。如果配置需要响应,则会在成功更新连接参数后,将使用的连接参数下发给 MCU。mode
:
0x00
:快速模式,蓝牙交互响应快,但功耗较高。适用于功耗要求一般,要求快速响应的产品。0x01
:均衡模式,功耗和蓝牙交互响应速度适中。适用于对功耗要求一般的产品。0x02
:低速模式,响应慢但功耗低。适用于对功耗要求高,但交互频率低的产品,例如传感类产品。min_interval
:最小连接间隔,单位:1.25ms。范围参考 GAP 连接参数限制。
max_interval
:最大连接间隔,单位:1.25ms。范围参考 GAP 连接参数限制。
latency
:连接事件数量中的从属延迟。范围参考 GAP 连接参数限制。
timeout
:连接超时时间,单位 10 ms。范围参考 GAP 连接参数限制。
大于两字节字段按大端传输。若无必要,cfg_type
和 cfg_ack
建议使用 0x00
。
模组回复
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xB1 |
4 5 |
2 | 数据长度 | 0x00 0x09 |
6~14 | 1 | State | 返回的状态值 |
15 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
State 说明
1 字节 | 2 字节 | 2 字节 | 2 字节 | 2 字节 |
---|---|---|---|---|
result | min_interval | max_interval | latency | timeout |
result
说明
0x00
:收到连接参数更新请求,模组将向主节点发起连接参数更新请求。min_interval
、max_interval
、latency
、timeout
字段表示目标连接参数。
0x01
:更新连接参数成功,min_interval
、max_interval
、latency
、timeout
字段表示实际更新到的连接参数。
0x02
:更新连接参数失败,min_interval
、max_interval
、latency
、timeout
字段表示目标的连接参数。
0x03
:非法状态,一般表示当前模组状态为非绑定已连接状态。
0x06
:无效参数。
其他:失败
当 cfg_ack
配置为 0x01
的时候,模组才会在实际更新连接参数成功后,同步当前连接参数给 MCU。即只有 cfg_ack
设置为 0x01
,result
0x01
和 0x02
才会收到,否则模组不会同步结果给 MCU。
示例:
设置为低速模式:
55 AA 00 B1 00 0B 00 00 02 00 00 00 00 00 00 00 00 BD
55 AA 00 B1 00 09 00 01 90 01 A0 00 00 01 90 7C
设置为均衡模式:
55 AA 00 B1 00 0B 00 00 01 00 00 00 00 00 00 00 00 BC
55 AA 00 B1 00 09 00 00 90 00 A0 00 00 01 90 7A
设置为快速模式:
55 AA 00 B1 00 0B 00 00 00 00 00 00 00 00 00 00 00 BB
55 AA 00 B1 00 09 00 00 32 00 3C 00 00 01 90 B8
设置为自定义参数:
55 AA 00 B1 00 0B 01 00 00 01 90 01 A0 00 00 01 90 7F
55 AA 00 B1 00 09 00 01 90 01 A0 00 00 01 90 7C
0x01
获取 MCU 信息中上传 TLD
字段,以使能 SMP 功能模组。否则,模组将拒绝该指令。MCU 发送
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xBA |
4 5 |
2 | 数据长度 Len | Len 高 8 位 Len 低 8 位 |
6 | 1 | SubCmd | 见说明 |
7~7+Len-1 | Len | Data | 见说明 |
7+Len | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
SubCmd(子命令)
0x00
:SMP 使能配置
暂不支持动态配置 SMP,请在 CMD-0x01
(获取 MCU 信息)中上报 SMP 使能状态。默认不使能 SMP 模组,使能状态发生改变时蓝牙模组将会自重启一次,并清空配对信息,以完成相关初始化。该配置支持断电记忆。
0x01
:请求 HID 配对
0x02
:请求 HID 配对连接下的 RSSI
0x03
:查询 HID 配对状态
SubCmd
不同,Data
字段的格式不一样,模组端依据 SubCmd
及下面 Data
的格式进行解析。
Data(数据格式)
SubCmd 为 0x01 和 0x03 时,Data 字段为空。
示例 1:请求 HID 配对
MCU > 模组:55 aa 00 BA 00 01 01 BB
示例 2:查询 HID 配对状态
MCU > 模组:55 aa 00 BA 00 01 03 BD
SubCmd 为 0x02 时 Data 字段填充的数据格式如下:
1 | 2 | 3 |
---|---|---|
op | num | interval |
op
:操作。
0x00
:停止获取。0x01
:开始获取。num
:需要获取 RSSI 的数量。
interval
:下发 RSSI 的间隔,单位 100ms,限制可设置范围为 1~20。
55 AA 00 BA 00 04 02 01 0A 02 CC
模组回复
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xBA |
4 5 |
2 | 数据长度 Len | Len 高 8 位 Len 低 8 位 |
6 | 1 | SubCmd | 见下表 |
7~7+Len-1 | Len | Data | 见说明 |
7+Len | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
SubCmd(子命令)
0x00
:SMP 使能配置
0x01
:请求 HID 配对
0x02
:请求 HID 配对连接下的 RSSI
0x03
:查询 HID 配对状态/HID 配对状态通知
SubCmd
不同,Data
字段的格式不一样,MCU 请依据 SubCmd
及下面 Data
的格式进行解析。
SubCmd 为 0x00 时 Data 字段填充的数据为 1 个字节的状态码 Status,其含义如下:
Status:
0x00
:SMP 使能成功0x01
:SMP 使能失败SubCmd 为 0x01 时 Data 字段填充的数据为 1 个字节的状态码 Status,其含义如下:
Status:
0x00
:已发送 HID 配对请求0x01
:HID 配对失败0x02
:HID 配对成功0x03
:状态错误0x04
:拒绝SubCmd 为 0x02 时 Data 字段填充的数据格式如下:
1 | 2 |
---|---|
Status | rssi_raw |
rssi_raw
:status
非 0 的情况下,rssi_raw
的值为 0xff
。rssi_real
:= rssi_raw
- 110。假设 rssi_raw
返回值为 50,则 rssi_real
为 -60 dB。Status:
0x00
:成功0x02
:参数错误0x03
:非 HID 连接配对状态0x04
:拒绝SubCmd 为 0x03 时 Data 字段填充的数据为 1 个字节的状态码 Status,其含义如下:
Status:
0x00
:未连接0x01
:已连接0x02
:HID 配对已连接0x04
:拒绝0x05
:HID 配对已连接且校验通过仅允许处于未绑定状态时设置,其他状态模组将拒绝。
MCU 发送
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xBB |
4 5 |
2 | 数据长度 Len | Len 高 8 位 Len 低 8 位 |
6~6+Len-1 | Len | Data | 见说明 |
6+Len | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
Data 格式
1 | 2~2+ADV_LOCAL_NAME_LEN-1 |
---|---|
ADV_LOCAL_NAME_LEN | ADV_LOCAL_NAME |
ADV_LOCAL_NAME_LEN
:广播名的字符串长度。基于 V2.1.2 以下基线的固件最大支持 5 个字节,V2.1.2(含)以上的最大支持 14 个字节。ADV_LOCAL_NAME
:广播名字,ASCII 码。模组回复
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xBB |
4 5 |
2 | 数据长度 | 0x00 0x01 |
6 | 1 | State | 返回的状态值 |
7 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
State
返回值说明:
0x00
:成功0x01
:超出长度0x02
:拒绝MCU 发送
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xBD |
4 5 |
2 | 数据长度 | 0x00 0x02 |
6 | 1 | OP | 见说明 |
7 | 1 | TX_POWER | 见说明 |
8 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
OP
:
0x00
:获取0x01
:设置TX_POWER
:
当 OP
为 0x00
时,该字段仅占位作用,无实际意义。
当 OP
为 0x01
时,发射功率寄存器配置,请联系涂鸦技术支持人员获取。
模组回复
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xBD |
4 5 |
2 | 数据长度 | 0x00 0x02 |
6 | 1 | OP | 见说明 |
7 | 1 | Value | 见说明 |
8 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
OP
:同 MCU 发送。
Value
:
OP
为 0x00
时,Value
值表示 TX_POWER
。OP
为其他,Value
值表示设置结果,0x00
表示成功,其他表示失败。若 MCU 需要获取蓝牙模组的 MAC 地址信息,可通过该接口查询。
MCU 发送
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xBE |
4 5 |
2 | 数据长度 | 0x00 0x00 |
6 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
模组回复
序号 | 字节数 | 字段 | 说明 |
---|---|---|---|
0 1 |
2 | 帧头 | 0x55 0xAA |
2 | 1 | 版本号 | 0x00 |
3 | 1 | 命令字 CMD | 0xBE |
4 5 |
2 | 数据长度 | 0x00 0x06 |
6~11 | 6 | MAC | 见下表 |
12 | 1 | CRC8 | 从帧头开始按字节求和,得出的结果对 256 求余 |
示例:模组的 MAC 地址为 DC:23:66:11:22:33
MCU 发送:55 AA 00 BE 00 00 BD
模组回复:55 AA 00 BE 00 06 DC 23 66 11 22 33 8E
A:
0xA3
)用于控制蓝牙模组的广播开关,所有广播相关的功能都依赖于此使能状态,可以理解为蓝牙广播的总开关。0xBC
)则是集成了蓝牙模组广播开关逻辑的高级功能,侧重于配网窗口的控制,是蓝牙广播使能的一个具体应用。更多信息,请参考 蓝牙通用串口协议。
如果在开发过程遇到问题,您可以登录 TuyaOS 开发者论坛 TuyaOS-蓝牙设备开发 版块进行沟通咨询。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈