MCU 对接协议

更新时间:2023-07-14 08:22:08下载pdf

涂鸦系列 Wi-Fi 门锁串口通用协议为涂鸦定制的 Wi-Fi 模组串口通用协议,主要用于涂鸦 Wi-Fi 模组与其它门锁 MCU 串口直连做串口通信,其架构框图如下图所示。其他方案如需要其他IO引脚的(如保活方案),详见各系列方案的硬件设计指导书。

MCU 对接协议

本文档已停止更新,文中内容仅供参考。有关更准确的内容,请参考 MCU 通用对接协议

名词解释

名词 说明
DP 即设备功能(Data Point),代表一条或一对指令码。更多详情,请参考 产品功能
PID 即产品 ID(Product ID),描述一类产品功能(DP)的集合。在 涂鸦 IoT 平台 创建
的每一个产品都会产生一个唯一的产品编号,关联了产品具体的设备功能、App 控制
面板、出货信息等所有跟这个产品相关的信息。
设备绑定 通过涂鸦App将设备配网激活成功。
设备解绑 指设备解除与 App 账号的绑定关系。
设备重置 指在 App 上操作解绑并清除数据。
蓝牙双模配网 适用于Wi-Fi & BLE Combo模组方案,其过程分为两个阶段:蓝牙配网 + 设备激活上网。
蓝牙配网:核心是APP将用于配网的信息(ssid+pwd+token)通过BLE加密传给设备;
设备上网:设备解密完配网信息后,由设备的 Wi-Fi 模块连接上对应的路由器完成联网,
并取收到的 token 向服务端注册并登陆 MQTT 服务器,完成上网流程。

串口通讯约定

  • 波特率:9600 / 115200
  • 数据位:8
  • 奇偶校验:无
  • 停止位:1
  • 数据流控:无
  • Wi-Fi模组首次上电使用时,会启动波特率轮询。每个周期切换一次波特率发送查询产品信息0x01指令,若收到MCU回复,则判断为通讯波特率,停止轮询并写配置(包含:波特率、pid等产品信息参数)保存到 Flash。下一次模组重新上电或重启时,就不会再重新查询产品信息。
  • Wi-Fi模组被重置后,会清除当前记忆信息,重新查询。

帧格式说明

字段 字节数 说明
帧头 2 固定为0x55AA
版本 1 升级扩展用
命令字 1 具体帧类型
数据长度Len 2 Len高8位
Len低8位
数据 N -
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

说明:

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

  • 版本:版本用于拓展功能使用,为兼容新老版本协议(历史版本上出现过0x00/0x03),模组暂不校验该字段

  • 重传:一般情况下,采用同命令字一发一收同步机制,即一方发出命令,另一方应答。若发送方超时未收到正确的响应包,则超时传输,Wi-Fi模组主动发起的通信发送包超时时间为 500ms,重传次数为 3 次。如下图所示:

    MCU 对接协议

串口缓冲区大小

芯片平台 接收缓冲区大小 发送缓冲区大小 备注
esp8266 256 字节 256 字节 固定大小,后续不会增加和迭代
其他 最小为 1024 字节 最小为 1024 字节 若固件版本支持文件传输类功能,则缓冲区大小最大值参考文件传输时单包文件数据的最大长度。

说明:MCU 完整数据帧大小(即从帧头开始计算到校验和结束计算)不可超出模组接收缓冲区大小值,否则会出现数据通信异常情况。

DP格式(状态数据单元)

使用涂鸦Wi-Fi系列化门锁方案开发时,dp_data_len 的长度为 2 个字节。其他 DP 格式信息,请参考下表:

字段 字节数 说明
dp_id 1 DP 的指令码
dp_type 1 DP 的数据类型
dp_data_len 2 DP 的数据长度
dp_data_value dp_data_len DP 的数据内容(具体详见dp协议详解)

系列方案协议支持汇总

表格色块说明:通用指令保活方案指令拓展功能传图/音视频指令其他高级能力

协议分类 指令名称 命令字 非保活基础版
WBR1/3
非保活音视频版
WBRU/7252/7916
保活音视频
WBRL
可视对讲
T31门锁
通用基础 查询产品信息 0x01 支持 支持 支持 支持
报告设备联网状态 0x02 支持 支持 支持 支持
重置 Wi-Fi 0x03 支持 支持 支持 支持
重置 Wi-Fi-可选配网模式 0x04 支持 支持 不支持 不支持
模组重置状态通知 0x25 支持 支持 支持 支持
获取本地时间 0x06 支持 支持 支持 支持
获取格林时间 0x10 支持 支持 支持 支持
实时状态上报 0x05 支持 支持 支持 支持
记录型数据上报 0x08 支持 支持 支持 支持
模组DP命令下发 0x09 支持 支持 支持 支持
获取DP缓存命令 0x15 支持 支持 支持 不支持
MCU OTA升级 自动升级 0x21 支持 支持 支持 支持
升级启动 0x0D 支持 支持 支持 支持
升级数据传输 0x0E 支持 支持 支持 支持
门锁密码服务 密码进制设置 0x1C 支持 支持 支持 支持
请求云端临时密码 0x14 支持 支持 不支持 不支持
离线密码 0x16 支持 支持 支持 支持
保活方案特有协议 获取设备联网状态 0x1A 不支持 不支持 支持 支持
时间同步-综合时间 0x1B 不支持 不支持 支持 支持
请求云端临时密码-DP格式 0x1D 不支持 不支持 支持 支持
深度休眠时间参数 0x80 不支持 不支持 支持 支持
驱屏时间控制 0x83 不支持 不支持 不支持 支持
上电配网使能控制 0x84 不支持 不支持 不支持 支持
模组拓展服务 查询当前连接路由信号强度 0x0B 支持 支持 支持 支持
上报 MCU 的 SN 编号 0x17 支持 支持 支持 支持
MCU断电通知 0x22 支持 支持 不支持 不支持
恢复出厂设置 0x340A 不支持 支持 不支持 不支持
模组调试协议 0xDB 支持 支持 支持 支持
功能性产测服务 基础类产测方案 0x07 支持 支持 支持 支持
音视频类产测方案 0xF0 支持 支持 支持 支持
传图/音视频功能 触发抓拍命令 0x64 支持 支持 支持 支持
抓拍结果通知 0x62 支持 支持 支持 支持
串口传图-数据上传 0x61 不支持 支持 支持 不支持
串口传图-状态获取 0x63 不支持 支持 支持 不支持
单芯片解决方案
相关功能
寄存器参数配置 0x66 不支持 部分支持(7252) 不支持 不支持
通用参数配置 0x65 不支持 部分支持(7252) 不支持 不支持
通用参数配置 0x66 不支持 部分支持(7916) 不支持 不支持
本地拉流 0xD2 不支持 部分支持(7916) 不支持 不支持
双模蓝牙相关功能 报告蓝牙连接状态 0x3504 支持(门禁) 支持(门禁) 不支持 不支持
获取蓝牙连接状态 0x3505 支持(门禁) 支持(门禁) 不支持 不支持
关闭蓝牙通能功能 0x3506 支持(门禁) 支持(门禁) 不支持 不支持
BLE+X相关功能 查询模组信息 0xD000 不支持 部分支持(WBRU) 不支持 不支持
授权信息同步 0xD001 不支持 部分支持(WBRU) 不支持 不支持
激活信息同步 0xD002 不支持 部分支持(WBRU) 不支持 不支持
共享秘钥协商 0xD003 不支持 部分支持(WBRU) 不支持 不支持
数据透传功能
(门锁-模组-猫眼)
锁控查询模组信息 0xD100 不支持 部分支持(WBRU) 支持 支持

通用基础协议

查询产品信息 0x01

模组发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x01
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

MCU返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x01
数据长度 2 N
数据 N 产品信息,详见下文说明
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

产品信息字段说明,{“p”:”vHXEcqntLpkAlOsy”,“v”:”1.0.0”,”n”:0,”cap”:11}。其中p、v为必选字段,其他按设备能力按需选择,说明如下:

字段 说明
p 表示产品 ID 为vHXEcqntLpkAIOsy,即您在涂鸦 IoT 开发平台上创建的产品的 PID。
v 表示 MCU 固件版本号为 1.0.0,MCU 版本号格式采用点分十进制形式,格式为 x.x.x
其中 x 为十进制数,取值范围为 0-99
n(可选) 表示选择模组的配网模式,快连配网(Smartconfig/EZ)和热点联网(AP):
0:表示两种配网模式互相切换,每次重置复位后切换到另一种配网模式
1:表示仅支持热点AP配网模式,这种模式下产品只能通过热点联网连接的方式进行设备配网
2:表示两种配网模式同时存在,共存
cap(可选) 表示设备能力,采用bit位方式,”cap”:xx值为bit值换算后10进制字符串,具体如下定义:
bit0:表示设备是否支持拍照/音视频功能
 0:不支持
 1:支持
bit1:表示设备采用哪种通信方式上传图片(仅在bit0为 1 时有效
 0:串口
 1:SPI
bit2:表示设备是否为运营商门锁(不支持此功能,默认0 
 0:不支持
 1:支持
bit3:表示是否需要模组重置状态通知
 0:不需要
 1:需要
bit4:表示是否支持自动升级(需支持对应协议,详见0x21指令)
 0:不支持
 1:支持
bit5:表示深度休眠逻辑与功能实现端为模组还是MCU(仅保活门锁方案有效
 0:模组端实现
 1:MCU端实现
bit6:表示是否支持ble+x复合模式
 0:不支持,单Wi-Fi模式
 1:支持,Wi-Fi做插件模式
bit7:表示pir功能实现端(模组 / MCU),仅T31可视对讲方案有效
 0:模组端实现
 1:MCU端实现
bit8:表示屏幕休眠时间控制方式,仅T31可视对讲方案有效
 0:通过引脚中断控制
 1:通过串口指令控制
bit9:表示上电是否默认进入配网模式,仅T31可视对讲方案有效
 0:默认进入可配网模式
 1:MCU使能控制,使能指令详见0x84

示例:

  • 55 aa 00 01 00 00 00,模组查询产品信息;
  • 55 aa 00 01 xx xx {“p”:”vHXEcqntLpkAlOsy”,“v”:”1.0.0”,”n”:0,”cap”:11} xx,MCU回复产品信息。

报告设备联网状态 0x02

设备联网状态 描述 状态值
状态1 smartconfig/EZ 配网状态 0x00
状态2 AP 配网状态 0x01
状态3 Wi-Fi 已配置但未连上路由器 0x02
状态4 Wi-Fi 已配置且连上路由器 0x03
状态5 已连上路由器且连接到云端 0x04
状态6 Wi-Fi 设备处于低功耗模式 0x05
状态7 二维码扫描识别成功(需支持二维码配网) 0x06
状态8 Wi-Fi 设备初始化完成 (表示可正常接收串口指令) 0x07
状态9 smartconfig 和 AP热点 共存配网状态 0x08
  • 当模组的Wi-Fi状态发生变化时,会主动下发Wi-Fi状态 至MCU。
  • 状态包用于MCU设备得知模组目前的状态,MCU可基于不同的状态做相关的操作,如配网指引。
  • 我们推荐用户支持AP配网,配网成功率高;EZ配网方式存在少部分路由兼容性问题,并且涂鸦会逐渐的下架掉对EZ配网的支持。
  • 在未配网前,模组上电默认处于低功耗状态。需要MCU主动发 重置Wi-Fi 指令后,模组才会进入待配网状态。
  • 手机移除设备后,模组进入低功耗状态,需要MCU主动发 重置Wi-Fi 指令后,模组才会进入待配网状态。
  • Wi-Fi模组进入配网模式后,如果在 10S 内未连接路由并且模组断电了,下次模组上电后依旧保持上一次的配网状态。同样的,进入配网模式后,3分钟内未操作自动进入低功耗模式。

注意:MCU在收到已连接路由器且连接到云端的状态0x04之后,禁止立即给模组断电!需延时至少 3s 后断电,否则可能导致模组无法正常工作。

模组发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x02
数据长度 2 0x0001
数据 1 Wi-Fi 联网状态,详见上表
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

MCU返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x02
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例

  • 55 aa 00 02 00 01 04 06 ,模组发送连接状态,表示已连上路由器且连接到云端;
  • 55 aa 00 02 00 00 01 ,MCU回复应答。

重置Wi-Fi 0x03

  • smartconfig&AP共存配网模式 ,重置后仍然为共存配网状态;
  • 仅支持AP热点配网模式的,重置后仍然为AP配网模式;
  • 传统两种配网模式互换配网模式:重置Wi-Fi状态转化如下图所示:

MCU 对接协议

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x03
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x03
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

  • 55 aa 00 03 00 00 02 ,MCU发送重置WI-Fi指令;
  • 55 aa 00 03 00 00 02,模组回复应答。

重置Wi-Fi(可选配网模式) 0x04

  • 此重置指令只针对 查询产品信息 设置的 Wi-Fi 模式为传统的工作模式(即AP和smartconfig切换模式)才有效;
  • 相对于 重置Wi-Fi 0x03 而言,该命令提供可指定重置 Wi-Fi 复位重启后的配网方式,MCU根据需求自行选择;
  • 保活门锁方案与可视门锁方案不支持该指令,仅支持03重置指令。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x04
数据长度 2 0x0001
数据 1 0x00:重置后进入Smartconifg /EZ配网模式
0x01:重置后进入AP热点配网模式
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x04
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

  • 55 aa 00 04 00 01 01 05,MCU发送指令让模组重置并重启后进入AP热点配网模式;
  • 55 aa 00 04 00 00 03,模组回复应答。

重置状态通知 0x25

  • 该指令与查询产品信息0x01指令的返回相关联,MCU需使能cap能力的bit3,当模组被重置时,才会发送0x25指令。
  • 当模组被操作重置时(如app内移除设备、本地重置等操作),会将具体重置原因报告给MCU,其可根据不同的重置原因执行不同的操作。
  • 重置原因与操作场景说明。
    • 本地重置:MCU发送0x03 / 0x04重置指令;
    • App内移除设备-解除绑定:用于在App内做解绑操作;
    • App内移除设备-解绑并清除数据:用户在App内做解绑并清除数据操作,也就是俗称的恢复出厂设置。
    • 本地数据清除,但设备不离网:

模组发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x25
数据长度 2 0x0001
数据 1 重置原因:
0x00:模组本地重置
0x01:App内移除设备-解除绑定
0x02:App内移除设备-解绑并清除数据
0x03:清除本地数据,但设备不离网
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

MCU回复:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x25
数据长度 2 0
数据 -
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

  • 55 aa 00 25 00 01 01 26,设备从APP内被移除-解绑绑定,同步重置原因给MCU;
  • 55 aa 00 25 00 00 24,MCU回复应答。

获取格林时间 0x10

格林时间,即0时区标准UTC时间戳,不带有时区和夏令时相关因素,是一个国际标准的时间基准。

  • 对于门锁产品,很多功能的正常使用都依赖于时间,因此确保门锁时间同步非常重要,请务必对接!
  • 模组每次上电在未联网成功之前无法同步时间,需要等待设备连接上云端(也就是收到设备联网状态5)后可发送获取本地时间指令。
  • 设备连接上云端后有可能会获取时间失败(在网络情况非常差的情况下,模组未同步到时间)。对于依赖时间的设备(如门锁),当获取失败时可在一定时间后重试获取,确保时间数据获取成功。
  • 建议每次连云成功均同步获取一次时间,已完成设备校时。
  • 获取完格林时间后可再获取一次本地时间,通过两者的时间差值可计算出当前所处时区

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x10
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x10
数据长度 2 0x0008
数据 8 Data[0] 为是否获取时间结果标识
 0x00:获取失败
 0x01:获取成功
Data[1] 为年,0x00 表示 2000 年
Data[2] 为月,从 1 开始到 12 结束
Data[3] 为日,从 1 开始到 31 结束
Data[4] 为时,从 0 开始到 23 结束
Data[5] 为分,从 0 开始到 59 结束
Data[6] 为秒,从 0 开始到 59 结束
Data[7] 为星期,从 1 开始到 7 结束,1 代表星期一
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:
55 aa 00 10 00 00 0F,MCU获取格林时间。
55 aa 00 10 00 08 01 17 02 01 08 09 05 03 65,模组返回获取成功与格林时间数据,解释如下:

  • 格林时间:2023-2-1 8:9:5 星期三;

  • 如设备所处东8区间,则对应本地时间:2023-2-1 16:9:5 星期三。

获取本地时间 0x06

本地时间,即设备本地时间,是在格林时间的基础上加上当地(设备激活所在地)时区和夏令时的时间。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x06
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x06
数据长度 2 0x0008
数据 8 Data[0] :获取时间结果标识
 0x00:获取失败
 0x01:获取成功
Data[1] 为年,0x00 表示 2000 年
Data[2] 为月,从 1 开始到 12 结束
Data[3] 为日,从 1 开始到 31 结束
Data[4] 为时,从 0 开始到 23 结束
Data[5] 为分,从 0 开始到 59 结束
Data[6] 为秒,从 0 开始到 59 结束
Data[7] 为星期,从 1 开始到 7 结束,1 代表星期一
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:
55 aa 00 06 00 00 05,MCU获取本地时间。
55 aa 00 06 00 08 01 17 02 01 10 09 05 03 49 ,模组返回获取成功结果与本地时间数据,2023-2-1 16:9:5 星期三。

实时状态上报 0x05

  • 实时状态数据会直接上报到云端,故设备联网状态必须为已连接到云端,否则数据上报失败。
  • 状态数据单元说明请参考 DP格式(状态数据单元)支持组合形式上报,一次可含多个状态数据单元。
  • 实时状态上报,主要触发机制有三类,分别如下:
    • MCU 检测到状态有变化(如设备电量或某个检测状态),将变化后的DP状态发送至模组去上报。
    • MCU 收到命令下发处理帧时,正确执行相应DP命令,再通过状态上报帧,将变化后的DP状态发送至模组去上报。
    • MCU 收到状态查询帧/或每次成功连上云时,建议将所有的DP状态发送至模组。
  • MCU 上报的数据请注意数据的合法性,确保 DPID 与数据类型以及内容,与在 涂鸦 IoT 开发平台 创建的pid下的 DP功能点内容信息一致。对于非法上报,模组将返回对应错误码。

MCU发送 :

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x05
数据长度 2 取决于“命令数据单元”类型以及个数
数据 N DP格式(状态数据单元)
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x05
数据长度 2 0x0001
数据 1 0x00:成功,模组收到并成功上报到云端
0x01:失败
0x02:保留
0x03:pid未配置该dp
0x04:dp类型错误
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

  • 单个状态数据单元单独上报示例:DP 109 bool型变量,数值为1

    55 aa 00 05 00 05 6d 01 00 01 01 79

  • 多个状态数据单元组合上报示例

    • DP 109 bool型变量,数值为1
    • DP 102 string型变量,“201804121507”(具体传输对应ASCII值)

    55 aa 00 05 00 15 6d 01 00 01 01 66 03 00 0c 32 30 31 38 30 34 31 32 31 35 30 37 5d

  • 模组回复应答,接收成功并上报到云端

    55 aa 00 05 00 01 00 05

记录型数据上报 0x08

使用场景:门锁设备日常使用操作时,会产生开门记录(如指纹开门)以及告警记录(试错告警),设备需要通过该指令将对应的操作记录上报至云端从而在app上展示对应的操作记录。

建议流程:以非保活门锁为例,门锁设备产生记录,MCU给Wi-Fi模组上电(推荐:设置连云超时时间15秒+)等待其连云成功。通过0x08指令上报记录型数据,等待模组应答,若应答成功并无历史记录需上报,2秒后可给模组做断电处理;若上电连云超时时间内模组都未连接至云端,MCU也可上报记录型数据让模组缓存,模组应答成功后可做断电处理。

  • 没有网络情况下,模组支持缓存MCU上报的记录型数据(回复给MCU应答也会是推送成功-00),当网络恢复并成功连上云则自动补发上报历史记录。
  • 模组支持储存历史记录的条数最大为 20 条(每条最大长度80字节),采用FIFO方式存取。当超过 20 条从最早储存的记录开始覆盖,如此循环覆盖。
  • 如模组回复结果为0x01-上报成功并有滞留/历史数据,此时说明模组内尚有历史记录未上报,此时MCU应等待模组上报结束(直到回复状态为0x00)再给模组做断电处理。
  • 网络环境差、数据拥塞等异常情况下,模组可能会在 5 秒后返回失败,建议MCU等待应答超时时间至少 5 秒。
  • MCU 上报的数据请注意数据的合法性,确保 DPID、数据类型以及内容,与在 涂鸦 IoT 开发平台 创建的pid下的 DP功能点内容信息一致。

  • 不推荐使用时间类型0,如强制要用必须在模组获取时间后使用,否则记录的时间将不准确。

  • 相同时间内不太可能同时发生多件记录型事件,因此对于门锁类设备而言建议都使用单条上报(一个状态数据单元)。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x08
数据长度 2 取决于“命令数据单元”类型以及个数
数据 7 记录型数据时间信息,类型+时间,共计7字节。
Data[0] 为上报时间类型,定义如下:
 0x00:用模组时间,其Data[1~6]无效;不推荐
 0x01:用MCU传的本地时间Data[1~6]
 0x02:用MCU传的格林时间Data[1~6]
Data[1] 为年,0x00 表示 2000 年
Data[2] 为月,从 1 开始到 12 结束
Data[3] 为日,从 1 开始到 31 结束
Data[4] 为时,从 0 开始到 23 结束
Data[5] 为分,从 0 开始到 59 结束
Data[6] 为秒,从 0 开始到 59 结束
数据 N DP格式(状态数据单元)
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x08
数据长度 2 0x0001
数据 1 表示上报结果:
0x00:上报成功,无滞留/历史记录需上报
0x01:上报成功,有滞留/历史记录需上报
0x02:上报失败
0x03:pid没有配置该dp
0x04:dp类型错误
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

  • 单条记录型数据单元上报例子:

    DP 109 bool型变量,数值为 1

    • 时间类型=0,模组当前时间为准:

      55 aa 00 08 00 0c 00 00 00 00 00 00 00 6d 01 00 01 01 83

    • 时间类型=1,设备MCU传的本地时间为准(2018/04/19/ 13点3分29秒)

      55 aa 00 08 00 0c 01 12 04 13 0d 03 1d 6d 01 00 01 01 da

    • 时间类型=2,设备MCU传的格林时间为准(2018/04/19/ 5点3分29秒)

      55 aa 00 08 00 0c 02 12 04 13 05 03 1d 6d 01 00 01 01 d3

  • 模组回复应答,接收上报成功,无滞留/历史数据需上报

    • 55 aa 00 08 00 01 00 08
  • 模组回复应答,接收上报成功,有滞留/历史数据需上报

    • 55 aa 00 08 00 01 01 09

模组DP命令下发 0x09

  • 命令下发可含多个datapoint 状态数据单元。
  • MCU收到指令后需先回复0x09应答包,然后根据 DP命令数据执行对应功能,若DP协议需上报或状态发生改变,MCU还需使用状态上报0x05指令来上报/同步最新状态。

模组发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x09
数据长度 2 取决于“命令数据单元”类型以及个数
数据 N DP格式(状态数据单元)
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

MCU回复:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x09
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:
55 aa 00 09 00 05 03 01 00 01 01 13,模组下发DP命令(对应 DPID为3, bool型变量,数值为 1);
55 aa 00 09 00 00 08,MCU回复应答。

获取DP缓存命令 0x15

  • 使用场景:对于非保活Wi-Fi门锁方案,平时基本都处于被断电状态,不可实时接收云端下发的DP命令。对于某些带设置属性的信息支持先缓存在云端,模组上线后MCU可通过该指令获取缓存DP命令,从而完成相关设置。
  • 支持按dpid值查询(当dp_num非0,后跟待查的dpid数据)或查询所有缓存DP(当dp_num=0时)。
  • 如对接方案上有设置指令缓存相关需求请对接该指令,否则可不对接。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x15
数据长度 2 N
数据 N 格式:dp_num + dp_1 + … + dp_n
 dp_num:1字节,表示查询个数(0查询所有)
 dp_x:1字节,表示查询的dpid值
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x15
数据长度 2 取决于“命令数据单元”类型以及个数
数据 ~ 格式:result + dp_num + 数据1 +…+ 数据n
 result:1字节,0-失败,1-成功
 dp_num:1字节,为0表示无缓存
 dp数据:详见DP格式(状态数据单元)

result=0失败时后无数据,数据长度为1
dp_num为0时,表示当前没有缓存命令
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

  • MCU查询指定dpid的DP缓存,如获取 dp10、dp11的DP缓存

    55 AA 00 15 00 03 02 0A 0B 2E

  • 模组返回获取结果,DP10(自动落锁开启,布尔型)+ dp11(自动落锁延时时间5秒,数值型)

    55 AA 00 15 00 0F 01 02 0A 01 00 01 01 0B 02 00 04 00 00 00 05 49

  • MCU查询所有DP缓存

    55 AA 00 15 00 01 00 15

  • 模组返回获取结果,无DP缓存

    55 AA 00 15 00 02 01 00 17

MCU OTA升级服务

  • 涂鸦Wi-Fi门锁方案均支持OTA升级服务,支持给模组、外部MCU固件升级。

  • 当客户的MCU或者Wi-Fi模组的固件功能有重大升级时,或者有严重BUG或紧急问题修复时,需要覆盖到已出货产品,客户可以在涂鸦平台配置OTA升级。

  • 目前涂鸦平台的 MCU 升级支持下面四种升级方式的配置:

    • App 提醒升级:用户每次进入设备控制面板都会收到升级提醒的弹窗,是否确认升级由用户自己在 App 确认。
    • App 自动/静默升级:App 不会有任何提醒弹窗,模组上电后一分钟内会去自动去检测升级发现有高版本的升级包会自动开始拉取相关升级包,第一次上电后模组会间隔 24 小时去云端检测一次是否有升级包配置。
    • App 强制升级:App 会有升级提醒弹窗,如果用户不确认升级用户就没法正常使用这个产品的控制面板。
    • App 检测升级:App 不会有任何升级提醒的弹窗,必须要用户自己在 App 上点击相关固件版本检测,如果有高版本的固件配置才会显示升级提示信息。
  • MCU 升级相关流程图:

    注:Wi-Fi 模组发送完所有的升级包,会重新发送 01 命令字(查询产品信息),MCU 需要在一分钟回复产品信息中的 MCU 软件版本号(升级后的版本号),版本号需要和在涂鸦后台配置升级的版本号保持一致,App 端才会收到固件升级成功的通知。

MCU 对接协议

自动/静默升级 0x21

  • 为什么需要该指令?一般Wi-Fi模组的电源由MCU控制,当处于升级时,需将升级状态(检测到有升级、升级开始、升级成功、升级失败等)同步通知给MCU,MCU需根据对应状态控制模组供电。
  • 该功能与查询产品信息0x01指令的返回相关联,MCU需使能cap能力的bit4=1
  • 用户在涂鸦IOT平台配置模组、MCU升级时,配置升级方式为自动保持设备更新;
  • 上电模组连接至云端会查询否有新固件更新,如有则发送给模组,模组接收到有新固件则发送协议给 MCU,MCU 根据升级固件类型做对应处理并回复;
  • 模组收到 MCU 回复命令,如果升级则下发开始升级命令;升级成功则发送升级成功命令;其他等异常失败均回复升级失败。

注意:接收到模组向 MCU 发送的升级成功命令后 15s 后断电,因为模组升级成功后,会重新连接网络,检测固件版本是否升级成功,如果成功,App 端才会收到固件升级成功的通知。

模组发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x21
数据长度 2 0x0002
数据 2 Data[0]:升级状态
 0x00:检测到有固件升级(不可断电)
 0x01:升级开始(不可断电)
 0x02:升级成功(15秒后断电
 0x03:升级失败(可断电)
Data[1]:固件类型
 0x00:模组固件
 0x01:MCU固件
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

MCU返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x21
数据长度 2 0x0001
数据 1 0x00:允许升级
0x01:电量不足拒绝升级
0x02:其它原因
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:
55 aa 00 21 00 02 00 01 23,模组发送固件自动升级信息,检测到有新的MCU固件;
55 aa 00 21 00 01 00 21 ,MCU返回允许升级;
55 aa 00 21 00 01 01 22 ,MCU返回拒绝升级,因电池电量不足原因。

升级启动 0x0D

  • 升级启动方式含自动及手动升级两种方式:
    • 当处于自动升级时,模组检测云端 MCU 有更新版本固件,则自动启动与 MCU 升级包交互流程;
    • 当处于手动升级时,通过 App 确定,模组才启动与 MCU 升级包交互流程。
  • 当升级启动时,模组会将升级固件包的信息给MCU(主要包含文件大小,单位:字节)。MCU 返回应答时可根据需要选择分片传输数据包大小,若不选择则默认为 256 Bytes。注:MD5文件校验值仅在模组支持ble+x模式时才有效,否则无该字段。

模组发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0d
数据长度 2 0x0004 / 0x0024
数据 4 Data[0~3]:固件包大小(大端),4字节
Data[4-35]:固件MD5校验值,32字节

注:MD5字段仅在支持ble+x方案时才有
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

MCU返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0d
数据长度 2 0x0001
数据 1 分片传输数据大小
 0x00:分包大小256字节
 0x01:分包大小512字节
 0x02:分包大小1024字节
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:
55 aa 00 0d 00 04 00 00 68 00 78 ,模组发送升级固件大小 (固件包长度 26624 Bytes );
55 aa 00 0d 00 01 00 0d,MCU确认包回复,选择分包传输大小为256 Bytes。

升级数据传输 0x0E

  • 升级包传输数据格式:文件偏移量 + 包数据;

  • 若MCU收到该帧数据长度为 4 ,并且偏移量 >= 固件大小,则表示升级文件传输完成。

模组发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0e
数据长度 2 0x0004 + N
数据 4+N Data[0~3]:固定为文件偏移(大端)
Data[4~n]:升级数据
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

MCU返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0e
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

  • 模组发送文件数据,若要升级的文件大小 530Byte

    • 第一包数据,包偏移为0x00000000,分包升级数据长度为256

      55 aa 00 0e 0104 00000000 xx…xx XX

    • 第二包数据,包偏移为0x00000100,分包升级数据长度为256

      55 aa 00 0e 0104 00000100 xx…xx XX

    • 第三包数据,包偏移为0x00000200,分包升级数据长度为18(最后分片

      55 aa 00 0e 0016 00000200 xx…xx XX

    • 最后一包,包偏移为0x00000212,分包升级数据长度为0(传输完成

      55 aa 00 0e 0004 00000212 XX

  • MCU每个分片数据包均要回复应答

    • 55 aa 00 0e 00 00 0d

门锁密码服务

密码进制设置 0x1C

目的与意义:部分门锁的密码键盘可输入的数字按键范围并非支持0-9,比如钥匙盒类产品仅支持1-6数字按键输入。对这样的需求就需要通过产品配置告知云端、面板与模组端,从而通过进制算法转换成正确密码。其中云端、面板的配置用户可在iot前台产品能力中配置;嵌入式端的配置就需要MCU通过0x01C指令告知模组。

概念说明:主要包含两个主要概念:进制与起始值。

  • 进制:表示所有密码数字按键的个数,目前支持 4-10。
  • 起始值:表示密码数字按键开始的数值,目前仅支持 0 和 1,也可理解为是否包含0。
  • 几种示例:
    • 密码键盘可输入数字“12345”,则配置进制为 5,起始值为 1;
    • 密码键盘可输入数字“012345”,则配置进制为 6,起始值为 0;
    • 密码键盘可输入数字“123456789”,则配置进制为 9,起始值为 1;
    • 密码键盘可输入数字“0123456789”,则配置进制为 10,起始值为 0。

转换原理:云端默认生成的算法类密码均是按10进制来的,使用端根据配置/设置的进制将其转换,然后根据起始值如果为1,再将转换后的值每个数字+1。同理,使用端根据对应的规则也可将其转换成原来的10进制。示例:用户可以配置密码从1开始,且按键只支持1-6这6个数字,这样用户本地密码键盘只需要支持1-6这6个数字按键即可。面板获取云端动态密码76829103,面板按进制转换后显示为:22453525254。当用户本地开门时,门锁端输入22453525254,MCU将输入的密码通过对应指令传给模组,模组提取原来的10进制密码76829103进行算法比对,并将结果返回给MCU。转换原理涂鸦方案各端会自行处理,MCU使用端可不必理解详细的原理,只需配置设置好对应的参数使用即可。

密码进制参照表

密码进制
对应密码按键数量
密码按键
从1/0开始
是否支持
动态密码
是否支持
离线密码
在线密码
最小密码长度
安全等级 在线密码
多语言配置
4 可选 不支持 不支持 8 1/29W 支持8-12位密码
5 可选 支持 不支持 8 1/39W 支持8-12位密码
6 可选 支持 不支持 8 1/100W 支持8-12位密码
7 可选 支持 支持 8 1/100W 支持8-11位密码
8 可选 支持 支持 7 1/100W 支持7-11位密码
9 可选 支持 支持 7 1/100W 支持7-10位密码
10 不可选 支持 支持 6 1/100W 支持6-10位密码
  • 密码进制0x1C设置,需要在获取信息查询产品信息0x01之后进行设置,并在密码操作前设置。
  • 如果进行了密码进制0x1C设置,即开启了密码进制服务,0x14命令必须使用新版协议格式。
  • 模组默认进制参数为10进制,每次设置会保存对应参数,如需设置MCU在配网成功后设置一次即可。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1C
数据长度 2 0x0002
数据 2 Data[0]:密码进制值,取值范围:4-10
Data[1]:密码起始值,从0或1开始
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1C
数据长度 2 0x0001
数据 1 结果返回
0x00:设置成功
其他:设置失败
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:
55 aa 00 1c 00 02 05 01 23 ,MCU密码键盘可输入数字“12345”,配置进制为 5,起始值为 1;
55 aa 00 1c 00 01 00 1c,模组返回设置成功。

请求拉取临时密码-老 0x14

使用场景:临时密码支持设备未联网时创建,信息缓存在云端。当用户在门锁密码键盘上输入密码请求开门,MCU判断不属于本地密码,根据输入的密码长度向Wi-Fi模组发送不同的指令去请求或验证。

  • 临时密码云端都是全量下发,每次拉取成功,门锁MCU端均需要根据服务端返回的所有密码和状态进行更新,并保存与本地。
  • 支持设置生效失效时间,支持设置重复规则(周循环 + 每天窗口时段);
  • 密码编号说明:云端创建生成的临时密码编码规则为900+x(0-50);设备请求拉取获取到的编号为x,MCU端保存在本地的临时密码编号一般也会是x。当用该临时密码解锁上报记录时,使用的密码编号需是900+x,云端才可正确对应;
  • 密码生效、时间说明:采用格林时间,年月日时分秒编码;
  • 重复循环规则说明:当前在面板内创建的临时密码,仅支持设置一条重复循环规则;
  • 非保活门锁方案,最多可创建10组临时密码;保活方案因是长在线直接DP下发;
  • 临时密码是否处于有效期,极其依赖设备时间正确,因此建议每次连云成功均获取时间校时,或设备硬件配备时钟芯片并带后背电池。

注意:老版本指令,都是7位定长临时密码,不支持密码进制。新出模组方案都不再使用该老版本指令,请使用新版本请求临时密码指令。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x14
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x14
数据长度 2 1 / N
数据 1 / N Data[0]:获取临时密码结果标识
 0x00:失败,后续无数据,数据长度为1
 0x01:成功
Data[1]:本包数据密码组数(值范围:0-10)
 组数=0表示未创建,无后续密码数据
Data[2]:密码长度,以下简用N
Data[3]:分包标识+序号,其中
bit7:为1表示后续还有数据包;
bit6-bit0:表示本包序号(从0开始)
// 第1组临时密码数据
Data[4]:密码编号(900+x)
Data[5]:密码有效次数,0-不限次数,1-仅一次
Data[6]:密码状态,0-有效,1-失效(已删)
Data[7~12]:密码生效时间
Data[13~18]:密码失效时间
 生效、时效时间格式:年月日时分秒(格林时间)
Data[19~19+N-1]:临时密码(Ascii码表示)
Data[19+N]:重复循环规则条数(目前仅一条)
Data[20+N]:是否全天有效,0-非全天,1-全天
Data[21+N]:开始时间(小时)
Data[22+N]:开始时间(分钟)
Data[23+N]:结束时间(小时)
Data[24+N]:结束时间(分钟)
Data[25+N]:周循环,bit方式表示,详见周编码规则
 bit0-周日,bit1-周1, …, bit6-周6,bit7-默认0
// 第2组临时密码数据

// 第n组临时密码数据
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

  • 门锁拉取缓存的临时密码 (老版本指令、不支持密码进制)

    55 aa 00 14 00 00 13

  • 模组返回拉取的临时密码数据

    55 aa 00 14 00 21 01 01 07 00 0A 00 00 14 0A 09 01 31 19 14 0A 0D 02 31 19 38 30 32 34 33 36 36 01 00 00 00 01 00 3E DD

    • 01 // 获取结果:成功

    • 01 // 密码组数:1组

    • 07 // 密码长度:7

    • 00 // 本包序号 0 ,且后续无数据包(bit7:后续是否还有数据包。bit6-bit0:本包序号,从0开始)

      // 第1组临时密码数据

    • 0A // 密码编号 10(实际编号需要在密码编号基础上加 900)

    • 00 // 密码有效次数(0:有效期内可不限次数开门;1:有效期内只能开一次门)

    • 00 // 密码当前状态(0:密码有效;1:密码无效)

    • 14 0A 09 01 31 19 // 生效时间(格林时间),北京时间:2020-10-09 09:49

    • 14 0A 0D 02 31 19 // 失效时间(格林时间),北京时间:2020-10-13 10:49

    • 38 30 32 34 33 36 36 // 密码内容Ascii码,对应密码数字 8024366

      // 重复循环规则数据

    • 01 // schedule 条数(目前仅支持一条)

    • 00 // 非全天有效(1:全天有效,后面的起始时间数据无效)

    • 00 // 开始时间(小时)

    • 00 //开始时间(分钟)

    • 01 // 结束时间(小时)

    • 00 // 结束时间(分钟)

    • 3E // 周循环:0011 1110,即周一到周五循环。Bit 0:周日;Bit 1:周一;Bit 2:周二;Bit 3:周三;Bit 4:周四;Bit 5:周五;Bit 6:周六

请求拉取临时密码-新 0x14

使用场景:临时密码支持设备未联网时创建,信息缓存在云端。当用户在门锁密码键盘上输入密码请求开门,MCU判断不属于本地密码,根据输入的密码长度向Wi-Fi模组发送不同的指令去请求或验证。

  • 临时密码云端都是全量下发,每次拉取成功,门锁MCU端均需要根据服务端返回的所有密码和状态进行更新,并保存与本地。
  • 支持设置生效失效时间,支持设置重复规则(周循环 + 每天窗口时段);
  • 密码编号说明:云端创建生成的临时密码编码规则为900+x(0-50);设备请求拉取获取到的编号为x,MCU端保存在本地的临时密码编号一般也会是x。当用该临时密码解锁上报记录时,使用的密码编号需是900+x,云端才可正确对应;
  • 密码生效、时间说明:采用格林时间,年月日时分秒编码;
  • 重复循环规则说明:当前在面板内创建的临时密码,仅支持设置一条重复循环规则;
  • 非保活门锁方案,最多可创建10组临时密码;保活方案因是长在线直接DP下发;
  • 临时密码是否处于有效期,极其依赖设备时间正确,因此建议每次连云成功均获取时间校时,或设备硬件配备时钟芯片并带后背电池。
  • 临时密码长度支持变长(密码进制),推荐使用该指令对接,功能作用上覆盖原老版指令。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x14
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x14
数据长度 2 1 / N
数据 1 / N Data[0]:获取临时密码结果标识
 0x00:失败,后续无数据,数据长度为1
 0x01:成功
Data[1]:本包数据密码组数(值范围:0-10)
 组数=0表示未创建,无后续密码数据
Data[2]:分包标识+序号,其中
bit7:为1表示后续还有数据包;
bit6-bit0:表示本包序号(从0开始)
// 第1组临时密码数据 
Data[3]:密码长度,以下简用N
Data[4]:密码编号(900+x)
Data[5]:密码有效次数,0-不限次数,1-仅一次
Data[6]:密码状态,0-有效,1-失效(已删)
Data[7~12]:密码生效时间
Data[13~18]:密码失效时间
 生效、时效时间格式:年月日时分秒(格林时间)
Data[19~19+N-1]:临时密码(Ascii码表示)
Data[19+N]:重复循环规则条数(目前仅一条)
Data[20+N]:是否全天有效,0-非全天,1-全天
Data[21+N]:开始时间(小时)
Data[22+N]:开始时间(分钟)
Data[23+N]:结束时间(小时)
Data[24+N]:结束时间(分钟)
Data[25+N]:周循环,bit方式表示,详见周编码规则
 bit0-周日,bit1-周1, …, bit6-周6,bit7-默认0
// 第2组临时密码数据

// 第n组临时密码数据
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

  • 门锁拉取缓存的临时密码(新版本指令、支持密码进制)
    55 aa 00 14 00 00 13

  • 模组返回拉取的临时密码数据

    55 aa 00 14 00 21 01 01 00 07 0A 00 00 14 0A 09 01 31 19 14 0A 0D 02 31 19 38 30 32 34 33 36 36 01 00 00 00 01 00 3E DD

    • 01 // 获取结果:成功

    • 01 // 密码组数:1组

    • 00 // 本包序号 0 ,且后续无数据包(bit7:后续是否还有数据包。bit6-bit0:本包序号,从0开始)

      // 第1组临时密码-时效与内容数据

    • 07 // 密码长度:7

    • 0A // 密码编号 10(实际编号需要在密码编号基础上加 900)

    • 00 // 密码有效次数(0:有效期内可不限次数开门;1:有效期内只能开一次门)

    • 00 // 密码当前状态(0:密码有效;1:密码无效)

    • 14 0A 09 01 31 19 // 生效时间(格林时间),北京时间:2020-10-09 09:49

    • 14 0A 0D 02 31 19 // 失效时间(格林时间),北京时间:2020-10-13 10:49

    • 38 30 32 34 33 36 36 // 密码内容Ascii码,对应密码数字 8024366

      // 第1组临时密码-重复循环规则

    • 01 // schedule 条数(目前仅支持一条)

    • 00 // 非全天有效(1:全天有效,后面的起始时间数据无效)

    • 00 // 开始时间(小时)

    • 00 //开始时间(分钟)

    • 01 // 结束时间(小时)

    • 00 // 结束时间(分钟)

    • 3E // 周循环:0011 1110,即周一到周五循环。Bit 0:周日;Bit 1:周一;Bit 2:周二;Bit 3:周三;Bit 4:周四;Bit 5:周五;Bit 6:周六

请求比对离线密码 0x16

使用场景:主人在 App 面板内生成离线密码,有效时间内访客在门锁上输入对应的离线密码即可开门。离线密码的创建和使用均不依赖网络,可以在门锁离线时使用。离线密码是云端和Wi-Fi模组端都基于时间的离线算法,所以需要 MCU 的时间准确来保证算法时间因子正确,从而完成离线密码校对。

建议流程:用户在门锁密码键盘上输入离线密码请求开门,MCU判断不属于本地密码,根据输入的密码长度(一般10位以上)向Wi-Fi模组发送离线密码0x16指令去请求验证,模组根据MCU传的时间戳以及密码内容,通过运算离线算法返回结果,结果内容包含:校验结果 + 离线密码类型 + 编码数据。如校验正确,MCU还需根据密码类型与编码数据上报对应开门/操作记录,详见下文。

离线密码类型说明

  • 单次密码:一次性密码创建成功即生效,有效期为 6 小时,失效前仅能使用一次;每个整点 60 分钟内,只有 10 组可用的单次密码。
  • 时效密码:不限次数密码生效、失效时间可编辑,有效期最长只能设置 1 年区间;有效期内可不限次数使用;生效后 24 小时内至少使用一次,否则密码将失效;同一设备在相同生效、失效时间段内仅能获取 1 组密码。
  • 清空码:对于不限次数密码,还可获取对应离线清空码用于删除该离线密码,点击离线密码 - 删除即可获取。清空单个密码,只可清空单条在门锁上至少被使用过一次的离线不限次数密码,不能清空一次性密码以及没有在门锁上使用过的不限次数密码。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x16
数据长度 2 N
数据 N 数据格式:格林时间 + 密码长度 + 密码
Data[0-5]:年月日时分秒格林时间
Data[6]:密码长度
Data[7~N]:密码内容,10进制(非Ascii)
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组回复:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x16
数据长度 2 N
数据 N 数据格式:result+type+decode_len+decode
Data[0]:比对结果result
 0x00:正确
 其他:错误(无后续数据)
Data[1]:离线密码类型type
 0x00:限时开门密码
 0x01:单次开门密码
 0x02:清除密码
Data[2]:解密后数据长度decode_len
Data[3~n]:解密数据decode

注:decode解密数据,用于离线密码记录上报
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

  • MCU请求比对离线密码:4183383233,格林时间:2020/09/22 03:45:07。
    55 AA 00 16 00 11 14 09 16 03 2D 07 0A 04 01 08 03 03 08 03 02 03 03 C0

  • 模组返回比对结果。

    55 AA 00 16 00 13 00 01 10 34 7B 6E BD 51 C8 73 03 FE D6 87 0D 5E A9 9B C5 71

    • 比对结果:00,正确;
    • 密码类型:01,表示一次性密码;
    • 解密数据长度:16字节;
    • 解密数据:34 7B 6E BD 51 C8 73 03 FE D6 87 0D 5E A9 9B C5,MCU用于记录上报。

保活方案特有协议

获取设备联网状态 0x1A

  • MCU可根据此条命令获取Wi-Fi状态,比如mcu重上电或软件重启,可主动向模组查询当前联网状态。
  • 返回Wi-Fi状态见设备联网状态表
  • 仅保活类Wi-Fi门锁方案支持该指令,其他非保活类方案不支持。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1A
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1A
数据长度 2 0x0002
数据 2 Data[0]:详见设备联网状态表
Data[1]:表示模组激活状态
 0x00:未激活
 0x01:已激活
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

  • 55 AA 00 1A 00 00 19,MCU主动查询Wi-Fi联网状态;
  • 55 AA 00 1A 00 02 04 01 20,模组返回查询结果为0x04-已连上路由器且连接到云端,同时模组为已激活状态。

时间同步-综合时间 0x1B

考虑到MCU获取时间同步的便捷性以及信息的完整度,新增一条指令支持MCU 可获取当前综合时间信息,包括时间戳、时区以及夏令时信息
注:仅保活类Wi-Fi门锁方案支持该指令

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1B
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1B
数据长度 2 0x0011
数据 17 数据长度17字节,格式定义如下:
Data[0]:获取时间结果标识
 0x00:失败
 0x01:成功
Data[1]-Data[4]:unix时间戳(大端)
Data[5]:获取时区信息结果标识
 0x00:失败
 0x01:成功
Data[6]:表示东/西时区
 0x00:东区
 0x01:西区
Data[7]:具体时区信息
Data[8]:是否有夏令时标识
 0x00:无夏令时
 0x01:有夏令时
Data[9]-Data[12]:进入夏令时时间戳(大端)
Data[13]-Data[16]:退出夏令时时间戳(大端)
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:
55 aa 00 1B 00 00 1A ,MCU获取综合时间信息。
55 aa 00 1B 00 11 01 63 DA 1E 21 01 00 08 00 00 00 00 00 00 00 00 00 B1 ,模组返回综合时间信息,解析如下:

  • 获取时间戳成功,unix时间戳0x63DA1E21,对应10进制为1675238945,换算成时间对应2023-2-1 8:9:5 ;

  • 获取时区成功,东8区;

  • 无夏令时信息;

  • 以上综合,设备所处时区为东8区,换算对应本地时间为2023-2-1 16:9:5 。

请求拉取临时密码-DP格式 0x1D

  • 因保活类方案属于MQTT保活常在线设备,临时密码的创建等操作可直接通过DP命令下发给模组。考虑到部分使用场景,支持设备不在线时也可生成临时密码缓存在云端,模组下一次上线时通过0x1D指令拉取。为方便MCU端处理对应数据(1. DP指令过来的,2. 通过1D指令拉取的),该指令核心数据部分设计采用与DP协议保持一致。
  • 仅保活类Wi-Fi门锁方案支持该指令,其他非保活类方案不支持。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1D
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x1D
数据长度 2 1 / N
数据 1 / N Data[0]:获取临时密码结果标识
 0x00:失败,后续无数据,数据长度为1
 0x01:成功
Data[1]:分包数;0表示未创建,无后续密码数据
 表示所有缓存的数据,分几次发送给MCU
Data[2]:分包序号(1~n)
// 第1组临时密码数据 
Data[3~4]:云端编号
Data[5]:密码状态,0-冻结,1-生效
Data[6~22]:时效性详见附录二:时效性
Data[23]:使用次数,0-永久,1-一次性
Data[24]:密码长度
Data[25~.]:密码内容(10进制,非Ascii码)
// 第2组临时密码数据

// 第n组临时密码数据
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

  • 门锁获取缓存的临时密码 (DP格式)

    55 aa 00 1D 00 00 1C

  • 模组返回拉取的临时密码数据

    55 aa 00 1D 00 20 01 01 01 00 02 01 5A 6A 6F 80 5B 6A 4D D0 02 00 00 00 3E 08 00 08 1E 00 07 03 08 03 02 06 05 01 68

    • 01 // 获取结果:成功

    • 01 // 分包数:1个分包

    • 01 // 分包序号:1(默认从1开始)

    • 00 02 // 云端分配的临时密码编号 2

    • 01 // 密码当前状态(0:冻结;1:生效)

    • 5A 6A 6F 80 5B 6A 4D D0 02 00 00 00 3E 08 00 08 1E // 时效性 17字节

      • 5A 6A 6F 80 // 生效时间(格林时间),时间戳:1516924800,转为年月日时分秒:2018-01-26 08:00:00
      • 5B 6A 4D D0 // 失效时间(格林时间),时间戳:1533693392,转为年月日时分秒:2018-08-08 09:56:32
      • 02 // 循环方式 (02-周循环)
      • 00 00 00 3E // 循环标志数据(周1~周5有效)
      • 08 00 // 一天中的开始时间,早上8:00生效
      • 08 1E // 一天中的结束时间,早上8:30结束
    • 00 // 密码有效次数(0:有效期内可不限次数开门;1:有效期内只能开一次门)

    • 07 // 密码长度:7位

    • 03 08 03 02 06 05 01 // 密码内容,对应密码数字 3832651

深度休眠时间参数 0x80

  • 该功能与查询产品信息0x01指令的返回相关联,MCU按需设置cap能力的bit5位
    • 当bit=0时,深度休眠由模组端自行实现,MCU无需对接该指令。在面板内设置开关与时间段后,模组不会通过0x80指令将时间参数同步给MCU;到了休眠时间模组会自行进入深度休眠,到了退出时间模组会退出深度休眠状态进入保活状态;
    • 当bit=1时,深度休眠由MCU端实现。在面板内设置开关与时间段后,模组通过0x80指令将时间参数同步给MCU。进入/退出休眠时间,对应的操作均由MCU来选择处理,模组不做任何逻辑。
  • 推荐cap使用默认值bit5=0,让模组自行处理。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x80
数据长度 2 0x0009
数据 9 Data[0]:休眠功能是否使能
 0x00:关闭
 0x01:开启
Data[1~2]:进入休眠时间(HH:MM)
Data[3~4]:退出休眠时间(HH:MM)
Data[5~8]:预留
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x80
数据长度 2 0
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

55 aa 00 80 00 09 01 16 00 07 00 00 00 00 00 B0,模组同步休眠时间参数,开启休眠,深度休眠时间段22:00~第二天07:00;
55 aa 00 80 00 00 7F,MCU返回应答。

驱屏时间控制 0x83 (T31)

  • 该指令是否有效,与查询产品信息0x01指令的返回相关联,MCU按需设置cap能力的bit8位,定义如下:
    • 0 - 通过中断引脚控制
    • 1 - 通过串口指令控制
  • 通过UVC驱屏时由于T31不能休眠,因此增加该命令;

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x83
数据长度 2 0x0001
数据 1 0x00:允许休眠
0x01:驱屏中不休,模组兜底时长10min
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x83
数据长度 2 0x0001
数据 1 0x00:成功
0x01:失败
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

55 aa 00 83 00 01 00 83,MCU发送指令,允许休眠;
55 aa 00 83 00 01 00 83,模组回复设置成功应答。

上电配网使能控制 0x84 (T31)

  • 可视门锁保活方案,在未绑定前上电即进入可配网状态,因方案特殊性进入配网会伴有一声“滴滴”提示音,不能满足一些使用场景。
  • 该指令是否有效,与查询产品信息0x01指令的返回相关联,MCU按需设置cap能力的bit9=1时有效。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x84
数据长度 2 0x0001
数据 1 0x00:关闭,上电不进入配网模式
0x01:使能,上电默认进入配网模式
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x84
数据长度 2 0x0001
数据 1 0x00:成功
0x01:失败
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

55 aa 00 84 00 01 00 84,MCU发送指令,关闭上电进入配网模式;
55 aa 00 84 00 01 00 84,模组回复设置成功应答。

模块拓展服务

查询连接路由信号强度 0x0B

  • 使用场景:需要得知当前Wi-Fi设备与路由器AP间的信号强度怎么样,可通过该指令查询;
  • 必须在设备的联网状态为已成功连接上路由器以后使用,否则发送此命令将返回失败的结果。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0b
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x0b
数据长度 2 0x0002
数据 2 Data[0]:表示查询结果
 0x00:失败
 0x01:成功
Data[1]:表示具体结果
 成功时:表示信号强度百分比,
   范围0~100(0-最差,100-最强)
 失败时:0x00表示设备未连接上路由
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

55 aa 00 0b 00 00 0A,MCU查询连接路由器的信号强度;
55 aa 00 0b 00 02 01 50 5D,模组返回当前信号强度值百分比为80。

上报 MCU 的 SN 编号 0x17

通过这个指令可将 MCU 的 SN 号上报至平台。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x17
数据长度 2 N
数据 ~ 格式:SN长度(1字节) + SN(n字节)
注意:SN长度不得超过32bytes
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组回复:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x17
数据长度 2 1
数据 1 表示上报结果
 0x00:上报成功
 其他:上报失败
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

55 aa 00 17 00 09 08 41 42 43 44 31 32 33 34 FB,MCU上报设备SN号字符串“ABCD1234”至平台;
55 aa 00 17 00 01 00 17,模组回复上报成功。

MCU断电通知 0x22

背景说明:在MCU断电前通过该指令需要告知模组,让模组跟路由器主动断开连接(提高下一次快联成功率)
考虑到不同的MCU处理速度不一样,模组的回复会重复发送三次,MCU第一次收到模组回复即可断电,不需要再接收后续的回复。
注:仅非保活类门锁方案,并有断电使用需求才需对接该指令

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x22
数据长度 2 0x0000
数据 ~
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组回复:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x22
数据长度 2 0x0001
数据 1 表示处理结果
 0x00:通知成功
 其他:通知失败
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

55 aa 00 17 00 09 08 41 42 43 44 31 32 33 34 FB,MCU上报设备SN号字符串“ABCD1234”至平台;
55 aa 00 17 00 01 00 17,模组回复上报成功。

恢复出厂设置 0x340A

MCU可通过该指令对模组进行重置,模组数据清除,同时云端的数据也会被清除

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x34
数据长度 2 0x0002
数据 2 Data[0]:子命令 0x0A
Data[1]:模组重置并清除云端数据 0x00
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x34
数据长度 2 0x0002
数据 2 Data[0]:子命令 0x0A
Data[1]:0-成功,1-失败
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

55 aa 03 34 00 02 0A 00 42,MCU主动调用恢复出厂设置;
55 aa 00 34 00 02 0A 00 3F ,模组回复成功,并恢复出厂设置。

模组调试协议 0xDB

  • 为了方便后续排查测试过程中出现的问题,增加一条调试协议,仅供内部使用。
    • 00命令:为实时调整日志等级,方便测试时改变日志输出等级。
    • 01命令:为获取内存状态。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0xDB
数据长度 2 0x0002
数据 2 Data[0]:子命令
 0x00:调整日志等级
 0x01:获取内存
Data[1]:对应子命令数据
当子命令为0x00日志等级时,对应:
 0x00:err级别
 0x01:warning级别
 0x02:notice级别
 0x03:info级别
 0x04:debug级别
 0x05:trace级别
当子命令为0x01获取内存时,默认值0x00
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0xDB
数据长度 2 0 / 4
数据 0 / 4 子命令为0x00时,无数据字段
子命令为0x01时,当前剩余内存大小
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

55 aa 00 db 00 02 00 03 b7,调整日志等级为info级别;
55 aa 00 db 00 00 b2 ,模组回复设置成功。

模组功能性产测服务

简介:适用于设备量产时整机产品测试模组功能使用,如测试Wi-Fi扫描指定路由能力与信号强度,以及传图/音视频类方案与猫眼硬件连通性(SPI、串口、GPIO)。历史版本上支持过两类产测指令,分别是:

  • 基础类方案0x07指令:仅支持测试Wi-Fi扫描指定路由能力与信号强度;
  • 传图/音视频类方案0xF0指令:支持Wi-Fi能力、与猫眼连通性测试,如用的是WBRU、WBRL等模组方案推荐使用。
  • 产测指令需要在模组上电完成初始化流程以后(回复查询产品信息 的数据包)发送才有效,否则会导致产测失败或无结果。
  • 为了最大程度防止不良品,建议客户将路由于设备距离控制在 5 米左右,信号强度大于等于 60%为合格,这里可以根据自己产线和工厂环境的情况自行调整。

基础类方案 0x07

指定的产测路由器 SSID 固定为:tuya_mdev_test,密码:不做要求(可随意设置),要求路由器为 2.4G信号。模组接收到0x07产测指令后,扫描指定ssid路由,返回扫描结果和信号强度百分比。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x07
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模块返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x07
数据长度 2 0x0002
数据 2 Data[0]:表示产测结果
 0x00:失败
 0x01:成功
Data[1]:具体信息
 成功时:表示信号强度百分比;
  范围0-100(0信号最差,100信号最强)
 失败时:表示失败原因;
  0x00:表示未扫描到指定的ssid
  0x01:表示模块未烧录授权
校验和 1 从帧头开始,按字节求和,得出的结果对256求余

音视频类方案 0xF0

功能性产测范围在基础指令的基础上支持了更多功能项,包括扫描指定SSID、连接指令SSID以及与猫眼硬件连通性(如WBRU方案的PA4+猫眼串口+SPI通信测试/PA4+SPI通信测试)。

  • 模组在收到该指令后,根据协议内容进行指定的测试
    • 模组收到 0x00 扫描指定路由器后,开始扫描指定 SSID 的路由器,并返回扫描结果;
    • 模组收到 0x01 扫描指定路由器后,开始连接指定 SSID 的路由器,并返回结果;
    • 模组收到0x02命令后,会通过PA4输出一个250ms高电平给猫眼,此时能看到猫眼被唤醒处于工作状态,屏幕点亮,认为PA4测试成功。(前提:猫眼处于一直供电的休眠状态,不受第三方测试及模组的供电影响);
    • 当猫眼通过02指令被PA4唤醒后,模组会在5s内等待接收猫眼串口或SPI发送的0x63指令,收到后会通过猫眼串口或SPI回复0x63的就绪状态,未收到则认为失败。模组回复0x63指令后,会等待猫眼的0x61,3s内收到则测试成功,详细的失败返回值请参考下方的结果回复。
  • 扫描指定的 SSID,返回的数据中表示扫描结果和信号强度百分比;原则上若扫描成功,才可选择连接指定的路由器;
  • 指定的 SSID 固定为:tuya_mdev_test,密码为:test1234,要求路由器为 2.4G信号

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0xF0
数据长度 2 0x0002
数据 2 Data[0]:产测功能点
 0x00:扫描指定路由器
 0x01:连接指定路由器
 0x02:与猫眼硬件连通测试
Data[1]:子命令
 0x00:默认值
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0xF0
数据长度 2 0x0002
数据 2 Data[0]:产测结果
 0x00:成功
 0x01:失败
Data[1]:具体信息,详见下文
 信号强度/失败原因/猫眼连通结果
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

具体产测步骤及结果回复:

  • 扫描指定路由器
    • Data[0] = 0x00 时表示扫描成功
      Data[1]表示扫描到的路由器信号强度百分比(0-100)
    • Data[0] = 0x01 时表示扫描失败
      Data[1] = 0x00表示未扫描到指定SSID
      Data[1] = 0x01 表示模组未授权
  • 连接指定路由器
    • Data[0] = 0x00 时表示连接成功
      Data[1] = 0x00 默认为0x00
    • Data[0] = 0x01 时表示连接失败
      Data[1] = 0x00 默认为0x00 连接超时
      Data[1] = 0x01 其他原因失败
  • 与猫眼硬件连通性测试
    • Data[0] = 0x00 时表示接收成功
      Data[1] = 0x00 表示PA4+猫眼串口+SPI或者PA4+SPI通信成功
      Data[1] = 0x01 表示猫眼串口接收或者猫眼SPI接收没有通信成功
    • Data[0] = 0x01 时表示接收失败
      Data[1] = 0x00 表示没有收到猫眼串口或者SPI发送的0x63数据

传图/音视频相关功能

  • 传图/音视频方案详见对应模组方案的猫眼协议,这里仅描述MCU锁控使用到的相关指令。
  • 串口传图方案,MCU锁控也会涉及串口传图-状态获取0x63、串口传图-数据上传0x61指令,也请详见猫眼协议串口传图章节。
  • 该功能与查询产品信息0x01指令的返回相关联,MCU需使能cap能力的bit0位,并通过bit1指定传输方式是SPI / 串口

触发抓拍命令 0x64

当有事件触发时,MCU可通过此指令通知模组需触发抓拍,模组收到此指令后开启抓拍相关功能。

  • 抓拍事件编码可参见 附录一:抓拍事件编码表
  • 可通过子命令决定抓拍方式,支持抓图、开启实时视频;
  • 抓拍结果模组会通过 0x62 指令返回给 MCU。如结果成功,MCU还需上传对应的记录,才能成功关联到对应图片或视频(基于相同的时间戳关联:记录型数据上传的时间戳用0x62指令返回的时间戳)

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x64
数据长度 2 0x01+0x05+0x07
数据 1 子命令默认:0x00
2 抓拍事件编码,详见附录一
0x0000:防撬告警
0x0001:远程开门请求
0x0002:指纹开门试错
0x0003:密码开门试错

1 抓拍类型:
0x00:保留
0x01:抓拍图片
0x02:开启实时视频
0x03:门铃呼叫(仅可视方案支持)
1 保留字段,默认0x00
1 保留字段,默认0x00
7 记录型数据时间信息,类型+时间,共计7字节。
Data[0] 为上报时间类型,定义如下:
 0x00:用模组时间,其Data[1~6]无效;不推荐
 0x01:用MCU传的本地时间Data[1~6]
 0x02:用MCU传的格林时间Data[1~6]
Data[1] 为年,0x00 表示 2000 年
Data[2] 为月,从 1 开始到 12 结束
Data[3] 为日,从 1 开始到 31 结束
Data[4] 为时,从 0 开始到 23 结束
Data[5] 为分,从 0 开始到 59 结束
Data[6] 为秒,从 0 开始到 59 结束
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组回复:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x64
数据长度 2 0x0001
数据 1 表示接收处理结果
0x00:信息接收成功,启动抓拍
其他:失败
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

55 AA 00 64 00 0D 00 00 01 02 00 00 02 YY MM DD HH MM SS 64
55 AA 00 64 00 01 00 64

抓拍结果通知 0x62

模组接收到64指令开启抓拍后,对应的触发抓拍或视频推流相关结果将通过0x62指令通知MCU。

  • 当触发类型为图片时,通知结果为 0 代表图片上传成功;
    MCU 上报事件记录的时候需要将模组返回的图片 ID 和时间一起上报。
  • 当触发类型为视频时,通知结果为 0 代表视频流建立连接;
    通知结果为视频流播放结束时,数据中所带时间信息无效,此时 MCU 需自行判断当前触发类型,并做超时断电处理。

模组发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x62
数据长度 2 0x0009
数据 2 图片ID号:作为一张图片数据的归属标识。
6 当前图片上传的时间:
Data[0]为年,0x00表示2000年
Data[1]为月,从1开始到12结束
Data[2]为日,从1开始到31结束
Data[3]为时,从0开始到23结束
Data[4]为分,从0开始到59结束
Data[5]为秒,从0开始到59结束
1 Result:失败时,时间数据无效
 0x00:图片上传成功 / 开始推流
 0x01:网络异常
 0x02:大小超出限制
 0x03:抓拍超时
 0x04:其它原因失败
 0x05:推流结束
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

MCU回复:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x62
数据长度 2 0x0001
数据 1 0x00:无后续图片上传
非0:还有图片上传
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

单芯片解决方案相关功能

适用于涂鸦推出的单芯片一体化Wi-Fi门锁解决方案,核心板集成了拍照功能。支持的模组包含:BK7252、AC7916。

寄存器配置 0x66(BK7252)

  • 为满足客户动态配置图像寄存器,调节图像效果的需求,增加图像寄存器的参数配置指令。
  • 发送该指令后,模组会自动重启。
  • 若未发送该配置,则模组会采用默认的图像寄存器来进行初始化。
  • 需在模组回复PID并完成初始化后发送。(模组发送02指令后)

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x66
数据长度 2 2n+1
数据 2n+1 Data[0]:配置寄存器个数 n
Data[1]:寄存器地址
Data[2]:寄存器值

Data[1+2(n-1)]:寄存器地址
Data[2+2(n-1)]:寄存器值
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组回复:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x66
数据长度 2 1
数据 1 0x00:配置成功
0x01:配置失败
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

通用参数配置 0x65(BK7252)

  • 为满足客户动态配置参数的需求,增加图像参数配置相关指令。发送该指令,可修改图像相关的分辨率、图像质量、视频帧率、及是否动态开启红外夜视功能。模组会记录该配置,下次启动时将使用该配置来初始化图像相关相关参数;
  • 若未发送该配置,则模组会采用默认的图像参数来进行初始化;
  • 需在模组回复 PID 并完成初始化后发送(模组发送 02 指令后)。发送该指令后,模组会自动重启并用新的参数来完成初始化;
  • 若选择开启光敏检测 ,建议值为500,根据实际情况选择;
  • 若选择开启自动补光,建议值为475,根据实际情况选择;
  • 该指令仅支持 BK7252 单芯片方案。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x65
数据长度 2 0x000A
数据 1 Data[0]:图像分辨率
 0x00:320 * 240
 0x01:640 * 480
 0x02:1280*720(需硬件支持)
Data[1]:图像压缩比,支持25 / 50
Data[2]:视频帧率,支持12 / 15 / 20帧
Data[3~4]:光敏检测,占2字节
 0:关闭
 1~4095:光敏检测阈值
Data[5~6]:自动补光,占2字节
 0:关闭
 0~999:输出占空比
Data[7]:黑白模式切换,0-关闭,1-开启
Data[8]:回音消除AEC,0-关闭,1-开启
Data[9]:回音消除调优参数(与结构关联)
 默认值:0x0A(建议设置)
 设置范围:0x05~0x20
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组回复:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x65
数据长度 2 0x0001
数据 1 0x00:配置成功
0x01:配置失败
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

通用参数配置0xDA(AC7916)

  • 为满足客户动态配置参数的需求,增加图像参数配置相关指令。发送该指令设置后模组会记录该配置,下次启动时将使用该配置来初始化图像相关相关参数;
  • 若未发送该配置,则模组会采用默认的图像参数来进行初始化;
  • 需在模组回复 PID 并完成初始化后发送(模组发送 02 指令后)。发送该指令后,模组会自动重启并用新的参数来完成初始化;
  • 该指令仅支持 AC7916 单芯片方案。此指令只能用于研发调试阶段,不能试用量产产品,参数确定后,正式生产请用产测工具写入相关参数。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0xDA
数据长度 2 0x0010
数据 16 Data[0~1]:图像宽度 width
 示例:480对应0x01 0xE0
Data[2~3]:图像高度 height
 示例:320对应0x01 0x40
Data[4]:帧率
 示例:15fps对应0x0F
Data[5]:顺时针旋转角度
 0x00:0°
 0x01:90°
 0x02:180°
 0x03:270°
 0xFF:不设置
Data[6]:音频通道
 0x00:无
 0x01:1路
 0x02:2路
Data[7]:音频位深
 0x08:8位
 0x10:16位
Data[8~9]:音频采样率
 0x1F40:8000 (8K)
 0x3E80:16000(16K)
Data[10]:LCD显示屏
 0x01:ili9488
 0x02:st7796
 0x03:st7796反色
 0x04:uel035
Data[11~15]:保留字段,必须为0x00
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组回复:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0xDA
数据长度 2 0x0001
数据 1 0x00:配置成功
0x01:配置失败
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

本地拉流 0xD2(AC7916)

用于锁控MCU控制猫眼设备(如AC7916一体化方案)本地拉流,打开镜头并点亮屏幕显示视频流。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0xD2
数据长度 2 0x0001
数据 1 0x00:关闭本地拉流
0x01:开启本地拉流
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0xD2
数据长度 2 0x0001
数据 1 0x00:操作成功
0x01:操作失败
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

双模蓝牙相关功能

  • 适用于Wi-Fi & BLE Combo模组方案,模组常供电且BLE通信能力开启,如涂鸦推出的Wi-Fi门禁方案。其他方案可无需对接该功能。
设备蓝牙状态 描述 对应状态值
状态1 未绑定,未连接(蓝牙配网阶段产生) 0x00
状态2 未绑定,已连接(蓝牙配网阶段产生) 0x01
状态3 已绑定,未连接 0x02
状态4 已绑定,已连接 0x03
状态5 未知状态 0x04

报告蓝牙连接状态 0x3504

模组发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x35
数据长度 2 0x0002
数据 2 Data[0]:子命令 0x04
Data[1]:蓝牙状态
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

MCU返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x35
数据长度 2 0x0001
数据 1 Data[0]:子命令 0x04
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

55 aa 00 35 00 02 04 03 3d,模组同步蓝牙连接状态03-绑定已连接给MCU;
55 aa 03 35 00 01 04 3c,MCU回复接收成功。

获取蓝牙连接状态 0x3505

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x35
数据长度 1 0x0001
数据 1 Data[0]:子命令 0x05
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模块返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x35
数据长度 2 0x0002
数据 2 Data[0]:子命令 0x05
Data[1]:蓝牙状态
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

55 aa 03 35 00 01 05 3D,MCU主动查询当前蓝牙连接状态;
55 aa 00 35 00 02 05 03 3E,模组返回当前蓝牙连接状态03-绑定已连接。

关闭蓝牙通信功能 0x3506

使用该指令关闭蓝牙功能后,在不断电情况下,模组蓝牙功能不能被主动打开。
模组重启或断电后,关闭蓝牙仍然需要使用该指令,也就是单次有效。 

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x35
数据长度 2 0x0002
数据 2 Data[0]:子命令 0x06
Data[1]:关闭蓝牙通信功能(重启失效),0x00
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模块返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x35
数据长度 2 0x0002
数据 2 Data[0]:子命令 0x06
Data[1]:0-关闭成功,1-关闭失败
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

55 aa 03 35 00 02 06 00 3F,MCU发送关闭蓝牙功能;
55 aa 00 35 00 02 06 00 3C,模组回复操作成功。

BLE+X相关功能

背景与方案价值

  • 对于单点蓝牙门锁设备而言,无需额外单独购买网关,可以无缝支持Wi-Fi音视频和可视对讲功能;
  • 对工厂客户/方案商而言,只需对接一种方案即可同时具备两种通信能力产品(BLE+Wi-Fi),对接效率提高,且产品本身的竞争力同样获得提升;
  • 对消费者而言,配网过程和使用体验更加的友好,消费者无需额外购买网关,既可以体验到门锁远程功能;
  • 对涂鸦自身而言,支持多模联网方案,一是能满足用户实际的场景需求,二是方案本身具有灵活扩展的优势,可拓展更多场景;
  • BLE+Wi-Fi方案非常适用于家庭场景,本地可以通过BLE对门锁进行设置,蓝牙断开的情况下可以通过Wi-Fi链路实时掌握门锁状态。

相关流程图:

MCU 对接协议

  • 该功能与查询产品信息0x01指令的返回相关联,MCU需使能cap能力的bit6=1
  • 目前仅WBRU模组支持该方案,固件版本需v1.4.0及以上。

查询模组信息 0xD000

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0xD0
数据长度 2 0x0001
数据 1 Data[0]:子命令 0x00
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模块返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0xD0
数据长度 2 N
数据 N Data[0]:子命令 0x00
Data[1]:表示查询结果
 0x00:获取成功
 其他:获取失败,无后续数据
Data[2]:模组绑定状态,0-未绑定,1-绑定
Data[3]:X模组的类型,目前仅支持2和3
 0x01:NB模组
 0x02:Wi-Fi模组
 0x03:Cat.1模组
 0x04:Zigbee模组
 0x05:BLE模组
Data[4~n]:模组唯一标识
 当类型为WiFi模组:6字节的MAC地址;
 当类型为Cat.1模组:15字节的IMEI;
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

授权信息同步 0xD001

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0xD0
数据长度 2 N
数据 N Data[0]:子命令 0x01
Data[1]:加密算法
 0x00:AES128-CBC
 0x01:AES128-CCM
 0x02:其他扩展
Data[2~17]:随机数
Data[18~n]:授权加密信息-密文
 加密方式:AES, 具体算法由Data[1]决定
 key:共享秘钥前16字节
 iv:全0x00
 Padding规则:补齐非16整数倍相差的字节,
 缺n个字节就用n来填充

解密后为授权信息的json字符串,格式如下:
{
“uuid”:“xxxxxxx”, // uuid是16位
“auth_key”:“xxxxxxx”, // auth_key是32位
“psk_key”:“” // psk_key预留
}
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模块返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0xD0
数据长度 2 0x0023
数据 35 Data[0]:子命令 0x01
Data[1]:表示信息接收结果
 0x00:信息获取成功
 其他:获取失败,无后续数据
Data[2]:加密算法
 0x00:AES128-CBC
 0x01:AES128-CCM
 0x02:其他扩展
Data[3~34]:对16字节随机数做hash运算结果
 hash算法:hmac_sha256
 key:用共享秘钥
 key_len:32字节
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

激活信息同步 0xD002

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0xD0
数据长度 2 N
数据 N Data[0]:子命令 0x02
Data[1~n]:激活信息-密文
 加密方式:AES加密, 具体算法由加密方式决定
 key:共享秘钥前16字节
 iv:全0x00
 Padding规则:补齐非16整数倍相差的字节,
 缺n个字节就用n来填充

解密后为激活信息的json字符串,格式如下:
{
“devId”:“xxxx”,
“localKey”:“xxxx”,
“secKey”:“xxxx”,
“env”:“xxxx”,
“region”:"xxxx,
“ssid”:“xxxx”,
“pwd”:“xxxx”
}
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模块返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0xD0
数据长度 2 0x0002
数据 2 Data[0]:子命令 0x02
Data[1]:表示信息接收结果
 0x00:收到激活信息,正在激活中
 0x01:激活失败
 0x02:找不对对应SSID的路由
 0x03:路由器密码错误
 0x04:连接不上路由
 0x05:DHCP错误
 其他:其他错误码
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

共享秘钥协商 0xD003

  • 采用ECDH算法来协商秘钥,协商运算后秘钥为32字节,后续简称共享秘钥
  • 椭圆曲线使用:secp256r1
  • 协商双方各自生成公私秘钥对,通过该协议交换各自的公钥后,调用共享秘钥算法(自己的私钥 + 对端的公钥)计算出共享秘钥。

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0xD0
数据长度 2 0x0042
数据 66 Data[0]:子命令 0x03
Data[1]:椭圆曲线
 0x01:secp192r1
 0x02:secp224r1
 0x03:secp256r1
 0x04:secp256k1
Data[2~65]:Public Key,MCU生成的公钥
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0xD0
数据长度 2 0x0042
数据 66 Data[0]:子命令 0x03
Data[1]:椭圆曲线
 0x01:secp192r1
 0x02:secp224r1
 0x03:secp256r1
 0x04:secp256k1
Data[2~65]:Public Key,模组生成的公钥
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

数据透传功能(门锁-模组-猫眼)

  • 支持MCU查询模组信息,用于管控区分不同模组方案;
  • 支持缓存-透传锁控信息给猫眼,用于展示(例如电量信息、固件版本等);
  • 支持缓存-透传猫眼信息给锁控,用于管控区分不同猫眼方案;
  • 仅部分方案支持该指令,WBRU模组方案、可视对讲方案

锁控查询模组信息 0xD100

MCU发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0xD1
数据长度 2 0x0001
数据 1 Data[0]:子命令 0x00
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0xD1
数据长度 2 N
数据 N Data[0]:子命令 0x00
Data[1]:流媒体方案类型
 0x01:抓图
 0x02:推流
 0x03:p2p
Data[2]:硬件方案类型
 0x01:WBRU
 0x02:WBRL
 0x03:BK7252
 0x04:AC7916
 0x05:T31+7682
 0x06:T31+8720cs
 其他:待扩展
Data[3~n]:硬件版本信息
 格式:长度 + 硬件版本字符串
Data[n+1~m]:固件版本信息,支持多通道组合
 格式:通道号 + 长度 + 固件版本字符串
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:

同步锁控信息 0xD101

猫眼读取信息 0xD102

Coming soon

附录一:抓拍事件编码表

抓怕事件类型 对应事件编码值
防撬告警 0x0000
远程开门请求 0x0001
指纹开门试错 0x0002
密码开门试错 0x0003
卡片开门试错 0x0004
人脸开门试错 0x0005
掌纹开门试错 0x0006
指静脉开门试错 0x0007
指纹开锁 0x0008
密码开锁 0x0009
卡片开锁 0x000A
人脸开锁 0x000B
掌纹开锁 0x000C
指静脉开锁 0x000D
临时密码解锁 0x000E
动态密码解锁 0x000F
远程解锁 0x0010
离线密码解锁上报 0x0011
门铃请求上报 0x0012
劫持警告 0x0013
低电报警 0x0014
钥匙插入报警 0x0015
高温报警 0x0016
门铃 + 远程开门 0x0017
有人停留/逗留告警 0x0018
门锁被破坏 0x0019
特殊指纹开锁 0x001A
布防模式下开锁 0x001B

附录二:时效性

字节 含义 说明 举例
1 时效起始时间 unsigned int
4 字节(大端)
例如 unix 时间为:
123-456-789 = 0x075BCD15
若时效为永久有效,则起始时间为 0x386CD300
07
2 5B
3 CD
4 15
5 时效结束时间 unsigned int
4 字节(大端)
例如 unix 时间为:
999-999-999 = 0x3B9AC9FF
若时效为永久有效,则结束时间为 0x72BC9B7F
3B
6 9A
7 C9
8 FF
9 时效循环方式 0x00:不循环 0x01:天循环 0x02:周循环 0x03:月循环
10 循环标志位 1 不循环时 10~17
字节全部为 0
该字节
默认为 0x00
该字节
默认为 0x00
bit7:默认为 0
bit6:31 号
……
bit0:25 号
11 循环标志位 2 该字节
默认为 0x00
该字节
默认为 0x00
bit7:24 号
……
bit0:17 号
12 循环标志位 3 该字节
默认为 0x00
该字节
默认为 0x00
bit7:16 号
……
bit0:9 号
13 循环标志位 4 该字节
默认为 0x00
bit7:默认为 0
bit6:周六
……
bit1:周一
bit0:周日
bit7:8 号
……
bit0:1 号
14 一天中起始时间 1(小时数) 起始时间:8:30 08(十进制)
15 一天中起始时间 2(分钟数) 30(十进制)
16 一天中结束时间 1(小时数) 结束时间:20:30 20(十进制)
17 一天中结束时间 2(分钟数) 30(十进制)

添加/修改开锁方式时,时效性的循环方式和次数同时生效,但是一般仅使用以下两种情况:

  • 次数为 0x00,此时次数为永久有效,可仅处理时效的循环方式。
  • 时效的循环方式为 0x00,此时为不循环,可仅处理次数。

**示例:**设置2018-01-26 08:00:002018-08-08 09:56:32期间内,每周一至周五的早上 8:00 到 8:30 生效,则时效性为 5A 6A 6F 80 5B 6A 4D D0 02 00 00 00 3E 08 00 08 1E

  • 2018-01-26 08:00:00转换为 unix 时间为1516924800,即 0x5A6A6F80
  • 2018-08-08 09:56:32转换为 unix 时间为1533693392 ,即 0x5B6A4DD0
  • 时效的循环方式为:0x02-周循环
  • 循环天标志位 1 = 循环天标志位 2 = 循环天标志位 3 = 0x00
  • 循环天标志位 4 = 0x3E(周一至周五)
  • 一天中的起始时间 1 = 0x08,一天中的起始时间 2 = 0x00
  • 一天中的结束时间 1 = 0x08,一天中的结束时间 2 = 0x1E

周编码规则
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
保留 周六 周五 周四 周三 周二 周一 周日

协议修订记录

下表记录了 Wi-Fi 门锁设备的 MCU 对接协议相关修订说明。

版本 编写/修订说明 修订日期 备注
1.0.0 协议首版 2018.09.15 新增
1.0.1 增加支持多组临时密码的请求接口 2018.10.19 修改
1.0.2 1. 增加支持:多组临时密码接口返回面板0组密码时,增加返回字段
2. 增加组合开门方式的相关说明
2018.12.17 修改
1.0.3 增加获取DP缓存命令 2019.07.10 修改
1.0.4 在报告设备联网状态中增加低功耗状态 2019.07.13 修改
1.0.5 1. 增加离线动态密码
2. 增加上报MCU SN号
2019.09.09 修改
1.0.6 增加周期性临时密码(带schedule列表) 2019.10.10 修改
1.0.7 1.增加快速上报指令
2.增加ez和ap共存配网状态
3.查询产品信息增加配网方式字段
4.增加拍照锁相关功能
5.产品信息增加cap字段
6.增加模组重置状态通知
7.增加图片上传状态获取
2020.07.09 修改
1.0.8 增加支持运营商上报功能 20200713 修改
1.0.9 扩展图片上传相关的命令字适配单芯片拍照模组 20200721 修改
1.0.10 增加主动获取Wi-Fi状态、获取unix时间戳的协议 20200730 修改
1.0.11 1.修改图片上传逻辑,在收到模组回复的网络状态包时触发图片上传,
而非仅收到状态包为0x04时。
2.修改图片时间的关联逻辑,改为由模组关联,MCU传图和事件上报
同一时间
20200912 修改
1.0.12 增加修改debug等级的调试命令0xDB 20201014 修改
1.0.13 1.增加密码进制设置协议
2.新增新动态密码协议、多组云端临时密码协议
20210106 修改
1.0.14 0x64 中增加短视频及实时视频相关命令,修改抓拍类型的字段 20210125 修改
1.0.15 增加SPI产测相关指令 0xF0 20210224 修改
1.0.16 1.增加 0x65、0x66 两条配置图像参数的命令
2.取消快速上报类协议
20210226 修改
1.0.17 1.修改 64 命令中触发类型,取消短视频类型
2.增加 62 状态返回中停止推流的通知
20210327 修改
1.0.18 附录 1 增加 4 条状态 20210408 修改
1.0.19 1.废弃部分协议
2.状态数据单元变更为附录 3
3.新增模块拓展服务、蓝牙相关服务
20220518 修改
2.0.0 对各Wi-Fi门锁方案协议进行整合统一 2023.02.03 新版