Last Updated on : 2024-11-20 08:51:26download
为加快跨品类的 IPC 产品的开发,减少开发周期,涂鸦推出了 IPC 的通用 MCU 对接方案,您基于涂鸦 Wi-Fi 串口通用协议,可快速接入IPC设备,实现业务需求。
涂鸦 Wi-Fi 串口通用协议为涂鸦定制的 Wi-Fi 模组串口通用协议,主要用于涂鸦 Wi-Fi 模组及 IPC 模组与其它 MCU 串口直连做串口通信,其架构框如下图所示。
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 固定为 0x55aa |
版本 | 1 | 升级扩展用 |
命令字 | 1 | 具体帧类型 |
数据长度 | 2 | 大端 |
数据 | N | 实体数据 |
校验和 | 1 | 从帧头开始,按字节求和,得出的结果对 256 求余 |
举例:0x55 AA 00 00 00 00 FF (心跳包)
所有大于1个字节的数据均采用大端模式传输。
一般情况下,采用同命令字一发一收同步机制。即一方发出命令,另一方应答,若发送方超时未收到正确的响应包,则超时传输,如下图所示:
涉及数据帧中的命令字:
0x6:命令下发
0x7:状态上报
0x8:状态查询
datapoint 命令/状态数据单元如下所示:
数据段 | 字节数 | 说明 | |
---|---|---|---|
dpid | 1 | datapoint序号 | |
type | 1 | 对应开放平台上某datapoint具体的数据类型,通过如下“表示值”标识 | |
类型 | 表示值 | 长度(字节) | 说明 |
raw | 0x00 | N | 对应于raw型datapoint(模组透传) |
boo1. | 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字节采用大端传输 |
datapoint命令/状态数据单元除”raw”类型外,其他类型均属于“obj”型datapoint。
“命令下发”可含多个datapoint“命令数据单元”。
“命令下发”为异步处理协议,对应于MCU的datapoint“状态上报”。
模组发送:
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x06 |
数据长度 | 2 | 取决于“命令数据单元”类型以及个数 |
数据 | N | “3.7.1命令数据单元”组 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
普通dp:MCU需要上报系统开关,对应3号DP,使用bool型变量,数值为1。
0x55aa 00 06 0005 03 01 0001 01 10
datapoint 命令/状态数据单元中,除 Raw 类型外,其他类型均属于 Object 数据类型。
IPC模组只下发200以外的自定义DP至MCU,200以内属于IPC基础业务能力故不会下发。
Raw类型DP上报和下发,是将16进制数以Base64的形式进行编码后显示在日志后台,后台显示如下图:
可将Base64转16进制解码,查看Raw上报是否正确。
您若需MCU上报/解析Raw DP数据,只需要按帧格式上报/解析16进制数据,Base64编码/解码由IPC模组自动完成。
IPC模组上电后,将发送首次心跳,首次心跳需要MCU在超时时间(1s)内回复,否则会按序切换至下一种波特率发送心跳。
波特率顺序列表:115200、9600、57600
IPC模组会依据波特率列表顺序执行两遍,若执行结束,在超时时间内没有收到任何心跳,则退出串口功能使能。
若收到首次心跳,则会将波特率配置存储至IPC模组内,下次启动优先以该波特率请求心跳,若接收超时,则按波特率列表重新适配。
接收到首次心跳回应后,以(15s)的间隔定期发送心跳,若在超时时间(3s)内,未收到MCU的任何回应,则认为与MCU通信异常,IPC模组上报MCU下线( DP 235)。
若此后MCU对下个心跳包进行正常回复,IPC模组上报MCU上线(DP 235)
模组发送:
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x00 |
数据长度 | 2 | 0x0000 |
数据 | 0 | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 00 00 0000 ff
MCU返回:
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x00 |
数据长度 | 2 | 0x0001 |
数据 | 1 | 0x00:MCU重启后第一次心跳返回值,仅发送一次,用于模组判断工作过程中MCU是否重启 0x01:除MCU重启后第一次返回0外,其余均返回此值 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 03 00 0001 00 03 (MCU第一次返回)
0x55aa 03 00 0001 01 04 (除第一次外,正常返回)
说明:
product ID:对应涂鸦开发者平台PID(产品标识),由涂鸦云开发者平台生成,用于云端记录产品相关信息
产品信息由product ID、MCU软件版本构成
MCU软件版本号格式定义:采用点分十进制形式,”x.x.x”(0<=x<=99),x为十进制数
模块发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x01 |
数据长度 | 2 | 0x0000 |
数据 | 0 | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 00 01 0000 00
MCU返回:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x01 |
数据长度 | 2 | N |
数据 | N | {“p”:”AIp08kLIftb8x2x0”, “v”:”1.0.0”,”m”:1,”mt”:10,”n”:0,”ir”:”5.12”,”low”:0} |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:{“p”:”AIp08kLIftb8x2x0”,“v”:”1.0.0”,”m”:1,”mt”:10,”n”:0,”ir”:”5.12”,”low”:0|}
产品信息字段说明:
p表示产品ID为AIp08kLIftb8x2x0,也就是用户在涂鸦IOT平台创建的产品ID**(**必选)
v表示MCU版本为1.0.0,MCU的版本号格式需要按照x.x.x的格式定义**(**必选)
m表示模块工作方式:IPC暂不支持
初始化流程图如下所示:
设备联网状态 | 描述 | 状态值 |
---|---|---|
状态1 | smartconfig配置状态 | 0x00 |
状态2 | AP配置状态 | 0x01 |
状态3 | WIFI已配置但未连上路由器 | 0x02 |
状态4 | WIFI已配置且连上路由器 | 0x03 |
状态5 | 已连上路由器且连接到云端 | 0x04 |
状态6 | WIFI设备处于低功耗模式 | 0x05 |
状态7 | WIFI设备处于smartconfig&AP配置状态 | 0x06 |
说明:
当模块检测到MCU重启或MCU断线再上线的过程,则主动下发WIFI状态至MCU
当模块的WIFI状态发生变化,则主动下发WIFI状态至MCU
模块发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x03 |
数据长度 | 2 | 0x0001 |
数据 | 1 | 指示WIFI工作状态: 0x00:状态1 0x01:状态2 0x02:状态3 0x03:状态4 0x04:状态5 0x05:状态6 0x06:状态7 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 00 03 0001 00 03 5·k
MCU返回:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x03 |
数据长度 | 2 | 0x0000 |
数据 | 0 | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 03 03 0000 05
说明:
IPC收到后进入重置,移除配网信息,自动重启后进入待配网状态,等同长按设备复位键。
此时设备与APP账号的绑定关系并未解除,需要在APP上点击移除设备,才可解除绑定关系。
MCU发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x04 |
数据长度 | 2 | 0x0000 |
数据 | 0 | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 03 04 0000 06
模块返回:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x04 |
数据长度 | 2 | 0x0000 |
数据 | 0 | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 00 04 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字节采用大端传输 |
datapoint命令/状态数据单元除”raw”类型外,其他类型均属于“obj”型datapoint
“命令下发”可含多个datapoint“命令数据单元”
“命令下发”为异步处理协议,对应于MCU的datapoint“状态上报”
模块发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x06 |
数据长度 | 2 | 取决于“命令数据单元”类型以及个数 |
数据 | N | “3.7.1命令数据单元”组 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
l 普通dp:MCU需要上报系统开关,对应3号DP,使用bool型变量,数值为1
0x55aa 00 06 0005 03 01 0001 01 10
l datapoint 命令/状态数据单元中,除 Raw 类型外,其他类型均属于 Object 数据类型
l IPC模组只下发200以外的自定义dp点至MCU,200以内属于IPC基础业务能力故不会下发。
说明:
datapoint状态数据单元说明详见“2.8节”
“状态上报”为异步处理协议,“状态上报”触发机制有三类:
a. MCU收到“命令下发处理帧时,正确执行相应datapoint命令,再通过“状态上报” 帧将变化后的datapoint状态发送至模块;
b. MCU主动检测到datapoint有变化,将变化后的datapoint状态发送至模块;
c. MCU收到“2.8”节的状态查询帧时,将所有的datapoint状态发送至模块。
MCU发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x07 |
数据长度 | 2 | 取决于“状态数据单元”类型以及个数 |
数据 | N | “2.8状态数据单元”组 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:湿度对应5号DP,使用valve型变量,湿度为30℃
0x55aa 03 07 0008 05 02 0004 0000001e 3a
说明:
“状态查询”为异步处理协议,主要用于模块查询MCU所有的“obj”类型的datapoint状态,当MCU收到此帧时,通过“3.8”节状态上报帧上报datapoint状态
“状态查询”发送时机主要有两种:
a. 模块首次上电,通过心跳与MCU建立连接后,查询发送;
b. 模块工作过程中检测到MCU重启或发生了离线再上线的过程,查询发送。
模块发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x08 |
数据长度 | 2 | 0x0000 |
数据 | 0 | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 00 08 0000 07
说明:
(1)格林时间不带有时区和夏令时的因素,是一个国际标准的时间基准。
(2) 当模块连接上网络之前本地的时间戳校准后才会返回成功,并带有有效的时间数据。
MCU发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x0c |
数据长度 | 2 | 0x0000 |
数据 | 0 | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:0x55aa 03 0c 0000 0e
模块返回:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x0c |
数据长度 | 2 | 0x0007 |
数据 | 7 | 数据长度为7字节: Data[0]为是否获取时间成功标志,为0表示失败,为1表示成功 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求余 |
例:0x55aa 00 0c 0007 01 10 04 13 05 06 07 4c(格林时间2016年4月19日5时6分7秒)
说明:
(1)本地时间是在格林时间的基础上加上当地(设备激活所在地)时区和夏令时的时间。
(2) 当模块连接上网络之前本地的时间戳校准后才会返回成功,并带有有效的时间数据。
MCU发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x1c |
数据长度 | 2 | 0x0000 |
数据 | xxxx | 无 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
模块返回:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x1c |
数据长度 | 2 | 0x0008 |
数据 | Data | 数据长度为8字节: Data[0]为是否获取时间成功标志,为0表示失败,为1表示成功 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求余 |
例:
(1)如设备在国内激活使用,则当地时间为北京时间(东8区)
0x55aa 00 1c 0008 01 10 04 13 05 06 07 02 5f(北京时间2016年4月19日5时6分7秒)
(2)如果设备在国外激活使用,则当地时间为设备所处时区时间
说明:
(1)模块开始本地录音,最多25秒,超过25秒自动停止
MCU发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0xa0 |
数据长度 | 2 | 0x0000 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例 开始录音:55 aa 03 a0 00 00 a2
模块返回:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0xa0 |
数据长度 | 2 | 0x0001 |
数据 | 1 | 播放状态值: 0:未开始录音 1:开始录音 2: 录音结束 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:返回录音 55 aa 03 a0 00 01 01 a4
说明:停止录音,超过25秒自动停止
MCU发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0xa1 |
数据长度 | 2 | 0x0000 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例 停止录音:55 aa 03 a1 00 00 a3
模块返回:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0xa1 |
数据长度 | 2 | 0x0001 |
数据 | 1 | 播放状态值: 0:停止失败 1: 停止成功 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例:返回停止录音 55 aa 03 a1 00 01 01 a5
说明:播放本地录制的音频
MCU发送:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0xa2 |
数据长度 | 2 | 0x0001 |
数据 | 1 | 播放次数: 0-255 ; |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例 开始播放:55 aa 03 a2 00 01 02 a7
模块返回:
字段 | 长度(byte) | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0xa2 |
数据长度 | 2 | 0x0001 |
数据 | 1 | 播放状态值: 0:未开始播放 1:开始播放 2: 播放结束 |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例子,返回播放状态值:55 aa 03 a2 00 01 00 a5
说明:收到MCU的DP上报时,如果模块在线则直接发送到服务器,如果不在线则缓存最多100条DP在本地,等上线后再上传,设备重启这些DP会丢失。
状态数据单元如下所示:
数据段 | 长度(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 | 0xa3 |
数据长度 | 2 | 7+N(状态数据单元长度)*n |
数据 | 7 | 数据长度为 7 字节: Data[0]为这条数据传输是否带本地时间标志位: 0 表示这条数据不带本地时间,后面的时间模块认为数据无效,不处理 1 表示后面的时间数据有效 Data[1] 为 年份,0x00 表示 2000 年 Data[2]为月份,从 1 开始到 12 结束 Data[3]为日期,从 1 开始到 31 结束 Data[4]为时钟,从 0 开始到 23 结束 Data[5]为分钟,从 0 开始到 59 结束 Data[6]为秒钟,从 0 开始到 15 结束 |
N * n | 状态数据单元,可同时传多个 | |
校验和 | 1 | 从帧头开始按字节求和得出的结果对256求余 |
例 “单个状态数据单元”上报例子: DP 点 109 bool 型变量,数值为 1
55 aa 03 a3 00 0c 01 12 04 13 0d 03 1d 6d 01 00 01 01 78 //本地时间为准
55 aa 03 a3 00 0c 00 12 04 13 0d 04 14 6d 01 00 01 01 6f //服务端时间为准
“多个状态数据单元”上报例子:
DP 点 109 bool 型变量,数值为 1
DP 点 102 string 型变量,“201804121507”(具体传输对应 ASCII 值)
55 aa 03 a3 00 1c 00 12 04 13 0d 06 04 6d 01 00 01 01 66 03 00 0c 32 30 31 38 30 34 31 32 31 35 30 37 22 //服务端时间为准
55 aa 03 a3 00 1c 01 12 04 13 0d 08 2e 6d 01 00 01 01 66 03 00 0c 32 30 31 38 30 34 31 32 31 35 30 37 4f //本地时间为准
您需要根据实际DP设置修改配置文件。
通过 涂鸦开发者平台 创建产品及 PID 信息,创建完成后可在下载资料中看到有涂鸦模组调试助手的下载,若没有,请联系涂鸦技术支持工程师或您的客户经理。
Is this page helpful?
YesFeedback