蓝牙控制服务

更新时间:2024-06-24 10:06:49下载pdf

蓝牙单点通用模组支持通过命令的方式,访问或控制蓝牙相关功能,包括广播、连接和设备信息等。

功能列表

蓝牙单点通用模组提供以下协议指令,用于访问和控制蓝牙相关功能:

命令字 命令说明
0xE7 控制蓝牙模组主动断开蓝牙连接。
0xA3 控制蓝牙模组的广播开关。
0xBC 集成蓝牙模组广播开关控制逻辑的高级功能,用于配网窗口的配置。
0xA5 通过广播设置标志位,请求网关对蓝牙模组发起连接。
0xE2 修改蓝牙模组在低功耗状态时的广播间隔。
0xB1 修改蓝牙模组在连接维持状态时的连接间隔。
0xBA 与 HID 靠近解锁方案相关的功能。
0xBB 设置蓝牙广播名称。
0xBD 修改蓝牙发射功率。
0xBE 查询蓝牙模组的 MAC 地址。

蓝牙特有协议

主动断开蓝牙连接(CMD-0xE7)

断开蓝牙连接并进入广播状态。

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:成功
  • 其他:失败

使能蓝牙广播(CMD-0xA3)

  • 默认配网模式下,模组工作在非低功耗状态时以固定的 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:成功
  • 其他:失败

触发配网(CMD-0xBC)

  • 对于蓝牙设备来说,未绑定设备的广播状态称为配网状态。该指令当且仅当设备处于未绑定状态时可用。
  • 关闭触发配网模式,会恢复到常规配网模式,即广播常开。
  • 若设备在触发配网模式,且设备处于:
    • 未绑定状态,设备上电时不会自启动蓝牙广播。
    • 绑定状态,解绑后设备不会自启动蓝牙广播。
  • 触发配网模式仅限制配网状态的广播,配网后广播不受该指令影响。
  • 触发配网模式掉电记忆,广播持续时间不支持掉电记忆。

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:状态错误(设备非未绑定状态)

请求上线(CMD-0xA5)

  • 该接口主要用于网关按需连接。
    1. MCU 调用该接口后,蓝牙模组会启动 30s 高频广播。
    2. 蓝牙主机扫描带标志的模组广播后,会主动连接模组。
    3. 模组上线后,MCU 即可正常上报 DP。
  • 通常用法:记录型数据都调用 0xE0 上报。如果 MCU 检测到模组为绑定未连接状态,则调用该接口请求上线,模组上线后会自动释放通过 0xE0 上报的数据。
  • 实时数据不符合主动上报一般使用场景,但 MCU 端如果想上报实时数据,有两种方法:
    1. 调用该接口后,等待模组工作状态变为绑定已连接(模组上线会下发工作状态)。
    2. 通过 0xE00x02 格式上报实时数据,模组上线后会将数据释放给 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:成功
  • 其他:失败

修改低功耗模式下的广播间隔(CMD-0xE2)

  • 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:可设置数值范围为 020,单位为 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:成功
  • 其他:失败

设置蓝牙连接间隔(CMD-0xB1)

  • 若调用该接口时,模组处于绑定已连接状态,将会向主节点(master)发送更新连接参数请求。否则仅记录连接参数,之后连接时使用。特殊的情况:如果当前模组处于 OTA 状态,将不会向主节点请求更新,但会将 MCU 设置的参数保存下来。
  • 如果模组有离线缓存数据未释放,重连时模组会在离线缓存数据完全释放完后,才更新为 MCU 设置的连接参数。
  • 该设置将永久存储。

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_intervalmax_intervallatencytimeout 字段不生效。一般建议使用这种方式。
    • 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_typecfg_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_intervalmax_intervallatencytimeout 字段表示目标连接参数。

  • 0x01:更新连接参数成功,min_intervalmax_intervallatencytimeout 字段表示实际更新到的连接参数。

  • 0x02:更新连接参数失败,min_intervalmax_intervallatencytimeout 字段表示目标的连接参数。

  • 0x03:非法状态,一般表示当前模组状态为非绑定已连接状态。

  • 0x06:无效参数。

  • 其他:失败

    cfg_ack 配置为 0x01 的时候,模组才会在实际更新连接参数成功后,同步当前连接参数给 MCU。即只有 cfg_ack 设置为 0x01result 0x010x02 才会收到,否则模组不会同步结果给 MCU。

示例

  • 设置为低速模式:

    • 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
  • 设置为均衡模式:

    • MCU 发送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
  • 设置为快速模式:

    • MCU 发送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
  • 设置为自定义参数:

    • MCU 发送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

蓝牙 HID 相关功能(CMD-0xBA)

  • 用于需要 HID 自动回连的特定使用场景的产品,一般类型产品无需配置。
  • 使用 HID 相关功能必选在 CMD-0x01 获取 MCU 信息中上传 TLD 字段,以使能 SMP 功能模组。否则,模组将拒绝该指令。
  • RSSI 受环境干扰会有一定波动,在使用 RSSI 做阈值判断时需多取几个,以提高准确性。

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。

      • 示例:请求开始获取 HID 配对连接下的 RSSI,数量 10 包,间隔 200ms。
      • MCU > 模组: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_rawstatus 非 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 配对已连接且校验通过

设置蓝牙广播名称(CMD-0xBB)

仅允许处于未绑定状态时设置,其他状态模组将拒绝。

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:拒绝

修改蓝牙发射功率(CMD-0xBD)

  • 如果固件默认发射功率不能满足您的产品功能需求,可通过该接口调整发射功率。
  • 关于发射功率的配置值,请联系涂鸦技术支持人员确定。

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

  • OP0x00 时,该字段仅占位作用,无实际意义。

  • OP0x01 时,发射功率寄存器配置,请联系涂鸦技术支持人员获取。

模组回复

序号 字节数 字段 说明
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

  • OP0x00 时,Value 值表示 TX_POWER
  • OP 为其他,Value 值表示设置结果,0x00 表示成功,其他表示失败。

MCU 查询模组 MAC 地址(CMD-0xBE)

若 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

常见问题

Q:蓝牙广播使能(CMD-0xA3)和触发配网(CMD-0xBC)有何区别?

A

  • 蓝牙广播使能(0xA3)用于控制蓝牙模组的广播开关,所有广播相关的功能都依赖于此使能状态,可以理解为蓝牙广播的总开关。
  • 触发配网(0xBC)则是集成了蓝牙模组广播开关逻辑的高级功能,侧重于配网窗口的控制,是蓝牙广播使能的一个具体应用。

参考文档

更多信息,请参考 蓝牙通用串口协议

如果在开发过程遇到问题,您可以登录 TuyaOS 开发者论坛 TuyaOS-蓝牙设备开发 版块进行沟通咨询。

咨询前,建议首先查阅 官方资料 或参考已有帖子,并认真阅读 发帖规范