更新时间:2024-06-20 08:28:08下载pdf
本文介绍了 Zigbee 模组的离线语音 I2C 协议。适用于使用涂鸦离线语音模组进行 MCU 开发的开发者。
通信速率:100kbit/s
总线地址:0x64
通信数据线:SCL、SDA
数据中断脚:INT_PIN(引脚上拉,当语音模组需要主动发送数据给IoT模组,产生100ms的低电平告知IoT模组有数据需要发送)
数据传输量:单条数据不能超过 256bytes
Zigbee模组作为主机(primary),语音模组作为从机(secondary),主机主动查询从机的状态,从机收到指令后回应最新的状态信息给主机。
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 固定为0x55aa |
版本 | 1 | 升级扩展用 |
命令字 | 1 | 具体帧类型 |
数据长度 | 2 | 大端 |
数据 | N | |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
IoT模组主动发送命令,语音模组收到命令后立刻回复(50ms内)。
语音模组想主动上报消息到IoT模组,需要如下步骤。
I2C通信命令如下表:
命令字 | 功能 | 说明 |
---|---|---|
0x00 | 心跳检测 | IoT模组每5s间隔发心跳给离线语音模组 |
0x03 | IoT模组Zigbee网络状态 | IoT模组发送Zigbee网络状态给到语音模组 |
0x05 | 重置 Zigbee-切换配网模式 | 可以指定IoT模组重置进入哪种配网模式 |
0x06 | DP状态上报 | 离线语音模组上报DP控制给IoT模组。IoT收到后下将命令转发到MCU控制对应DP执行 |
0x07 | DP状态下发 | IoT模组同步DP点信息给到语音模组 |
0x2B | 离线语音模组查询网络 | 离线语音模组主动查询IoT模组网络状态 |
0x65 | 语音设置 | 设置离线语音模组参数 |
0x66 | 语音识别文本上发 | 语音模组提供 Unicode 格式的语音识别文本给IoT模组 |
0x67 | 文本验证结果下发 | IoT模组将平台验证的语音文本的结果,以Unicode格式告知语音模组 |
0x68 | 语音上报 | 语音模组参数主动上报 |
Zigbee模组发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x88 |
数据长度 | 2 | 0x0000 |
数据 | 0 | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 00 88 0000 ff
语音模组会根据当前是否有状态改变来决定发送什么数据。譬如当前有用户语音要求重置配网,那么语音模组就会发送0x05命令字,如果是修改了音量大小,那么就会发送0x09命令字。如果当前语音模组状态没有改变,那么就发送0x00心跳命令字作为心跳给到Zigbee模组作为回复。
IoT模组上电后,以5s的间隔定期发送心跳,若在超时时间(90s)内,未收到语音模组的任何回应,则认为与语音模组通信异常模组自动内部软件重启复位。
语音模组返回:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x00 |
数据长度 | 2 | 0x0001 |
数据 | 1 | 0x00:语音模组重启后第一次心跳返回值,仅发送一次,用于模组判断工作过程中MCU是否重启 0x01:除语音模组重启后第一次返回0外,其余均返回此值 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 03 00 0001 00 03
(语音模组第一次返回)
0x55aa 03 00 0001 01 04
(除第一次外,正常返回)
回复语音模组接收到了心跳命令。
Zigbee模组发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x00 |
数据长度 | 2 | 0x0000 |
数据 | 0 | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 00 00 0000 03
此帧提供MCU根据自身需求选择性选择重置Zigbee后的配置方式。
语音模组返回:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x05 |
数据长度 | 2 | 0x0001 |
数据 | 1 | 0x00:复位 0x01:配网 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 03 05 0001 01 09
语音模组让Zigbee进入配网模式
回复语音模组接收到了重置Zigbee-选择配置模式命令。
Zigbee模组发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x05 |
数据长度 | 2 | 0x0000 |
数据 | 0 | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 00 05 0000 03
datapoint命令/状态数据单元如下所示:
数据段 | 长度(byte) | 说明 | |
---|---|---|---|
dpid | 1 | datapoint序号 | |
type | 1 | 对应开放平台上某datapoint具体的数据类型,通过如下“表示值”标识 | |
类型 | 表示值 | 长度(字节) | 说明 |
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字节采用大端传输 |
语音模组发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x06 |
数据长度 | 2 | 取决于“状态数据单元”类型以及个数 |
数据 | N | “dp状态数据单元”组 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:湿度对应5号DP,使用valve型变量,湿度为30℃
0x55aa 03 06 0008 05 02 0004 0000001e 3a
回复语音模组接收到了DP点控制上报命令。
Zigbee模组发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x06 |
数据长度 | 2 | 0x0000 |
数据 | 0 | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 00 06 0000 03
语音模组通过命令字(0x2B)主动查询Zigbee模组的网络状态,Zigbee模组通过0x2B命令字告知语音模组网络状态。
MCU发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x2B |
数据长度 | 2 | 0x0000 |
数据 | 0 | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 03 2B 0000 05
Zigbee模组回复设备网络状态表。
设备联网状态 | 描述 | 状态值 |
---|---|---|
状态1 | 未配网 | 0x00 |
状态2 | 配网中 | 0x03 |
状态3 | 在网(配网成功之后一直处于在网状态) | 0x01 |
Zigbee模组返回:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x2B |
数据长度 | 2 | 0x0001 |
数据 | 1 | Zigbee模组回复设备网络状态表。 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 00 2B 0001 02 01
,IoT模组以连接到 IoT 云端
设备联网状态 | 描述 | 状态值 |
---|---|---|
状态1 | 未配网 | 0x00 |
状态2 | 配网中 | 0x03 |
状态3 | 在网(配网成功之后一直处于在网状态) | 0x01 |
说明:Zigbee模组初始状态为未配网,当语音模组向Zigbee模组发送配置指令后,发出配网中的状态通知,然后Zigbee模组开启配网,配网超时时间为3分钟,在3分钟内配网成功,则上报在网状态,超时则上报未配网。
模组发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x03 |
数据长度 | 2 | 0x0001 |
数据 | 1 | 参见上表 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 00 03 0001 00 03
语音模组返回:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x03 |
数据长度 | 2 | 0x0000 |
数据 | 0 | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 03 03 0000 09
,回复联网状态命令
语音模组发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x66 |
数据长度 | 2 | 0x0012 |
数据 | 2 | 语音文本ID,语音模组可通过ID对应唯一的场景命令,例如:“回家模式”对应的ID为00 01 |
2 | 国家码,用来标识下面字符是哪个国家的语言,例如中国“CN”,美国“US” | |
N | 总数据长度不超过256bytes 例如: 中文:“回家场景” 英文:“good night mode” | |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
国家码标准,请参考 OEM App 账号所在数据分区参考 中的信息。
例:回家场景,ID为00 01
55 aa 03 66 00 10 00 01 43 4e e5 9b 9e e5 ae b6 e5 9c ba e6 99 af 44
Zigbee接受到语音模组的文本信息之后,上发到平台进行场景认证是否有效。
Zigbee模组返回:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x66 |
数据长度 | 2 | 0x0000 |
数据 | N | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:55 aa 00 66 00 00 65
Zigbee模组发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x67 |
数据长度 | 2 | 0x0013 |
1 | 场景平台验证的结果: 01:验证成功 00:验证失败 02:网络异常 | |
2 | 语音场景ID,对应唯一的场景,例如“回家场景”对应ID为00 01 | |
数据 | N | 数据限制总数据长度不超过256bytes: 例如: 中文:“回家场景” 英文:“good night mode” |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:返回以下“回家场景”验证结果,代表“回家场景”平台验证成功。
55 aa 00 67 00 0F 01 00 01 e5 9b 9e e5 ae b6 e5 9c ba e6 99 af 2f
语音模组返回:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x67 |
数据长度 | 2 | 0x0000 |
数据 | N | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:55 aa 03 67 00 00 69
Zigbee发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x65 |
数据长度 | 2 | xx |
数据 | N | 取决于“状态数据单元”类型以及个数 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
语音模组返回:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x65 |
数据长度 | 2 | xx |
数据 | N | 取决于“状态数据单元”类型以及个数 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
状态通知,语音模组主动上报参数状态:
语音模组发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x68 |
数据长度 | 2 | N |
数据 | 1 | 取决于“状态数据单元”类型以及个数 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
Zigbee模组返回:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x68 |
数据长度 | 2 | 2 |
数据 | 1 | 操作结果: 0x00: 成功 0x01: 失败 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
Zigbee模组发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x07 |
数据长度 | 2 | 取决于“状态数据单元”类型以及个数 |
数据 | N | “dp状态数据单元”组 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:湿度对应5号DP,使用valve型变量,湿度为30℃
0x55aa 03 07 0008 05 02 0004 0000001e 3a
语音模组返回:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x07 |
数据长度 | 2 | 0x0000 |
数据 | 0 | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:返回静音状态值
55 aa 00 07 00 00 61
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈