IPC通用MCU对接固件开发参考

更新时间:2021-11-17 08:10:29下载pdf

为加快跨品类的 IPC 产品的开发,减少开发周期,涂鸦推出了 IPC 的通用 MCU 对接方案,您基于涂鸦 Wi-Fi 串口通用协议,可快速接入IPC设备,实现业务需求。

概述

涂鸦 Wi-Fi 串口通用协议为涂鸦定制的 Wi-Fi 模组串口通用协议,主要用于涂鸦 Wi-Fi 模组及 IPC 模组与其它 MCU 串口直连做串口通信,其架构框如下图所示。

IPC通用MCU对接固件开发参考

串口通信约定

  • 波特率:9600/115200
  • 数据位:8
  • 奇偶校验:无
  • 停止位:1
  • 数据流控:无

帧格式

字段 字节数 说明
帧头 2 固定为 0x55aa
版本 1 升级扩展用
命令字 1 具体帧类型
数据长度 2 大端
数据 N 实体数据
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余
  • 举例:0x55 AA 00 00 00 00 FF (心跳包)

  • 所有大于1个字节的数据均采用大端模式传输。

  • 一般情况下,采用同命令字一发一收同步机制。即一方发出命令,另一方应答,若发送方超时未收到正确的响应包,则超时传输,如下图所示:

    IPC通用MCU对接固件开发参考

状态数据单元(DP)

涉及数据帧中的命令字:

  • 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

Raw类型DP上报和下发,是将16进制数以Base64的形式进行编码后显示在日志后台,后台显示如下图:

IPC通用MCU对接固件开发参考

可将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)

    IPC通用MCU对接固件开发参考

模组发送:

字段 字节数 说明
帧头 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 (除第一次外,正常返回)

查询产品信息

说明:

  1. product ID:对应涂鸦开发者平台PID(产品标识),由涂鸦云开发者平台生成,用于云端记录产品相关信息

  2. 产品信息由product ID、MCU软件版本构成

  3. 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|}

产品信息字段说明:

  1. p表示产品ID为AIp08kLIftb8x2x0,也就是用户在涂鸦IOT平台创建的产品ID**(**必选)

  2. v表示MCU版本为1.0.0,MCU的版本号格式需要按照x.x.x的格式定义**(**必选)

  3. m表示模块工作方式:IPC暂不支持

初始化流程图如下所示:

IPC通用MCU对接固件开发参考

报告设备联网状态

设备联网状态 描述 状态值
状态1 smartconfig配置状态 0x00
状态2 AP配置状态 0x01
状态3 WIFI已配置但未连上路由器 0x02
状态4 WIFI已配置且连上路由器 0x03
状态5 已连上路由器且连接到云端 0x04
状态6 WIFI设备处于低功耗模式 0x05
状态7 WIFI设备处于smartconfig&AP配置状态 0x06

说明:

  1. 当模块检测到MCU重启或MCU断线再上线的过程,则主动下发WIFI状态至MCU

  2. 当模块的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

重置配网

说明:

  1. IPC收到后进入重置,移除配网信息,自动重启后进入待配网状态,等同长按设备复位键。

  2. 此时设备与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字节采用大端传输
  1. datapoint命令/状态数据单元除”raw”类型外,其他类型均属于“obj”型datapoint

  2. “命令下发”可含多个datapoint“命令数据单元”

  3. “命令下发”为异步处理协议,对应于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基础业务能力故不会下发。

状态上报

说明:

  1. datapoint状态数据单元说明详见“2.8节”

  2. “状态上报”为异步处理协议,“状态上报”触发机制有三类:

a. MCU收到“命令下发处理帧时,正确执行相应datapoint命令,再通过“状态上报” 帧将变化后的datapoint状态发送至模块;

b. MCU主动检测到datapoint有变化,将变化后的datapoint状态发送至模块;

c. MCU收到“2.8”节的状态查询帧时,将所有的datapoint状态发送至模块。

  1. “状态上报”可含多个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

状态查询

说明:

  1. “状态查询”为异步处理协议,主要用于模块查询MCU所有的“obj”类型的datapoint状态,当MCU收到此帧时,通过“3.8”节状态上报帧上报datapoint状态

  2. “状态查询”发送时机主要有两种:

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字节采用大端传输
  1. MCU发送:
字段 长度(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 //本地时间为准

开发工具

IPC 通用调试配置

您需要根据实际DP设置修改配置文件。

下载模组调试助手

通过 涂鸦 IoT 平台 创建产品及 PID 信息,创建完成后可在下载资料中看到有涂鸦模组调试助手的下载,若没有,请联系涂鸦技术支持工程师或您的客户经理。

IPC通用MCU对接固件开发参考

使用模组调试助手

  1. 点击MCU模拟,选择通讯串口与波特率,点击打开。
  2. 导入IPC通用配置。
  3. 点击开始调试。
    IPC通用MCU对接固件开发参考
  4. 点击DP CMD,进入MCU dp上报的仿真。
  5. 涂鸦模组调试助手会依据IPC通用调试配置导入可仿真的测试项。
  6. 点击添加,导入测试项。
  7. 点击上报,可将DP通过IPC通用模组上报至云端。
    IPC通用MCU对接固件开发参考