更新时间:2024-08-06 10:02:48下载pdf
本文描述 猫眼与 WBRL 模组 之间音视频传输的通信协议及交互流程,有助于猫眼方案商或开发者更好地理解涂鸦设计的猫眼对接方案与协议,提高对接效率与质量。
WBRL 模组模组与猫眼硬件连接如下图所示:
类型 | 引脚 | 引脚说明 |
---|---|---|
SPI 引脚 | PA28 | 片选脚 |
PA30 | 时钟脚,主机驱动,从机用其进行数据发送与接收 | |
PA25 | 主机发送数据,从机接收数据 | |
PA26 | 主机接收数据,从机发送数据 | |
特殊引脚 | PA12 | 唤醒脚,平时为低电平。如果需要唤醒猫眼的时候,会拉高电平并持续 250ms,然后拉低电平。猫眼检测到该引脚变化并持续 250ms 为高电平的时候,需要唤醒。 说明:猫眼唤醒不能只检测到一个上升沿就唤醒,因为如果 WBRL 模组重启, |
PB21 | 数据请求脚。平时为低电平,WBRL 模组准备好接收数据时,会拉一下高电平然后再拉低,主机检测到该引脚上升沿变化时才能发送数据。 | |
PB20 | 时钟请求脚。平时为低电平,WBRL 模组有数据要发送时,会拉一下高电平然后再拉低,主机检测到该引脚上升沿变化时需要产生时钟,WBRL 模组会在该时钟上发送数据。 |
时钟频率 | 时钟模式 | 数据传输 | cs 片选信号 | 数据宽度 | 主从设置 |
---|---|---|---|---|---|
最高频率可支持 25M(建议使用 8M) | MODE0 :模式 0[CPOL=0,CPHA=0] |
MSB | 低电平有效 | 8 位 | 猫眼为主机,模组为从机 |
为了方便后续功能迭代升级,猫眼板在前期硬件规划上,例如 IO 资源丰富的话可预留 1-2 个 IO。
WBRL 模组与猫眼之间采用定长数据通信,长度大小为 3872 个字节。如果通讯过程中数据包长度小于 3872 字节,则在数据包有效数据后补 0。
WBRL 模组唤醒猫眼时,会拉高 PA12 并持续 500ms,然后拉低电平。猫眼检测到该引脚变化并持续 500ms 为高电平的时候,需要唤醒。WBRL 模组唤醒操作最多持续 3 次。
由于 WBRL 模组作为从机,猫眼作为主机,所以猫眼并不知道 WBRL 模组是否准备好读写数据。为了防止时序错乱,在数据交互过程中,需要等到 PB21 或 PB20 的电平变化才能发送数据或者时钟。
WBRL 模组并不知道猫眼是否被唤醒,所以需要猫眼被唤醒之后,第一条指令发送 0x63
,告诉 WBRL 模组猫眼已经被唤醒。
猫眼唤醒时发送完 0x63
指令之后,如果超时未收到 WBRL 模组发送的 clock 引脚变化,则 WBRL 模组每拉一次 PB21,猫眼发送一次 0x63
,以确保 WBRL 模组收到 0x63
指令。
0x63
指令后会回复(拉高 PB20)猫眼需要传图或传视频,且会回复当前 WBRL 模组的状态是处于未就绪还是已经就绪状态。0x63
的回复包,进行对应操作:
0x63
指令,查询 WBRL 模组的就绪状态,直到收到 WBRL 模组的状态为已就绪。0x61
指令,将图片或者视频数据发送给 WBRL 模组。在这期间,WBRL 模组每拉一次 PB21,猫眼发送一包数据,但是不能主动发送数据。0x6F
指令,通知猫眼流程结束。猫眼收到之后,无需回复 WBRL 模组,直接进入休眠状态。0x68
指令给猫眼。在此期间,WBRL 模组每拉一次 PB20,猫眼输出一次时钟。0x63
指令。0x6A
指令发送二维码信息,无需等待 WBRL 模组回复。0x6F
指令,通知猫眼流程结束。猫眼收到之后,无需回复 WBRL 模组,直接进入休眠状态。猫眼发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x01 |
数据长度 | 2 | N |
数据 | N | 产品信息字段说明,{“p”:”vHXEcqntLpkAlOsy”} |
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
模组回复:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x01 |
数据长度 | 2 | 0001 |
数据 | 1 |
|
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
猫眼发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x63 |
数据长度 | 2 | 0x0006 |
获取时间类型 | 1 |
|
视频分辨率(图片默认填 0) | 1 |
|
视频类型(图片默认填 0) | 1 |
|
视频帧率(图片默认填 0) | 1 | 根据猫眼实际帧率填写,目前支持 10~20 帧/秒分辨率 |
视频码率(图片默认填 0) | 2 | 仅支持以下参数:
|
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
猫眼发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x63 |
数据长度 | 2 | 0x0010 |
获取时间类型 | 1 |
|
视频分辨率 (图片默认填 0) | 1 |
|
视频类型 (图片默认填 0) | 1 |
|
视频帧率 (图片默认填 0) | 1 | 根据猫眼实际帧率填写,目前支持 10~20 帧/秒分辨率 |
视频码率 (图片默认填 0) | 2 | 仅支持以下参数:
|
音频类型 | 1 |
|
音频帧率 | 1 | 根据猫眼实际帧率填写,目前 10~20 帧 |
音频采样率 | 4 |
|
音频位深度 | 1 |
|
音频通道 | 1 | 默认填 0 (暂未使用到) |
旋转角度 | 1 |
|
天气定时时长 | 1 |
|
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x63 |
数据长度 | 2 | 0x000e |
当前状态 | 1 |
|
事件类型 | 1 |
|
分包大小 | 4 | 图像数据发送单包最大字节数,超过则进行分包处理 |
时间数据 | 8 | 数据长度为 8 字节:
|
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
猫眼发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x61 |
数据长度 | 2 | N+5 |
图片序号 | 2 | 默认为 0 ,多张图片传输时,每次触发传输后从 0 开始递增,传输结束后清零 |
分片标志 | 1 |
|
分片序号 | 1 | 从 0 开始,依次递增 |
帧格式 | 1 |
|
数据 | N | 数据 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
模组发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x68 |
数据长度 | 2 | N + 9 |
音频类型 | 1 |
|
预留字段 | 8 | 必须填 0 |
数据 | N | 音频数据 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
当整个音视频流程结束时,模组会通过 0x6F
指令通知猫眼可以进入休眠状态,以便节省功耗。
模组发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x6F |
数据长度 | 2 | 0x0001 |
状态 | 1 | 0x00 :推流结束,猫眼进行休眠 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
猫眼回复:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x6F |
数据长度 | 0 | 0x0000 |
数据 | 无 | |
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
猫眼发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x6A |
数据长度 | 2 | N |
数据 | N | {"p":"12345678","s":"ydc","t":"AZJ5zpswTfpr_0"} |
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
模块回复:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x6A |
数据长度 | 2 | 0x0001 |
数据 | 1 |
|
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
模组发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x6E |
数据长度 | 2 | 4 + N |
子命令 | 1 | 0x00 预留 |
wifi 扫描结果 | 1 |
|
rssi | 1 | 扫描到的路由器信号强度百分比,0-100 |
固件版本号长度 | 1 | 描述固件版本号所占用字节数 |
固件版本号 | N | 子符串,不固定长度,例如 1.0.0 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
猫眼回复:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x6E |
数据长度 | 2 | 0x0000 |
数据 | 0 | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
0xF0
触发。0xF0
后,进行模组相关厂测,唤醒猫眼,并通过 SPI 发送 0x63
指令回复猫眼需要进入厂测。0x63
进入厂测指令后,自行进行猫眼相关厂测。0x6e
通知猫眼厂测结果,由猫眼进行相关显示。例如,模组程序版本和 Wi-Fi 信号强度等。模组完成厂测后,自行进入深度休眠,以便观察整机功耗。0x85
指令查询对应天气。0x86
指令回复猫眼。猫眼发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x85 |
数据长度 | 2 | 0x0005 |
获取天气类型 | 4 | 按位,见 附录二 |
预报天数 | 1 | 预报天数 7 天内(1 ≤ n ≤ 7) |
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
模组回复:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x85 |
数据长度 | 2 | 0x0001 |
数据 | 1 |
|
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
模组发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x86 |
数据长度 | 2 | N(KDTLD+KDTLD+…) |
数据 | N | 采用 KDTLD 类型回复。 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
字段说明:
K
:参数名称,4 字节,见 附录一D
:天数,1 字节,表示第几天T
:参数类型,1 字节L
:参数长度,2 字节,1 个 KDTLD 的长度D
:具体数据该指令用于 App 与猫眼之间切换摄像头,切图见 附录五。
模组发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x88 |
数据长度 | 2 | N |
数据 | N | data[0]:0x00 -0xFF
|
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
猫眼回复:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x88 |
数据长度 | 2 | N |
数据 | N |
|
校验和 | 1 | 从帧头开始按字节求和得出的结果对 256 求余 |
字段说明:
在做画面切换时,单击对应的子框,可理解为将其与当前主框画面对调,所以 RN 面板和小程序下发的数据为子框编号。
如果无需支持文案显示,设备回复时仅有状态字段 + 2 字节默认 FFFF
即可。否则需带上对应通道的位置类型信息。
全量数据 格式支持 N 个通道组合,格式定义如下:
主框信息 (1+1 字节) |
子框 1 信息 (1+1 字节) |
… | 子框-n 信息 (1+1 字节) |
---|---|---|---|
ID + 位置类型 | ID + 位置类型 | ID + 位置类型 |
位置类型代号 定义如下:
0x01
:主0x02
:辅0x03
:前0x04
:后0x05
:上0x06
:下0x07
:左0x08
:右参数名称 | 编码 | 类型 | 是否支持预报 |
---|---|---|---|
温度(temperature) | 1 << 0 | 整数 | 否 |
最高温(high temperature) | 1 << 1 | 整数 | 是 |
最低温(low temperature) | 1 << 2 | 整数 | 是 |
湿度(humidity) | 1 << 3 | 整数 | 是 |
天气情况(weather condition) | 1 << 4 | 字符串,见 附录三 | 是 |
气压(pressure) | 1 << 5 | 整数 | 是 |
温度实感(sensible temperature) | 1 << 6 | 整数 | 否 |
紫外线指数(uvi) | 1 << 7 | 整数 | 是 |
日出时间(sunrise) | 1 << 8 | 字符串,数据格式为 2017-04-24 05:24 | 是 |
日落时间(sunset) | 1 << 9 | 字符串,数据格式为 2017-04-24 18:32 | 是 |
风速(wind speed) | 1 << 12 | 字符串(格式:0.9) | 是 |
风向(wind direction) | 1 << 13 | 字符串,见 附录四 | 是 |
风级(wind speed scale/level) | 1 << 14 | 整数 | 否 |
空气质量指数(aqi) | 1 << 15 | 整数 | 否 |
PM10(可吸入颗粒物)(pm10) | 1 << 16 | 整数 | 否 |
PM2.5(细颗粒物)(pm2.5) | 1 << 17 | 整数 | 否 |
臭氧浓度(o3) | 1 << 18 | 整数 | 否 |
二氧化氮浓度(no2) | 1 << 19 | 整数 | 否 |
一氧化碳浓度(co) | 1 << 20 | 整数 | 否 |
二氧化硫浓度(so2) | 1 << 21 | 整数 | 否 |
WKT_TEMP = (1 << 0), /**< temperature. */
WKT_THIHG = (1 << 1), /**< high temperature. */
WKT_TLOW = (1 << 2), /**< low temperature. */
WKT_HUMIDITY = (1 << 3), /**< humidity. */
WKT_CONDITIONNUM = (1 << 4), /**< weather condition. */
WKT_PRESSURE = (1 << 5), /**< pressure. */
WKT_REALFEEL = (1 << 6), /**< sensible temperature. */
WKT_UVI = (1 << 7), /**< uvi. */
WKT_SUNRISE = (1 << 8), /**< sunrise. */
WKT_SUNSET = (1 << 9), /**< sunset. */
WKT_UNIX = (1 << 10), /**< unix time, used with sunrise and sunset. */
WKT_LOCAL = (1 << 11), /**< local time, used with sunrise and sunset. */
WKT_WINDSPEED = (1 << 12), /**< wind speed. */
WKT_WINDDIR = (1 << 13), /**< wind direction. */
WKT_WINDLEVEL = (1 << 14), /**< wind speed scale/level. */
WKT_AQI = (1 << 15), /**< aqi. */
WKT_PM10 = (1 << 16), /**< pm10. */
WKT_PM25 = (1 << 17), /**< pm2.5. */
WKT_O3 = (1 << 18), /**< o3. */
WKT_NO2 = (1 << 19), /**< no2. */
WKT_CO = (1 << 20), /**< co. */
WKT_SO2 = (1 << 21), /**< so2. */
编码表示(ASCII 码) w.conditionNum |
十六进制 | 天气状况 |
---|---|---|
120 | 31 32 30 | 晴 |
101 | 31 30 31 | 大雨 |
102 | 31 30 32 | 雷暴 |
103 | 31 30 33 | 沙尘暴 |
104 | 31 30 34 | 小雪 |
105 | 31 30 35 | 雪 |
106 | 31 30 36 | 冻雾 |
107 | 31 30 37 | 暴雨 |
108 | 31 30 38 | 局部阵雨 |
109 | 31 30 39 | 浮尘 |
110 | 31 31 30 | 雷电 |
111 | 31 31 31 | 小阵雨 |
112 | 31 31 32 | 雨 |
113 | 31 31 33 | 雨夹雪 |
114 | 31 31 34 | 尘卷风 |
115 | 31 31 35 | 冰粒 |
116 | 31 31 36 | 强沙尘暴 |
117 | 31 31 37 | 扬沙 |
118 | 31 31 38 | 小到中雨 |
119 | 31 31 39 | 大部晴朗 |
121 | 31 32 31 | 雾 |
122 | 31 32 32 | 阵雨 |
123 | 31 32 33 | 强阵雨 |
124 | 31 32 34 | 大雪 |
125 | 31 32 35 | 特大暴雨 |
126 | 31 32 36 | 暴雪 |
127 | 31 32 37 | 冰雹 |
128 | 31 32 38 | 小到中雪 |
129 | 31 32 39 | 少云 |
130 | 31 33 30 | 小阵雪 |
131 | 31 33 31 | 中雪 |
132 | 31 33 32 | 阴 |
133 | 31 33 33 | 冰针 |
134 | 31 33 34 | 大暴雨 |
136 | 31 33 36 | 雷阵雨伴有冰雹 |
137 | 31 33 37 | 冻雨 |
138 | 31 33 38 | 阵雪 |
139 | 31 33 39 | 小雨 |
140 | 31 34 30 | 霾 |
141 | 31 34 31 | 中雨 |
142 | 31 34 32 | 多云 |
143 | 31 34 33 | 雷阵雨 |
144 | 31 34 34 | 中到大雨 |
145 | 31 34 35 | 大到暴雨 |
146 | 31 34 36 | 晴朗 |
风向简码(字符串) | 十六进制 | 描述 |
---|---|---|
N | 4e | 北 |
NNE | 4e 4e 45 | 东北偏北 |
NE | 4e 45 | 东北 |
ENE | 45 4e 45 | 东北偏东 |
E | 45 | 东 |
ESE | 45 53 45 | 东南偏东 |
SE | 53 45 | 东南 |
SSE | 53 53 45 | 东南偏南 |
S | 53 | 南 |
SSW | 53 53 57 | 西南偏南 |
SW | 53 57 | 西南 |
WSW | 57 53 57 | 西南偏西 |
W | 57 | 西 |
WNW | 57 4e 57 | 西北偏西 |
NW | 4e 57 | 西北 |
NNW | 4e 4e 57 | 西北偏北 |
子框位置定义
后续涂鸦会提供对应配置(云能力),用于不同客户自定义显示位置。
显示框内不带文案
显示框内带文案显示
如对应框除镜头画面外,额外 叠加对应镜头安装位置信息,如下图小绿框所示。
按上图带文案显示的切换顺序,对应的全量数据如下表所示:
切换 | 主框-0 | 子框-1 | 子框-2 | 子框-3 | 对应全量数据(Hex 编码) |
---|---|---|---|---|---|
默认 | 前 | 后 | 上 | 下 | 0003 0104 0205 0306 |
第一次切换 | 后 | 前 | 上 | 下 | 0004 0103 0205 0306 |
第二次切换 | 下 | 前 | 上 | 后 | 0006 0103 0205 0304 |
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈