一、概述
本通信协议主要应用于MCU 和无线模组形式的物联终端设备中,其应用场景如下图所示:MCU作为系统主控,主要负责通过外部接口对外设(LED、开关灯)进行控制,完成设备业务逻辑,并利用通信协议对无线模组进行控制;无线模组主要用于实现设备联网,云平台接入及云端消息交互等功能。
二、设备SDK文件说明
三、命令结构定义及约定
MCU和无线模组以数据帧为基本通信单位,遵循请求(Request)、响应(Response)一对一的消息确认模式。数据帧结构定义如下所示:
字段含义如下表:
本文档命令约定如下:
■如无特殊说明,数据帧中所有多于一个字节的整型数字均以小端形式排列
■请求和对应的响应共用命令号
■任何一条命令的数据帧长度不允许超过1000字节
■协议字段描述中“mB”表示占位m字节(Byte),“nb”表示占位n位(Bit)
■协议字段内容中“0x####”、“0x##”等形式表示十六进制数据,值不固定,需要根据实际情况计算得出
四、错误码定义
对于命令响应中可能回复的错误码,统一定义如下:
五、通信接口参数
MCU和无线模组通过串口(UART)进行通信,串口参数如下:
■波特率:9600
■数据位:8
■停止位:1
■奇偶校验:无
■数据流控:无
六、命令列表
1.获取无线模组信息
➢命令请求方向:MCU 无线模组。
➢命令请求
➢命令响应
➢模组信息包括模组芯片唯一ID、模组软件版本号,均为字符串型数据。参数排列如下表:
2.无线模组参数配置
➢命令请求方向:MCU 无线模组。
➢命令请求
➢初始化列表包括产品ID、产品序列码、MCU固件版本号,参数排列如下表:
其中产品ID、产品序列码用于正式环境的设备注册和连接,MCU固件版本号用于设备主芯片程序升级。参数均为字符串数据,其中产品序列码长度4 ~ 32字符,有效字符包括字母、数字、_(下划线)、-(中横线)。
➢命令响应
其中,初始化响应参考错误码定义四。
3.无线模组复位
➢命令请求方向:MCU 无线模组。
➢命令请求
➢命令响应
➢其中,响应参考错误码定义四。
无线模组复位后将清除所有配置(主要为配网信息和设备绑定信息),MCU端需要对无线模组进行重新配网,模组需要重新注册和绑定。
4.心跳保活
➢命令请求方向:MCU 无线模组。
➢命令请求(心跳发送间隔不超过3分钟)
➢命令响应
5.设置智能配网
➢命令请求方向:MCUà无线模组。
➢命令请求
➢配网参数包含1字节配网模式和若干字节的参数,其中参数内容由配网模式决定。
配网模式目前可选值为:
0:和物智能配网;无参数,已实现;
1:Soft-AP,无参数,保留功能,暂未实现;
2:airkiss,保留功能,暂未实现;
3:SSID+Password,参数依次为需要连接的指定AP的ssid和password,数据类型均为字符串型,如下图所示:(保留功能,暂未实现)
➢命令响应
➢其中,配网响应参考错误码定义四。
配网响应只对命令请求内容进行响应,并不返回配网结果,配网结果将由无线模组主动上报,参见0。
6.获取无线模组状态
➢命令请求方向:MCU 无线模组。
➢命令请求
➢命令响应
➢ 模组状态字段定义如下:
9.获取网络时间
➢命令请求方向:MCU 无线模组。
➢命令请求
➢命令响应
➢ 当前时间为0,为无效时间。
10.无线模组状态变更通知
➢命令请求方向:无线模组 MCU。
➢命令请求
➢ 模组状态字段定义参考。
➢命令响应
11.进入测试模式
➢命令请求方向:MCUà无线模组。
➢命令请求
➢命令响应
➢产测响应只对命令请求内容进行响应,并不返回产测结果,产测结果将通过获取模组状态指令查询产测状态及WIFI模块的当前信号量。
12.固件推送(暂未实现)
➢命令请求方向:无线模组 MCU。
➢命令请求
➢ 由于固件大小可能超过数据帧的最大范围,固件内容将采用分片发送的方式,结构如下所示:
➢命令响应
➢ 其中,固件推送响应参考错误码定义四。
13.固件推送请求(暂未实现)
➢命令请求方向:无线模组 MCU。
➢命令请求
➢命令响应
➢模组对MCU推送固件时,以分包大小值来进行分包。
14.功能点数据上传
➢命令请求方向:MCU 无线模组。
➢命令请求
➢上传数据格式如下表所示:
其中,消息类型由4个字节构成,前两个字节表示消息级别(固定为0x0003),后两个字节表示功能点顺序值(参见导出SDK device.c中的dev_upload_list)。
消息体为需要上传的数据的TLV格式。
和物TLV格式请参考“7.TLV格式说明”的内容。
➢命令响应
15.功能点命令下发
➢命令请求方向:无线模组 MCU。
➢命令请求
➢下发命令数据由命令ID及TLV数据组成,命令数据格式如下表所示:
其中,消息类型由4个字节构成,前两个字节表示消息级别(固定为0x0004),后两个字节表示功能点顺序值(参见导出SDK device.c中的dev_cmd_list)。
消息体为下发的命令内容的TLV格式数据。
和物TLV格式请参考“TLV格式说明”的内容。
➢命令响应
➢其中,命令响应如下表所示:
cmd-id与下发的命令相同,执行结果固定为BOOL型TLV数据,执行成功则为0,执行失败为1。
七、 TLV格式说明
和物平台定义了7种功能点类型:布尔型、数值型(整形和浮点型两种)、枚举型、故障型、字符串型和透传型。
和物基于MQTT的数据定义中,Payload用于存放数据,数据上报&命令下发报文的payload数据采用TLV格式进行存储,支持的Type和对应的索引值如下:
一个完整的TLV数据格式如下:
八、常用命令数据帧封装及解析示例
所有命令的数据帧解析均按照以下步骤进行解析:
➢ 查找数据帧头(5A 5A);
➢ 从帧头起始位置开始偏移两字节,以小端方式读取两字节的长度;
➢ 根据读取的长度判断接收的数据是否已完整。如果数据已接收完整,计算校验并进行比对;如果没有接收完整则继续接收;
➢ 如果校验通过,则根据Command字段值,按文档描述逐字节进行Command Data的解析;如果校验失败,则跳过第一个字节,从步骤1重新开始解析。
1.无线模组参数配置
其中:产品ID、设备SN和版本号均为字符串形式的数据,长度为2字节的小端数据,值为ASCII码形式。
2.功能点数据上传
以上传一个bool型的数据为例,该数据字段名为“switch”,上传的值为开(1)。
数据帧控制字段不再赘述,只对消息体内容进行封装说明:
构造功能点数据上传帧时,可参考以下步骤:
➢ 构造描述字符串。将功能点对应的字段名替换示例描述字符串的黑色部分;
➢ 构造消息类型。将功能点序号替换示例消息类型的黑色部分,小端形式;
➢ 构造消息内容。根据功能点实际的数据类型,按TLV格式封装数据;
➢ 重新计算相应的长度及校验和。
3.功能点命令下发
以下发一个bool型的数据为例:
同样以消息体内容进行解析:
对于下发命令的解析,用户需要从消息类型中解析功能点序号,对下发的消息内容执行相应的处理逻辑。
4.功能点命令下发响应
设备收到下发的命令需要对齐进行响应,返回命令的执行结果。以上述下发命令为例,返回的响应为:
消息体内容分析如下:
九、 基本业务流程
和物MCU端基本业务流程如下图所示:
文章来源:中移OneNet