WBRU 方案猫眼协议

更新时间:2024-02-01 02:16:00下载pdf

本文描述 猫眼与 WBRU 模组 之间音视频传输的通信协议及交互流程,有助于猫眼方案商或开发者更好地理解涂鸦设计猫眼对接方案与协议,提高对接效率与质量。

硬件说明

硬件接口

音视频对讲门锁方案硬件涉及 锁控、猫眼和 Wi-Fi 模组 三方,所需的硬件接口如下表所示。

接口名称 简称 功能说明 WBRU 引脚 备注
猫眼 SPI 接口 CS/SCK/MOSI/MISO 模组与猫眼间的 SPI 通信接口,例如音视频数据传输 PA7/PA8/PA9/PA10 按需
猫眼 UART 接口 TXD/RXD/GND 模组与猫眼间的 UART 通信接口,例如下行数据通知、猫眼休眠等 PA3/PA2/GND 按需
猫眼唤醒 GPIO WAKEUP_IO 唤醒猫眼,拉高 250ms 单脉冲信号 PA4 可选
猫眼续传通知 GPIO NOTIFY_IO 通知猫眼可发下一包,下降沿脉冲信号 PA19 可选
锁控 UART TXD/RXD/GND 模组与锁控间的串口协议传输 PA14/PA13/GND 必选

WBRU 模组引脚排布 如下图所示。更详细的硬件规格资料,参考 WBRU 模组规格书

WBRU 方案猫眼协议

硬件方案

根据上述硬件外设接口,支持组合成不同猫眼方案,例如仅传图、传视频、音视频对讲 等。本文梳理了典型方案,及其依赖的硬件接口与差异说明。

方案名称 能力 依赖硬件接口 差异描述
单 UART 方案 仅传图 锁控 UART 猫眼挂接在锁控端,通信模组只与锁控端通信。
单 SPI 方案 仅传图 SPI 猫眼唤醒由锁控端给电控制,下一包续传由 SPI 发送 0x67 指令查询。
SPI + 单 IO 方案 传图/传视频 SPI + notify_io 猫眼唤醒由锁控端给电控制,下一包续传由 notify_io 通知。
SPI + 双 IO 方案 传图/传视频 SPI + wakeup_io + notify_io 猫眼唤醒由 wakeup_io 通知,下一包续传由 notify_io 通知。
SPI + 猫眼串口 + 唤醒 IO 方案 传图/音视频对讲 SPI + 猫眼 UART + wakeup_io 猫眼唤醒由 wakeup_io 通知,下一包续传由 UART 通知。

各硬件方案的连接示意图如下所示:

单 UART 方案

WBRU 方案猫眼协议

单 SPI 方案

WBRU 方案猫眼协议

SPI + 单 IO 方案

WBRU 方案猫眼协议

SPI + 双 IO 方案

WBRU 方案猫眼协议

SPI + 猫眼串口 + IO 方案(音视频对讲)

WBRU 方案猫眼协议

串口参数

波特率 数据位 奇偶校验位 停止位 数据流控
猫眼串口:115200 bps
锁控串口:115200 / 9600 bps
8 1

SPI 参数

时钟频率 时钟模式 数据传输 cs 片选信号 数据宽度 主从设置
4M MODE0:模式 0
[CPOL=0,CPHA=0]
MSB 低电平有效 8 位 猫眼为主机
模组为从机

软件实现

猫眼需要实现以下逻辑:

  • 猫眼每次唤醒,需通过 0x63 指令查询模组状态,当一切就绪时方可通过 SPI 传输音视频数据。
  • 音视频媒体数据量太大,必须通过 SPI 传输,而不能通过串口传输。
  • SPI 发送尽量使用 DMA 功能,单字节发送效率较低。
  • 猫眼可基于 0x63 指令发送后模组的回复,校准时间。
  • 如果支持音频,需要对接实现音频数据下发指令。
  • 如果支持二维码扫描,需要实现二维码相关指令。

以下简单示意了几种典型场景的交互流程,详细流程见下文时序图。

锁控 MCUWi-Fi 模组猫眼App云端查询产品信息获取信息成功opt[配置信息交互]生成二维码图像扫描二维码解析二维码,生成配网-信息同步配网信息配网激活opt[二维码配网]触发抓拍(0x64)返回模组处理结果(0-启动,其他-失败)建流成功猫眼传输音视频数据推流对讲,下行音频同步下行音频抓拍结束,返回抓拍结果opt[抓拍流程]锁控 MCUWi-Fi 模组猫眼App云端

通信协议

帧格式说明

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

字段说明:

  • 字节序:大端模式,所有大于 1 个字节的数据均采用大端格式传输。
  • 版本:版本用于拓展功能使用,为兼容新老版本协议,当前默认 0x00,模组暂不校验该字段。

指令汇总表

指令名称 指令 发起方向 备注/说明
猫眼开启发送 0x63 猫眼->模组 -
音视频数据发送 0x61 猫眼->模组 无应答帧
状态查询 0x67 猫眼->模组 猫眼 SPI 接口使用,查询可发下一包数据状态
通知猫眼上传数据 0x69 模组->猫眼 猫眼 UART 接口使用,不处理应答帧
音频数据下发 0x68 模组->猫眼 无应答帧
推流结束通知 0x6F 模组->猫眼 -
二维码配网 0x6A 猫眼->模组 -
触发抓拍 0x64 MCU->模组 锁控 MCU 使用指令,猫眼不使用
抓拍结果通知 0x62 模块->MCU 锁控 MCU 使用指令,猫眼不使用
触发传图 0x60 MCU->模组 锁控 MCU 使用指令,猫眼不使用
0x64 指令的前身

系列方案对接指令一览表

指令 单串口 单 SPI SPI + 单 IO SPI + 双 IO SPI + UART + IO
0x63
0x61
0x67
0x69
0x68
0x6F
0x6A
0x60

猫眼开启发送 0x63

猫眼上电初始化完成后,通过发送该指令来开启音视频数据传输,告知模组音视频相关参数,同时也可获取系统所需时间参数。

  1. 猫眼通过该指令上报支持的 音视频参数。如果 仅支持图片/视频传输,则无需填写音频参数字段,数据长度为 0x0006。如果支持音视频,则需填写所有字段,数据长度为 0x0010
  2. 模块从收到 0x63 指令到 就绪状态 前需一段时间。非音视频对讲方案 猫眼需按一定间隔(建议 200ms)反复来查询,硬件方案如有猫眼串口则无需反复查询,模组可通过串口同步当前状态。
    • 当返回状态为 就绪 时,则可使用 0x61 指令传输音视频数据。
    • 当返回状态为 联网中,则表示模组正在与云端建立视频连接,猫眼需到下一周期继续查询状态。
    • 当返回状态为 连接/操作失败,则表示此次连接中断/失败,猫眼可终止本次流程,进入休眠。
  3. 猫眼需根据 0x63 指令回复字段中的 分包大小 来处理每次上传的数据,切记不要写成固定大小上传。

猫眼发送(SPI 或猫眼串口):

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
指令 1 0x63
数据长度 2 0x0006 + NN 为 0x00 或者 0x0A
  • N 为 0,表示仅支持图片/视频,无需音频字段数据
  • N 不为 0,表示支持音视频
数据 Data[0]:获取时间类型
  • 0x00:本地时间
  • 0x01:格林时间
Data[1]:图像分辨率
  • 0x00:320 × 240
  • 0x01:640 × 480
  • 0x02:1280 × 720
Data[2]:视频类型
  • 0x02:H264
  • 0x03:MJPEG
Data[3]:视频帧率 fps,按需填写
Data[4~5]:视频码率
  • 64:64K
  • 128:128K
  • 256:256K
  • 512:512K
  • 768:768K
  • 1024:1M
  • 1536:1.5M
  • 2048:2M
Data[6]:音频类型
  • 0x65:PCM
  • 0x6A:G711.A
Data[7]:音频帧率 fps,按实际填写
Data[8~11]:音频采样率
  • 8000:8K
  • 11000:11K
  • 12000:12K
  • 16000:16K
  • 22000:22K
  • 24000:24K
  • 32000:32K
  • 44000:44K
  • 48000:48K
Data[12]:音频位深度
  • 0x08:8bit
  • 0x10:16bit
Data[13]:音频通道,默认 0x00
Data[14]:旋转角度
  • 0x00:默认值
  • 0x01:0°
  • 0x02:90°
  • 0x03:180°
  • 0x04:270°
Data[15]:保留,默认 0x00
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组返回:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
指令 1 0x63
数据长度 2 0x000E
数据 14 Data[0]:当前状态
  • 0x00:未就绪
  • 0x01:联网中
  • 0x02:就绪(可通过 0x61 发送数据)
  • 0x03:数据上传中
  • 0x04:操作失败(停止传输和查询)
Data[1]:抓拍类型
  • 0x01:抓拍图片
  • 0x02:开启实时视频
  • 0x03:二维码配网通知
Data[2~5]:分包大小,音视频数据发送单包最大字节数,超过需分包
Data[6]:获取时间结果标识
  • 0x00:获取失败
  • 0x01:获取成功
Data[7] 为年,0x00 表示 2000 年
Data[8] 为月,从 1 开始到 12 结束
Data[9] 为日,从 1 开始到 31 结束
Data[10] 为时,从 0 开始到 23 结束
Data[11] 为分,从 0 开始到 59 结束
Data[12] 为秒,从 0 开始到 59 结束
Data[13] 为星期,从 1 开始到 7 结束,1 代表星期一
校验和 从帧头开始,按字节求和,得出的结果对 256 求余

示例

  • 仅传图/视频,分辨率:320 × 240,MJPEG,视频帧率 15 fps,视频码率 1M,猫眼需获取格林时间。
    55 aa 00 63 00 06 01 00 03 0F 04 00 sum

  • 音视频,视频参数同上,音频为 G711.A,音频帧率 15 fps,采样率 8K,位深 8 bits,音频通道默认,旋转角度默认。

    55 aa 00 63 00 10 01 00 03 0F 04 00 6A 0F 00 00 1F 40 08 00 00 00 sum

  • 模组回复:

    55 aa 00 63 00 0e 01 02 00 00 02 00 01 xx xx xx xx xx xx xx sum。状态为联网中,开启实时视频

    55 aa 00 63 00 0e 02 02 00 00 02 00 01 xx xx xx xx xx xx xx sum。状态为就绪,开启实时视频

    55 aa 00 63 00 0e 04 02 00 00 02 00 01 xx xx xx xx xx xx xx sum。状态为操作失败

音视频数据发送 0x61

该指令用于猫眼通过 SPI/UART 总线给模组发送音视频媒体数据。

  • UART 传输时,单包图片大小限制为 15K,仅适用于串口传图方案
  • 传输时,根据 0x63 返回的单包大小进行分包传输分包标志、分包序号以及帧类型 需按协议正确填写,超出大小将会导致传输失败。
  • 开启传输时,模块会启动接收超时定时,每包数据间超时等待间隔为 5s。若 5s 未收到下包内容,则会退出接收,通过 0x62 指令返回失败给锁控 MCU。
  • 上传数据为音频数据 时,图片序号按当前图片序号值填写即可,不做累加,分片标志和分片序号填 0 。一般音频数据不存在分包情况。

猫眼发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
指令 1 0x61
数据长度 2 5+N
数据 5+N Data[0~1]:图片序号,从 0 开始递增
Data[2]:分包标志
  • 0x00:不分包
  • 0x01:分包开始
  • 0x02:分包内容
  • 0x03:分包结束
Data[3]:分包序号,从 0 开始递增
Data[4]:帧格式
  • 0x00:P/B 帧
  • 0x01:I 帧/MJPEG
  • 0x03:音频帧
Data[5~N]:音频或视频数据,最大 8192 字节
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例

模组返回的 0x63 指令中,表示单包数据最大支持 8192 字节。假如要上传一张 23552 字节的 MJPEG 图片(图片序号默认从 0 开始累加),则使用 0x61 指令发送的编码数据为:

  • 55 aa 00 61 20 05 00 00 01 00 01 xx xx .. xx xx sum。分包标志为 1,分包序号为 0,索引为 0~8192

  • 55 aa 00 61 20 05 00 00 02 01 01 xx xx .. xx xx sum。分包标志为 2,分包序号为 1,索引为 8192~16383

  • 55 aa 00 61 1C 05 00 00 03 02 01 xx xx .. xx xx sum。分包标志为 3,分包序号为 2,索引为 16384~end

可上传状态查询 0x67

适用于单 SPI 硬件猫眼方案,单 SPI 方案需猫眼通过 SPI 查询方式来读取可继续上传状态。其他方案均可通过 GPIO 或串口告知猫眼可继续上传音视频媒体数据。

  • 使用 0x61 指令发送一包数据后,通过该指令查询数据包是否已经上传完成。当模组回复已处于可接收数据的状态时,方可进行下一帧数据的发送。
  • 查询到就绪状态的时长,与您当前的网络状态有关。
  • 为避免 SPI 频繁读写引起从机数据接收紊乱,该指令的查询间隔建议在 10ms 以上。

猫眼 SPI 发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
指令 1 0x67
数据长度 2 0x0001
数据 1 Data[0]:查询类型,固定 0x00
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模组 SPI 回复:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
指令 1 0x67
数据长度 2 0x0002
数据 2 Data[0]:状态
  • 0x00:未就绪
  • 0x01:联网中
  • 0x02:就绪(可通过 0x61 发数据)
  • 0x03:数据上传中
  • 0x04:抓拍失败(停止查询与传输)
Data[1]:当前上传完的分片序号
校验和 从帧头开始,按字节求和,得出的结果对 256 求余

示例

  • 55 aa 00 67 00 01 00 sum,猫眼查询可传下一包数据状态。
  • 55 aa 00 67 00 02 01 00 sum,模组返回联网中。
  • 55 aa 00 67 00 02 02 03 sum,模组返回就绪,当前已上传完成的分包序号为 3。

通知猫眼上传数据 0x69

该指令由模组通过 猫眼串口 主动通知猫眼可 继续上传音视频数据 或通知存有 App 或者小程序端对讲的 下行音频数据

  • 猫眼接收到指令后,如果只有上传请求,则通过 SPI 的 0x61 指令继续上传音频或视频数据。如果有音频下发数据,则通过 SPI 读取下行音频数据。
  • 为了保证速率,模组不会处理 0x69 的回复帧。猫眼在不影响通信速率的情况下可选择进行回复,以便开发调试阶段排查问题。
  • 模组 SPI 支持全双工通信,支持猫眼上传数据的同时传输下行音频给对端。

模块串口发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
指令 1 0x69
数据长度 2 0x0004
数据 4 Data[0]:上传请求,固定 0x00
Data[1]:下行音频数据标识
  • 0x00:无音频下发
  • 0x01:有音频下发
Data[2~3]:音频数据长度
  • 标识为 0 时无效,数据为 0x00
  • 标识为 1 时,为音频数据长度
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

猫眼串口回复:

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

音频数据下发 0x68

在对讲模式时,将 App 端下行音频数据同步传输给猫眼,通过喇叭外放。该指令仅支持通过 SPI 传输,猫眼必须在收到 0x69 的通知(下行音频数据标识为 1)后才能主动读取,否则读取到的会是错误数据。

模组 SPI 支持全双工,获取下行音频数据的同时可传音频或视频数据,亦即 MOSI(猫眼上传的音频或视频数据,0x61 指令),MISO(模组发送的下行音频数据 0x68 指令)。以具体数据为例:

  1. 猫眼收到 0x69 指令上传通知时,获取是否有下行音频以及对应长度(以下简称 A)。
  2. 通过返回的音频数据长度,可确认音频数据下发 0x68 指令的长度=7 + 9 + A
  3. 判断 0x68 协议长度是否大于 0x61 上传数据协议的长度。如果 0x68 长度更长,则在 0x61 指令数据后面补相应的 0(补对应数据的 CLK)。

模组 SPI 发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
指令 1 0x68
数据长度 2 9+N
数据 9+N Data[0]:音频类型
  • 0x00:G711.A
  • 0x01:PCM
Data[1-8]:保留,默认 0x00
Data[9~N]:音频数据
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

推流结束通知 0x6F

当整个音视频流程结束时,模组会通过 猫眼串口 发送该指令 通知推流结束,可进入休眠状态,以便节省功耗。

模组串口发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
指令 1 0x6F
数据长度 2 0x0001
状态 1 0x00:推流结束,通知猫眼进行休眠
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

猫眼回复:

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

示例

  • 55 aa 00 6F 00 01 00 3F,模组通知猫眼推流结束,猫眼可进入休眠。
  • 55 aa 00 6F 00 00 3C,猫眼回复接收成功。

二维码配网 0x6A

猫眼将扫描到的二维码数据解析后,通过该指令将结果回传给模组,使其进入配网流程。

  1. 猫眼 SPI 及猫眼 UART 接口均支持该协议。
    • 如果通过 UART,模组接收后会回复应答。
    • 如果通过 SPI 发送,由于主从模式的原因,收到该指令后模组不会做应答。
  2. 扫描二维码的图片是 YUV 格式,数据量较大。由于模组内存限制,解析二维码(建议使用开源的 Zbar 库)图片获取配网信息只能由猫眼端实现。
  3. 猫眼扫描到二维码时,如果支持语音,可以提示扫码成功或者“滴”一声。

猫眼 UART/SPI 发送:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
指令 1 0x6A
数据长度 2 N
数据 N 配网信息 JSON 字符串,见 字段说明
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模块回复:

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
指令 1 0x6A
数据长度 2 0x0001
数据 1
  • 0x00:信息获取成功
  • 0x01:信息获取失败
  • 0x02:退出二维码配网,进入路由器连接状态
  • 0x03:模块进入二维码配网状态
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

配网 JSON 字符串,格式示例:{**p**:**xxxxxxxx**,**s**:**yyyyyyyy**,**t**:**zzzzzzzz**}

字段 说明
p 表示路由器密码为 xxxxxxxx
s 表示路由器 SSID 为 yyyyyyyy
t 表示配网 token 为 zzzzzzzz

触发抓拍 0x64-锁控 MCU 用

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

  • 在本次触发抓拍未结束前,再次接收到 0x64 指令模组会直接返回失败,MCU 需控制逻辑未结束前不可再次发送 0x64

  • 抓拍事件编码,详见 附录一:抓拍事件编码表

  • 可通过子指令决定抓拍方式,支持抓图、开启实时视频。

  • 模组会通过 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门铃呼叫(抓图,仅 T31 方案支持)
  • 0x04门铃呼叫(短视频,仅 T31 方案支持)
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-锁控 MCU 用

模组接收到 0x64 指令开启抓拍后,对应的触发抓拍或视频推流相关结果将通过 0x62 指令通知 MCU。如果结果成功,MCU 还需上传对应的记录,才能成功关联到对应图片或视频。 基于相同的时间戳关联,记录型数据上传的时间戳用 0x62 指令返回的时间戳

  • 当触发类型为图片时:
    • 通知结果为 0 表示图片上传成功,此时可断电。
  • 当触发类型为视频时:
    • 通知结果为 0x00 表示视频流建立连接,开始推流,此时不可断电。
    • 通知结果为 0x05 表示推流结束,此时可断电。

模组发送

字段 字节数 说明
帧头 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 结果返回:失败时,时间数据无效
  • 0x00:图片上传成功/开始推流
  • 0x01:网络异常
  • 0x02:大小超出限制
  • 0x03:抓拍超时
  • 0x04:其它原因导致失败
  • 0x05:推流结束
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

MCU 回复

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

触发传图指令 0x60-锁控 MCU 用

锁控端有事件触发时,通过该指令通知模组开启图片传输相关服务。

  • 事件编码表,详见 附录一:抓拍事件编码表

  • 每次有图片传输时,都需要先发送此指令通知模块,模块开启图片传输功能。

  • 当事件通知是携带图片的事件时,模块会定时 30s 等待 MCU 上传图片。若超过 30s 还未收到图片信息,则会退出图片接收状态,通过 0x62 指令返回失败给 MCU。

  • 单次事件通知只触发一张图片的传输,若需要传输多张图片,需要重复图片上传流程。

MCU 发送:

字段 长度 字段值
帧头 2 0x55aa
版本 1 0x00
指令 1 0x60
数据长度 2 0x0004
数据 4 Data [0~1]:事件编码,参考 附录一:抓拍事件编码表
Data[2]:是否带图片
  • 0x00:不带图片
  • 0x01:携带图片
Data[3]:保留,默认 0x00
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

模块回复:

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

协议应用流程图

协议的设计是针对不同的音视频门锁方案,在某一种特定的门锁解决方案中,并不一定会使用到所有的音视频传输协议,需要根据实际情况自主选择。以下列举了常用的拍照门锁协议流程,可进行参考。

二维码配网

二维码配网流程如下所示:

锁控 MCUWi-Fi 模组猫眼App云端上电上电触发配网发送 0x63 指令回复 0x63 指令,通知猫眼获取二维码信息生成配网二维码扫描二维码,生成 YUV格式数据使用算法进行二维码数-据解析,生成配网信息发送 0x6a 指令,将二维码配网数据同步给模组回复 0x6a 指令(串口连接方式回复,SPI 方式不回复)配网激活同步 Wi-Fi 配网状态(02 0304)配网成功交互处理锁控 MCUWi-Fi 模组猫眼App云端

传图方案-单串口

该方案是一种 低成本的抓图方案,适用于部分不带 SPI 接口的 Wi-Fi 模组。猫眼接在锁控端,由其控制抓图拍照,Wi-Fi 模组负责上传至云端。

猫眼锁控 MCUWi-Fi 模组猫眼抓图触发抓图,上电上电联网发送 0x64 指令触发抓拍回复 0x64 指令处理结果发送 0x63 指令查询状态建流成功回复 0x63 就绪状态发送 0x61 指令,传输数据包回复 0x61指令,可发送下一分包数据loop[分包传输]发送 0x62 指令,通知抓拍结果回复 0x62根据实际场景,上报开门记录opt[记录上传]使用完成,控制模组断电休眠猫眼锁控 MCUWi-Fi 模组

传图方案-单 SPI

该方案只支持传图,Wi-Fi 模组与锁控 MCU 间通过串口通信,通过 SPI 与猫眼模组通信。

开始传输前,猫眼需通过 0x63 指令查询模组是否处于就绪状态(连云建流成功)。当模组返回状态为 0x02 就绪后,猫眼通过 0x61 指令分包传输数据。需要通过 0x67 指令查询模组是否处于可接收下一包数据状态,只有获取成功后才可传输下一分包数据,直到所有的图片数据都传输完成。

锁控 MCUWi-Fi 模组猫眼上电上电发送 0x64 指令,触发抓拍图片/视频回复 0x64 指令发送 0x63 指令,触发推流请求回复 0x63 状态与抓拍类型loop[查询就绪状态]发送 0x61 指令,传输数据发送 0x67 查询传图状态,直到就绪,继续下一包回复 0x67 状态,直到就绪状态loop[10ms 以上间隔状态查询]loop[分包传输]通过 0x62 指令返回抓拍结果(传图时,建流成功返回结果)回复 0x62 指令按需上报告警/开门记录,云端关联图片opt[记录上传,时间戳需与 0x62返回的相同]断电断电锁控 MCUWi-Fi 模组猫眼

推流方案-SPI + 单 IO

该方案适用于猫眼模组端缺少串口的场景,可上传图片或视频。

  • Wi-Fi 模组与猫眼的上下电,均由锁控端控制。
  • 如果抓拍类型是抓拍图片,传输时的下一包数据通知方式,猫眼等待 notify_io 的状态通知,或可使用 0x67 指令主动查询就绪状态。
  • 音视频数据的下一包数据传输,猫眼端需要等待 notify_io 状态通知。
  • 音视频传输时,猫眼在上电后需要一直供电,客户可根据实际功耗因素等待锁控控制休眠或 120s 后主动休眠。
锁控 MCUWi-Fi 模组猫眼上电上电发送 0x64 指令,触发抓拍图片/视频回复 0x64 指令发送 0x63 指令,触发推流请求,并重复查询状态直到就绪回复 0x63 指令,直到就绪状态loop[查询就绪状态]发送 0x61 指令,传输数据等待 IO 信号notify_io 通知可传下一分包loop[分包传输]发送 0x61 指令,传输音视频数据等待 IO 信号notify_io 通知可传下一分包loop[分包传输]alt[传输图片][传输音视频]通过 0x62 指令返回结果(建流成功)回复 0x62 指令按需上报告警/开门记录,云端关联图片发送 0x62指令,返回结果(推流停止)回复 0x62 指令断电断电锁控 MCUWi-Fi 模组猫眼

推流方案-SPI + 双 IO

该方案适合猫眼模组缺少串口,但 GPIO 相对富裕的场合。猫眼 SPI 用于音视频传输,GPIO 口分别用于唤醒猫眼,下一包续传通知。

传输视频时,猫眼唤醒之后开启 5s 定时,若定时时间内未收到下一包数据续传通知,则进入休眠,等待重新被唤醒。

锁控 MCUWi-Fi 模组猫眼上电发送 0x64 指令,触发抓拍图片/视频回复 0x64 指令wakeup_io 口脉冲输出唤醒猫眼发送 0x63 指令,触发推流请求,并重复查询状态直到就绪回复 0x63 指令,直到就绪状态loop[状态查询]发送 0x61 指令,传输数据等待 IO 信号notify_io 通知可传下一分包loop[分包传输]通过 0x62 指令返回抓拍结果(建流成功)回复 0x62 指令按需上报告警/开门记录,云端关联图片发送 0x62 指令,返回结果(推流停止)回复 0x62 指令断电断电锁控 MCUWi-Fi 模组猫眼

对讲方案-SPI + UART + 单 IO

该方案适合门锁音视频对讲的应用场合,猫眼 SPI 用于音视频数据的传输,猫眼串口用于抓拍数据的传输发起结束,续传通知等,GPIO 口用于猫眼唤醒。通过多端口的共同作用,加快音视频传输速度。猫眼必须支持串口,才可实现音频对讲,缺少串口,无法支持 App 端的下行音频数据。

锁控 MCUWi-Fi 模组猫眼上电发送 0x64 指令,触发抓拍视频回复 0x64 指令wakeup_io 口脉冲输出唤醒猫眼猫眼 UART 发送 0x63 指令,上传猫眼信息猫眼 UART 回复 0x63 指令,返回是否建流成功,并通知上传第一包视频数据猫眼 SPI 发送 0x61 指令,上传音视频数据等待串口通知猫眼 UART 发送 0x69 指令,通知猫眼上传下一帧loop[分包传输]收到查看视频指令wakeup_io 输出脉冲,唤醒猫眼猫眼 UART 发送 0x63 指令,上传猫眼信息猫眼 UART 回复 0x63 指令,返回是否建流成功,并重新上传视频数据猫眼 SPI 发送 0x61 指令,上传音视频数据猫眼 UART 发送 0x69指令,通知猫眼上传下一帧,音频标志位置位猫眼 SPI 发送 0x68 指令,下发音频数据到猫眼读取 SPI 数据猫眼 UART 发送 0x69 指令,通知猫眼上传下一帧,0x69指令音频标志位不置位alt[有音频数据下发]loopalt[客户端单击查看]通过猫眼 UART 发送 0x6F 指令,结束传输猫眼 UART 回复 0x6F 指令休眠通过 0x62 指令返回抓拍结果(传图时/传视频时,建流成功返回结果)回复 0x62 指令按需上报告警/开门记录,云端关联图片断电锁控 MCUWi-Fi 模组猫眼

SPI 采用全双工方式进行通信,上传图片的同时获取音频下发数据。猫眼收到 0x69 指令时,通过该指令的音频数据长度,确认 0x68 协议长度是否大于上传时 0x61 的长度。若 0x68 长度更长,则在 0x61 指令数据后面补相应的 0

附录 一:抓拍事件编码表

事件类型 事件编码值 事件类型 事件编码值
防撬告警 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
遥控开锁 0x001C 虹膜开锁 0x001D
机械钥匙开锁 0x001E - -

更新记录

版本 修改内容 修改日期 备注
1.0.0 初版 2024 年 1 月 31 日 首次发布