更新时间: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 模组规格书。
根据上述硬件外设接口,支持组合成不同猫眼方案,例如仅传图、传视频、音视频对讲 等。本文梳理了典型方案,及其依赖的硬件接口与差异说明。
方案名称 | 能力 | 依赖硬件接口 | 差异描述 |
---|---|---|---|
单 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 方案
单 SPI 方案
SPI + 单 IO 方案
SPI + 双 IO 方案
SPI + 猫眼串口 + IO 方案(音视频对讲)
波特率 | 数据位 | 奇偶校验位 | 停止位 | 数据流控 |
---|---|---|---|---|
猫眼串口:115200 bps 锁控串口:115200 / 9600 bps |
8 | 无 | 1 | 无 |
时钟频率 | 时钟模式 | 数据传输 | cs 片选信号 | 数据宽度 | 主从设置 |
---|---|---|---|---|---|
4M | MODE0 :模式 0[CPOL=0,CPHA=0] |
MSB | 低电平有效 | 8 位 | 猫眼为主机 模组为从机 |
猫眼需要实现以下逻辑:
0x63
指令查询模组状态,当一切就绪时方可通过 SPI 传输音视频数据。0x63
指令发送后模组的回复,校准时间。以下简单示意了几种典型场景的交互流程,详细流程见下文时序图。
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55AA |
版本 | 1 | 升级扩展用,默认 pv :0x00 |
指令 | 1 | 具体帧类型 |
数据长度 | 2 | Len 高 8 位 Len 低 8 位 |
数据 | N | - |
校验和 | 1 | 从帧头开始,按字节求和,得出的结果对 256 求余 |
字段说明:
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 | ✔ | ✖ | ✖ | ✖ | ✖ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
指令 | 1 | 0x63 |
数据长度 | 2 | 0x0006 + N ,N 为 0x00 或者 0x0A
|
数据 | Data[0]:获取时间类型
Data[4~5]:视频码率
Data[8~11]:音频采样率
Data[14]:旋转角度
|
|
校验和 | 1 | 从帧头开始,按字节求和,得出的结果对 256 求余 |
模组返回:
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
指令 | 1 | 0x63 |
数据长度 | 2 | 0x000E |
数据 | 14 | Data[0]:当前状态
Data[6]:获取时间结果标识
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
。状态为操作失败
该指令用于猫眼通过 SPI/UART 总线给模组发送音视频媒体数据。
0x63
返回的单包大小进行分包传输,分包标志、分包序号以及帧类型 需按协议正确填写,超出大小将会导致传输失败。0x62
指令返回失败给锁控 MCU。猫眼发送:
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
指令 | 1 | 0x61 |
数据长度 | 2 | 5+N |
数据 | 5+N | Data[0~1]:图片序号,从 0 开始递增Data[2]:分包标志
0 开始递增Data[4]:帧格式
|
校验和 | 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
适用于单 SPI 硬件猫眼方案,单 SPI 方案需猫眼通过 SPI 查询方式来读取可继续上传状态。其他方案均可通过 GPIO 或串口告知猫眼可继续上传音视频媒体数据。
0x61
指令发送一包数据后,通过该指令查询数据包是否已经上传完成。当模组回复已处于可接收数据的状态时,方可进行下一帧数据的发送。猫眼 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]:状态
|
校验和 | 从帧头开始,按字节求和,得出的结果对 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。该指令由模组通过 猫眼串口 主动通知猫眼可 继续上传音视频数据 或通知存有 App 或者小程序端对讲的 下行音频数据。
0x61
指令继续上传音频或视频数据。如果有音频下发数据,则通过 SPI 读取下行音频数据。0x69
的回复帧。猫眼在不影响通信速率的情况下可选择进行回复,以便开发调试阶段排查问题。模块串口发送:
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
指令 | 1 | 0x69 |
数据长度 | 2 | 0x0004 |
数据 | 4 | Data[0]:上传请求,固定 0x00 Data[1]:下行音频数据标识
|
校验和 | 1 | 从帧头开始,按字节求和,得出的结果对 256 求余 |
猫眼串口回复:
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
指令 | 1 | 0x69 |
数据长度 | 2 | 0x0000 |
校验和 | 1 | 从帧头开始,按字节求和,得出的结果对 256 求余 |
在对讲模式时,将 App 端下行音频数据同步传输给猫眼,通过喇叭外放。该指令仅支持通过 SPI 传输,猫眼必须在收到 0x69
的通知(下行音频数据标识为 1
)后才能主动读取,否则读取到的会是错误数据。
模组 SPI 支持全双工,获取下行音频数据的同时可传音频或视频数据,亦即 MOSI(猫眼上传的音频或视频数据,0x61
指令),MISO(模组发送的下行音频数据 0x68
指令)。以具体数据为例:
0x69
指令上传通知时,获取是否有下行音频以及对应长度(以下简称 A
)。0x68
指令的长度=7 + 9 + A
。0x68
协议长度是否大于 0x61
上传数据协议的长度。如果 0x68
长度更长,则在 0x61
指令数据后面补相应的 0
(补对应数据的 CLK)。模组 SPI 发送:
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
指令 | 1 | 0x68 |
数据长度 | 2 | 9+N |
数据 | 9+N | Data[0]:音频类型
0x00 Data[9~N]:音频数据 |
校验和 | 1 | 从帧头开始,按字节求和,得出的结果对 256 求余 |
当整个音视频流程结束时,模组会通过 猫眼串口 发送该指令 通知推流结束,可进入休眠状态,以便节省功耗。
模组串口发送:
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 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
,猫眼回复接收成功。猫眼将扫描到的二维码数据解析后,通过该指令将结果回传给模组,使其进入配网流程。
猫眼 UART/SPI 发送:
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
指令 | 1 | 0x6A |
数据长度 | 2 | N |
数据 | N | 配网信息 JSON 字符串,见 字段说明。 |
校验和 | 1 | 从帧头开始,按字节求和,得出的结果对 256 求余 |
模块回复:
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
指令 | 1 | 0x6A |
数据长度 | 2 | 0x0001 |
数据 | 1 |
|
校验和 | 1 | 从帧头开始,按字节求和,得出的结果对 256 求余 |
配网 JSON 字符串,格式示例:{**p**:**xxxxxxxx**,**s**:**yyyyyyyy**,**t**:**zzzzzzzz**}
字段 | 说明 |
---|---|
p | 表示路由器密码为 xxxxxxxx |
s | 表示路由器 SSID 为 yyyyyyyy |
t | 表示配网 token 为 zzzzzzzz |
当有事件触发时,锁控 MCU 可通过此指令通知模组需触发抓拍,模组收到此指令后开启抓拍相关功能。
在本次触发抓拍未结束前,再次接收到 0x64
指令模组会直接返回失败,MCU 需控制逻辑未结束前不可再次发送 0x64
。
抓拍事件编码,详见 附录一:抓拍事件编码表。
可通过子指令决定抓拍方式,支持抓图、开启实时视频。
模组会通过 0x62
指令,将抓拍结果返回给 MCU。如果抓拍成功,MCU 还需上传对应的记录,才能成功关联到对应图片或视频。基于相同的时间戳关联,记录型数据上传的时间戳用 0x62
指令返回的时间戳。
MCU 发送:
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
指令 | 1 | 0x64 |
数据长度 | 2 | 0x01 + 0x05 + 0x07 |
数据 | 1 | 子指令默认:0x00 |
2 | 抓拍事件编码,附录一:抓拍事件编码表
|
|
1 | 抓拍类型:
|
|
1 | 保留字段,默认 0x00 |
|
1 | 保留字段,默认 0x00 |
|
7 | 记录型数据时间信息,类型 + 时间,共计 7 字节。 Data[0] 为上报时间类型,定义如下:
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 | 表示接收处理结果
|
校验和 | 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
模组接收到 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 | 结果返回:失败时,时间数据无效
|
|
校验和 | 1 | 从帧头开始,按字节求和,得出的结果对 256 求余 |
MCU 回复:
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
指令 | 1 | 0x62 |
数据长度 | 2 | 0x0001 |
数据 | 1 |
|
校验和 | 1 | 从帧头开始,按字节求和,得出的结果对 256 求余 |
锁控端有事件触发时,通过该指令通知模组开启图片传输相关服务。
事件编码表,详见 附录一:抓拍事件编码表。
每次有图片传输时,都需要先发送此指令通知模块,模块开启图片传输功能。
当事件通知是携带图片的事件时,模块会定时 30s 等待 MCU 上传图片。若超过 30s 还未收到图片信息,则会退出图片接收状态,通过 0x62
指令返回失败给 MCU。
单次事件通知只触发一张图片的传输,若需要传输多张图片,需要重复图片上传流程。
MCU 发送:
字段 | 长度 | 字段值 | |
---|---|---|---|
帧头 | 2 | 0x55aa | |
版本 | 1 | 0x00 | |
指令 | 1 | 0x60 | |
数据长度 | 2 | 0x0004 | |
数据 | 4 | Data [0~1]:事件编码,参考 附录一:抓拍事件编码表 Data[2]:是否带图片
0x00 |
|
校验和 | 1 | 从帧头开始,按字节求和,得出的结果对 256 求余 |
模块回复:
字段 | 长度 | 字段值 | |
---|---|---|---|
帧头 | 2 | 0x55aa | |
版本 | 1 | 0x00 | |
指令 | 1 | 0x60 | |
数据长度 | 2 | 0x0001 | |
数据 | 1 |
|
|
校验和 | 1 | 从帧头开始,按字节求和,得出的结果对 256 求余 |
协议的设计是针对不同的音视频门锁方案,在某一种特定的门锁解决方案中,并不一定会使用到所有的音视频传输协议,需要根据实际情况自主选择。以下列举了常用的拍照门锁协议流程,可进行参考。
二维码配网流程如下所示:
该方案是一种 低成本的抓图方案,适用于部分不带 SPI 接口的 Wi-Fi 模组。猫眼接在锁控端,由其控制抓图拍照,Wi-Fi 模组负责上传至云端。
该方案只支持传图,Wi-Fi 模组与锁控 MCU 间通过串口通信,通过 SPI 与猫眼模组通信。
开始传输前,猫眼需通过 0x63
指令查询模组是否处于就绪状态(连云建流成功)。当模组返回状态为 0x02
就绪后,猫眼通过 0x61
指令分包传输数据。需要通过 0x67
指令查询模组是否处于可接收下一包数据状态,只有获取成功后才可传输下一分包数据,直到所有的图片数据都传输完成。
该方案适用于猫眼模组端缺少串口的场景,可上传图片或视频。
notify_io
的状态通知,或可使用 0x67
指令主动查询就绪状态。notify_io
状态通知。该方案适合猫眼模组缺少串口,但 GPIO 相对富裕的场合。猫眼 SPI 用于音视频传输,GPIO 口分别用于唤醒猫眼,下一包续传通知。
传输视频时,猫眼唤醒之后开启 5s 定时,若定时时间内未收到下一包数据续传通知,则进入休眠,等待重新被唤醒。
该方案适合门锁音视频对讲的应用场合,猫眼 SPI 用于音视频数据的传输,猫眼串口用于抓拍数据的传输发起结束,续传通知等,GPIO 口用于猫眼唤醒。通过多端口的共同作用,加快音视频传输速度。猫眼必须支持串口,才可实现音频对讲,缺少串口,无法支持 App 端的下行音频数据。
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 日 | 首次发布 |
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈