简体中文
简体中文
English
联系我们
注册
登录

蓝牙 Mesh 通用串口协议

更新时间:2022-02-16 03:32:16下载pdf

涂鸦蓝牙 Mesh 串口通用协议为涂鸦定制的蓝牙 Mesh 模组串口通用协议,主要用于涂鸦蓝牙 Mesh 模组与其它 MCU 串口直连做串口通信。涂鸦蓝牙 Mesh 串口通用协议适用于下图中的通讯方案架构。

蓝牙 Mesh 通用串口协议

串口通讯约定

名词 说明
波特率(bit/s) 9600/19200/115200 自适应波特率
数据位 8
奇偶校验
停止位 1
数据流控

名词解释

名词 说明
DP 一个 DP(Data Point) 指的是一个功能点或者一条/一对指令码。
PID 您在涂鸦 IoT 工作台创建的每一个产品都会产生一个唯一的产品编号,即 PID(Product ID)。PID 关联了产品具体的功能点、App 控制面板、出货信息等所有跟这个产品相关的信息。PID 相当于产品的身份证。
Mesh 点播 点对点通信,也就是两个设备之间的通信,不允许第三个设备收到信息。
Mesh 组播 把网络中的节点分组,一个节点发出的信息,只有相同组号的组员才能收到。
Mesh 广播 一个设备上发出的信息所有设备都能接收到。
节点地址 同一个蓝牙 Mesh 网络,每个节点都有一个唯一的地址,可以理解为每个设备的门牌号。取值范围:0x0001~0x5FFF
组地址 同一个蓝牙 Mesh 网络的每个节点可以被同时划分到不同组内,每个组都有一个唯一的地址,可以理解为几幢几单元哪个小区。取值范围:0xC000~0xFEFF
广播地址 同一个蓝牙 Mesh 网络,广播命令可以被所有节点收到,广播命令需要填写的目的地址为广播地址,取值范围:0xFFFF

帧格式说明

字段 长度(byte) 说明
帧头 2 固定为0x55aa
版本 1 升级扩展用
命令字 1 具体帧类型
数据长度 2 大端
数据 N 实体数据
校验和 1 从帧头开始按字节求和得出的结果对256求余

所有大于 1 个字节的数据均采用大端模式传输。

DP 格式说明

数据段 长度(字节) 说明
dpid 1 功能点序号
type 1 对应平台上某功能点具体的数据类型,通过如下“表示值”标识
类型 表示值 长度(字节) 说明
raw 0x00 N 对应于raw型datapoint
bool 0x01 1 value范围:0x00/0x01
value 0x02 4 对应int类型,大端表示
string 0x03 N 对应于具体字符串
enum 0x04 1 枚举类型,范围0-255
bitmap 0x05 1/2/4 长度大于1字节时,大端表示
len 2 长度对应value的字节数
value 1/2/4/N hex表示,大于1字节采用大端传输

BLE Mesh 适合传输短数据,例如开关、亮度、色温等 value、bool、enum、bitmap 类型的 DP 数据。BLE Mesh 不适合传输长数据。例如 len 大于 4 字节的 raw 或者 string 类型的 DP 数据。len 越长,意味着在蓝牙 Mesh 网络中传输需要更多的分包、更长的时间、更低的成功率。如果必须要传输长数据 len 不建议超过 40 字节。

通用对接协议

心跳包(CMD-0x00)

  • 模组上电后,以 300 ms 的间隔定期发送心跳。收到 MCU 的心跳包回应后,模组会认为 MCU 正常工作。在 MCU 首次(上电或重启)回复心跳包后,模组会向 MCU 查询产品信息。

  • MCU 侧也可依据此心跳定期检测模组是否正常工作。若模组无心跳下发,则 MCU 可通过模组提供的硬件复位引脚复位模组。

  • 模组在获取 MCU 信息之后,正常功耗模式下以 10s 的间隔定期发送心跳。

  • 模组在低功耗模式下,BLE Mesh 设备添加到 Mesh 网络后,无心跳。每次蓝牙 Mesh 模块重启,仅向 MCU 返回当前配网状态信息。

    BLE Mesh 模组在低功耗下无心跳,因此也无法检测 MCU 是否发生重启。

模组发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x00
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

MCU 返回

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x00
4
5
2 数据长度 0x00
0x01
6 1 Status 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
Status 返回值 说明
0x00 仅 MCU 上电后第一次收到模组心跳包后的返回值,模组端也可依据这一点判断工作过程中 MCU 是否重启。
0x01 除 MCU 重启后第一次返回 0x00 外,其余均返回 0x01。

获取 MCU 信息(CMD-0x01)

  • Product key:固定为 8 字节,由涂鸦云开发者平台生成,用于云端记录产品相关信息。
  • 产品信息主要是 PID 信息。

模组发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x01
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

MCU 返回

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x01
4
5
2 数据长度 0x00
0x0d
6~18 0x0d Data 见下表
19 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
  • Data 格式:

    1~8 9~13
    PID 保留字段,填充的是 MCU 软件版本号,但模组目前不对该字段做解析,字段保留。
  • 示例:55 AA 00 01 00 0D 66 74 62 38 78 32 78 30 31 2E 30 2E 30 C0 (pid=ftb8x2x0,mcu ver=1.0.0)

发送模组工作状态(CMD-0x03)

  • 模组工作状态:0x00-未绑定;0x02-已绑定。
  • 当模组收到 MCU 请求模组工作模式并且回复 CMD 0x02 后,则会向 MCU 下发模组工作状态。
  • 当模组检测到模组状态发生变化,则主动下发模组的工作状态至 MCU。

模组发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x03
4
5
2 数据长度 0x00
0x01
6 1 Status 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
Status 工作状态说明 备注
0x00 未绑定 可以用手机搜索添加该设备,处于未被APP绑定的状态
0x02 已绑定 处于已经被APP绑定的状态

设备上电后,与 MCU 的主要交互流程如下:

蓝牙 Mesh 通用串口协议

重置模组(CMD-0x04)

将蓝牙模组从当前蓝牙 Mesh 网络移出,解除蓝牙绑定关系,模组变为未绑定状态。

MCU 发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x04
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

示例:55 aa 00 04 00 00 03

模组回复

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x04
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

示例:55 AA 00 04 00 00 03

命令下发(CMD-0x06)

  • 功能点信息参考概述中 DP 格式说明部分
  • 命令下发 只会包含单条功能点命令数据单元
  • 命令下发 为异步处理协议,对应于 MCU 的 DP 状态上报(即当下发关灯 DP 时,MCU 通过 07 命令回复灯状态为关)。

模组发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x06
4
5
2 数据长度Len Len高8位
Len低8位
6~6+Len-1 Len datapoint 见下表
6+Len 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
  • datapoint 格式:(只包含单条 DP 数据)

    1 2 3~4 5~
    dp1_id dp1_type dp1_len dp1_data
  • 示例:55 aa 00 06 00 05 03 01 00 01 01 10,表示 MCU 下发的信息是:

    内容 对应字段 字段取值
    03 dp1_id 3
    01 dp1_type bool
    00 01 dp1_len 1 byte
    01 dp1_data true

MCU 返回

状态上报(CMD-0x07)

  • 功能点参考 DP格式说明章节
  • 状态上报可含多个功能点命令数据单元
  • 状态上报为异步处理协议,状态上报 触发机制有三类:
    • MCU 收到命令下发处理帧时,正确执行相应功能点命令,再通过状态上报 帧将变化后的功能点状态发送至模组。
    • MCU 主动检测到功能点存在变化,将变化后的功能点状态发送至模组。
    • MCU 收到状态查询帧时,将所有的功能点状态发送至模组。

MCU 发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x07
4
5
2 数据长度Len Len高8位
Len低8位
6~6+Len-1 Len datapoint 见下表
6+Len 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
  • datapoint格式:(和下发不同,上报的 datapoint 可以包包含 多 个 dp 数据)

    1 2 3~4 5~ n n+1 n+2~n+3 n+4 ~
    dp_id dp_type dp_len dp_data dpN_id dpN_type dpN_len dpN_data
  • 示例:55 aa 00 07 00 05 03 01 00 01 01 11

模组返回

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x07
4
5
2 数据长度 0x00
0x01
6 1 Status 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
Status 返回值 说明
0x00 成功
0x01 失败

状态查询(CMD-0x08)

  • 状态查询为异步处理协议,主要用于模组查询 MCU 所有的可上报的功能点状态。当 MCU 收到此帧时,通过 CMD 0x07 状态上报帧上报功能点状态。
  • 状态查询发送时机主要有两种:
    • 模组绑定接状态下,检查到 MCU 发生重启(通过心跳 回复判断),查询发送。
    • 在 APP 中打开对应设备的控制面板时,会触发查询。

模组发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x08
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

示例:55 aa 00 08 00 00 07

MCU 返回

产测相关接口

RF 射频测试(CMD-0x0E)

  • 为了检测出厂后蓝牙模组的射频是否正常工作,需要测试模组的 RSSI 信号强度。

  • 测试工具:通过蓝牙信标(涂鸦提供)发射名称为ty_mdev的广播信号。

  • 测试步骤:首先将信标放在距离模组较近(0.5 米左右)的位置。然后通过串口发送该 RF 射频测试指令,模组会搜索蓝牙信标并返回信号强度值,一般信号强度大于 -70db 认为模组射频工作正常。

    注意:模组需要保持非低功耗模式,且模组处于非绑定状态。此外,一旦设备被配网且保持上电 15 分钟,设备会永久关闭产测入口。

MCU 发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x0E
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

模组回复

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0x0E
4
5
2 数据长度Len Len高8位
Len低8位
6~6+Len-1 Len Data 见下表
6+Len 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

Data 格式

Data 说明
{“ret”:true,“rssi”:“-55”} 信号强度为-55db
{“ret”:false} 没有搜索到该信号

低功耗功能附加协议

使能低功耗功能(CMD-0xE5)

  • 低功耗实现原理:MCU 通过三极管/MOS 管控制给蓝牙模块上电断电实现低功耗,同时设置进入低功耗模式后,设备上电会减少不必要的指令交互,快速完成初始化,以减少每次唤醒时间,流程参考下图:

    蓝牙 Mesh 通用串口协议

  • 对电路设计的要求

    蓝牙 Mesh 通用串口协议

  • MCU 上报数据注意点:每次唤醒根据上报 DP 的长度来决定保持上电时长:(dp.len+3)/4*400ms

MCU 发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xE5
4
5
2 数据长度 0x00
0x01
6 1 Data 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

Data 格式

Data 说明
0x00 关闭低功耗功能
0x01 打开低功耗功能

模组回复

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xE5
4
5
2 数据长度 0x00
0x01
6 1 Status 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
Status返回值 说明
0x00 设置成功
其他 设置失败

Mesh 特有协议

Mesh 互传使能(CMD-0xB1)

  • App 限制:V3.20 及以上。 仅 V3.20 及以上版本的 App 支持此功能。

  • MCU 在使用 CMD-0XB1 指令始能模组的互传功能后,模组会从云端申请 8 个发布消息的地址 (pub_address) 存储在模块中,与此同时快速配网失效(快速配网能达到平均 3~5 秒添加一个设备,非快速配网需要 10 秒左右添加一个设备)。

  • 使用 8 个 pub_address 实现设备与设备之间的本地联动的方法如下:

    蓝牙 Mesh 通用串口协议

    如左图所示,遥控器的主页面,点击配置群组 A 打开右边的群组管理页面,将灯加入或移除群组 A。

    群组 A 的地址即 8 个 pub_address 中的一个。

    在 App 上建立本地联动的步骤:

    1. App 从云端获取群组 A 对应的 pub_address。
    2. APP 从云端获取已经在群组 A 中的设备列表,以及可支持加入到群组 A 的设备列表。
    3. 用户点击设备,App 向选中设备发送添加或移除群组 A 的命令,完成关联或解除关联。

    本地联动实施策略是:

    1. 按动遥控器的开关按钮。
    2. 遥控器利用互传命令,将目的地址写为对应的 pub_address,发送灯泡的开关功能点。
    3. 属于对应群组(群组地址 = pub_address)的灯泡,收到遥控器发来的控制命令,进行开关切换。

MCU 发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xB1
4
5
2 数据长度 0x00
0x01
6 1 Data 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

Data 格式

Data 说明
0x00 关闭本地互传
0x01 使能本地互传

模组回复

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xB1
4
5
2 数据长度 0x00
0x01
6 1 Status 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
Status返回值 说明
0x00 设置成功
其他 设置失败

Mesh 互传(CMD-0xB2)

  • 蓝牙 Mesh 的核心功能是节点与节点互相通信,以实现本地应用的联动。

  • 能充分发挥该命令价值的前提是发送方提前获取接收方的地址,支持一下四种方法:

    • 方法一:发送方在被绑定添加时,单独给其分配 8 个发布消息的地址 (pub_address) ,将被控对象按需分配到这 8 个群组中(如:带有 8 个分组功能的遥控器)。
    • 方法二:发送的命令为广播命令,目的地址填写:0xFFFF。
    • 方法三:发送方读取自身所在群组的地址,将该地址作为目的地址,可以实现同一组内的设备联动(如:停车场感应灯,一个灯感应触发一排灯响应)。
    • 方法四:借助 App 的控制面板,通过 DP 将被控对象目的地址传给发送方。
  • 注意事项:

MCU 发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xB2
4
5
2 数据长度 Len高8位
Len低8位
6 N Data 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

Data 格式

Data 序号 长度 字段 说明
0
1
2 目的地址 大端表示
可以填写节点地址、组地址或者广播地址(0xFFFF)
2~N N-1 DPs 数据 DPs 格式参考状态上报(CMD-0x07)datapoint 格式

获取 8 个 PUB_ADDRESS(CMD-0xB3)

MCU 获取存储在 Mesh 模块中的 8 个发布消息的地址 pub_address

MCU 发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xB3
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

模组回复

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xB3
4
5
2 数据长度Len Len高8位
Len低8位
6~6+Len-1 Len Data 见下表
6+Len 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

Data 格式

Data 序号 长度 字段 说明
1 1 adr_num 获取 pub_address 的数量
- 0:没有任何 pub_address
- 8 :存在 8 个 pub_address
当 adr_num 为 8 时,后面还有 16 字节的 8 个 pub_address,格式为:adr1 adr2 … adr8(每个群组地址为 2 个字节)
2~17 16 pub_address adr1 adr2 … adr8(每个群组地址为 2 个字节,大端)

获取自身所属群组(CMD-0xB4)

支持查询所属群组。常用于停车场雷达灯商业照明方案。例如,将每排灯分别加入同一个群组,一排灯中任何一个感应到车辆,向全组发送开灯指令。

MCU 发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xB4
4
5
2 数据长度 0x00
0x00
6 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

模组回复

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xB4
4
5
2 数据长度Len Len高8位
Len低8位
6~6+Len-1 Len Data 见下表
6+Len 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

Data 格式

Data 序号 长度 字段 说明
1 1 adr_num 获取群组地址的数量
-0:不属于任何群组
- 8 :可能属于 8 个群组

当 adr_num 为 8 时,后面还有 16 字节的 8 个群组地址,格式为:adr1 adr2 … adr8(每个群组地址为 2 个字节)
注意:当 adr == 0 时,表示该地址无效。
2~17 16 pub_address adr1 adr2 … adr8(每个群组地址为 2 个字节,大端)

本地对码(CMD-0xB5)

涂鸦体系的遥控器产品与被控设备之间的对码方式有两种:

  • 线上对码(参考 CMD-B1)
  • 线下对码

线上和线下的区别是:对码的时候是否要借助手机 App。

涂鸦体系遥控与被控设备的 线下对码一般操作方式为:

  • 通过按键长按/上下电等外部事件触发,让被控设备进入待对码状态(CMD-0xB6)
  • 通过长按/组合按键等外部事件触发,让遥控器开始发送对码指令(CMD-0xB5)
  • 被对码成功的设备会闪烁指示灯进行提示对码成功
  • 对码成功后:遥控器设备可以向 pub_address 地址发布消息/命令(利用 CMD-0xB2 );被对码设备(如灯),可以接收到发送到 pub_address 地址的消息。(如果希望 MCU + 蓝牙通用对接设备作为被对码设备,请参考 CMD-0xB6)

MCU 发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xB5
4
5
2 数据长度 Len高8位
Len低8位
6 Len Data 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

Data 格式

字段 取值 说明
data[0] 0x00
0x01
unpair
pair
data[1] address type 0x00:目的地址采用 pub_address 偏移的方式,data[2] 填写 offset,该命令会让目标设备订阅/绑定 pub_address[offset] 地址
0x01:目的地址为实际地址,data[2~3] 填写实际目的地址(大端表示),该命令会让目标设备订阅所传的地址

模组回复

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xB5
4
5
2 数据长度 0x00
0x01
6 1 Status 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
Status返回值 说明
0x00 成功
其他 失败

开启本地对码时间窗(CMD-0xB6)

使用 CMD-0xB5 命令时,设备作为遥控器身份来使用,可以对其他设备对码和控制;使用 CMD-0xB6 命令时,设备作为被对码设备,可以被其他遥控器对码并被控制。(一般情况一个设备不会既做遥控器,又做被对码设备,当然不排除特殊需求,这种双重身份也是支持的)

由于对码时间窗一般不会一直开启,因此增加 CMD-0xB6 来启动开启对码时间窗,并可以设置该时间窗的时间长短。这样可以让其他遥控器只有在该时间窗内才能与设备对码。例如:

  • 球泡灯:每次重新上电,开启对码时间窗 10S
  • 排插:每次长按子插按钮,开启该子插的对码时间窗 10S

MCU 发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xB6
4
5
2 数据长度 0x00
0x01
6 1 Data 时间窗的值,单位是秒,1 字节
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

模组回复

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xB6
4
5
2 数据长度 0x00
0x01
6 1 Status 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
Status返回值 说明
0x00 成功
0x01 失败
0x02 超时关闭
0x03 被对码

喜好收藏功能设置(CMD-0xB7)

喜好收藏功能设置,是遥控器设备对支持喜好收藏功能的被控设备(如涂鸦公版球泡灯)来使用的命令。当被控设备收到喜好收藏命令时,会记录当前设备状态;当被控设备收到喜好执行命令时,会提取喜好收藏,并进行加载执行。(默认最多支持 4 组收藏)

常见的应用场景是:将所智能家具中的一组设备,分别调节到目标状态,然后执行收藏操作,之后如果想要一键恢复之前收藏的状态,可以实施喜好执行命令。

MCU 发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xB7
4
5
2 数据长度 Len高8位
Len低8位
6 Len Data 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

Data 格式

字段 取值 说明
data[0] 0x01
0x02
喜好收藏
喜好执行
data[1] 收藏 ID (0x00~0x03) 总共支持 4 组喜好,编号分别是:0,1,2,3
data[2] address type 0x00:目的地址采用 pub_address 偏移的方式,data[3] 填写 offset,该命令会让目标设备订阅/绑定 pub_address[offset] 地址
0x01:目的地址为实际地址,data[3~4] 填写实际目的地址(大端表示)

模组回复

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xB7
4
5
2 数据长度 0x00
0x01
6 1 Status 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
Status返回值 说明
0x00 成功
其他 失败

喜好收藏功能被设置通知(CMD-0xB8)

模组发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xB8
4
5
2 数据长度 0x00
0x02
6 2 Data 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

Data 格式

字段 取值 说明
data[0] 0x01
0x02
喜好收藏
喜好执行
data[1] id (0x00~0x03) 总共支持 4 组喜好,编号分别是:0,1,2,3

MCU 回复

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xB8
4
5
2 数据长度 0x00
0x01
6 1 Status 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
Status返回值 说明
0x00 成功
其他 失败

SIG MODEL 透传-发送(CMD-0xBC)

命令(CMD-0xBC, CMD-0xBD, CMD-0xBE, CMD-0xBF)属于特高级命令,一般应用场景不会用到,尝试使用这些命令的前提是充分理解 Mesh 的数据模型以及涂鸦体系产品的数据模型。

该命令可以直接让 MCU + 蓝牙向目标地址发送标准 MESH MODEL 数据,例如:使用 MCU + 蓝牙做的遥控器,去控制涂鸦公版灯的开关(需要合成发送标准的 onoff model)、亮度、颜色 …

涂鸦内部使用的标准 model 命令

model 适用
Generic OnOff Model 照明产品的开关、电工产品的开关
Light Lightness Model 照明亮度
Light CTL Temperature Model 照明色温
Light HSL Model 彩光(DP 是 HSV 颜色模型,传输采用 HSL 颜色模型,传到 MCU 是 HSV 颜色模型)

MCU 发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xBC
4
5
2 数据长度 Len高8位
Len低8位
6 Len Data 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

Data 格式

字段 取值 说明
data[0~1] dst_address, 2 字节 大端表示 命令的目的地址
data[2~3] opcode, 2 字节 大端表示
data[4] is_rsp (0 = no; 1 = is rsp) 该命令是否是回复命令
data[5] cmd_params_len 该命令中的参数部分长度
data[6~n] cmd_params 该命令的参数

模块回复

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xBC
4
5
2 数据长度 0x00
0x01
6 1 Status 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
Status返回值 说明
0x00 成功
其他 失败

SIG MODEL 透传-接收(CMD-0xBD)

命令(CMD-0xBC, CMD-0xBD, CMD-0xBE, CMD-0xBF)属于特高级命令,一般应用场景不会用到,尝试使用这些命令的前提是充分理解 Mesh 的数据模型以及涂鸦体系产品的数据模型。

该命令可以让 MCU + 蓝牙接收遥控器发来的标准 MESH MODEL 数据,例如:使用 MCU + 蓝牙做的灯,想要被涂鸦公版遥控器控制(公版遥控器部分命令采用标准 MESH MODEL 发数据)

模组发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xBD
4
5
2 数据长度 Len高8位
Len低8位
6 Len Data 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

Data 格式

字段 取值 说明
data[0~1] src_address, 2 字节 大端表示 命令的源地址
data[2~3] dst_address, 2 字节 大端表示 命令的目的地址
data[4~5] opcode, 2 字节 大端表示
data[6] is_ack (0 = no; 1 = need ack) 该命令是否需要回复
data[7] cmd_params_len 该命令中的参数部分长度
data[8~n] cmd_params 该命令的参数

MCU 回复

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xBD
4
5
2 数据长度 0x00
0x01
6 1 Status 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
Status返回值 说明
0x00 成功
其他 失败

VENDOR 透传-发送(CMD-0xBE)

命令(CMD-0xBC, CMD-0xBD, CMD-0xBE, CMD-0xBF)属于特高级命令,一般应用场景不会用到,尝试使用这些命令的前提是充分理解 Mesh 的数据模型以及涂鸦体系产品的数据模型。

该命令可以直接让 MCU + 蓝牙向目标地址发送标准 VENDOR MESH 数据,例如:使用 MCU + 蓝牙做的遥控器,去控制涂鸦公版灯的场景切换(需要合借助 VENDOR 通道,发送公版遥控器协议指令) …

MCU 发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xBE
4
5
2 数据长度 Len高8位
Len低8位
6 Len Data 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

Data 格式

字段 取值 说明
data[0~1] dst_address, 2 字节 大端表示 命令的目的地址
data[2] is_rsp (0 = no; 1 = is rsp) 该命令是否是回复命令
data[3] cmd_params_len 该命令中的参数部分长度
data[4~n] cmd_params 该命令的参数

模块回复

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xBE
4
5
2 数据长度 0x00
0x01
6 1 Status 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
Status返回值 说明
0x00 成功
其他 失败

VENDOR 透传-接收(CMD-0xBF)

命令(CMD-0xBC, CMD-0xBD, CMD-0xBE, CMD-0xBF)属于特高级命令,一般应用场景不会用到,尝试使用这些命令的前提是充分理解 Mesh 的数据模型以及涂鸦体系产品的数据模型。

该命令可以让 MCU + 蓝牙接收遥控器发来的标准 VENDOR MODEL 数据,例如:使用 MCU + 蓝牙做的灯,想要被涂鸦公版遥控器控制(公版遥控器部分命令采用 VENDOR MODEL 发数据)

模组发送

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xBF
4
5
2 数据长度 Len高8位
Len低8位
6 Len Data 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余

Data 格式

字段 取值 说明
data[0~1] src_address, 2 字节 大端表示 命令的源地址
data[2~3] dst_address, 2 字节 大端表示 命令的目的地址
data[4] is_ack (0 = no; 1 = need ack) 该命令是否需要回复
data[5] cmd_params_len 该命令中的参数部分长度
data[6~n] cmd_params 该命令的参数

MCU 回复

序号 长度(字节) 字段 说明
0
1
2 帧头 0x55
0xAA
2 1 版本号 0x00
3 1 命令字 CMD 0xBF
4
5
2 数据长度 0x00
0x01
6 1 Status 见下表
7 1 CRC8 从帧头开始按字节求和得出的结果对 256 求余
Status返回值 说明
0x00 成功
其他 失败

协议版本

版本 主要变更 变更日期 说明
0.1.0 协议初版 20190625 初稿
0.2.0 协议修订 201907 增加一个get或set回复的逻辑
0.3.0 协议修订 20190719 更改返回状态: 0:状态1-未绑定 2:状态3:已经绑定
0.6.0 协议修订 20190814 产测支持PCB产测
0.7 协议修订 20200311 1. 支持mesh2mesh节点之间传输命令
2. 模块增加RSSI测试
3. 整机增加RSSI测试
0.8 协议修订 20200325 1. 群组下发不用回
2. 快速配网
0.9 协议修订 202005 1. 解决产测授权信息被误抹除的问题
2. 支持申请pub地址
1.1.0 协议修订 20200602 1. 自适应波特率支持9600/115200
2. 支持查询属于哪个群组的功能
2.0 协议新增 20210521 1. 增加 Mesh 特性功能:本地对码、喜好设置
2.1 协议新增 20210927 1. 增加 Mesh SIG MODEL 和 VENDOR MODEL 透传收发