设备通信协议目录1.适用范围................................................................................................................................................................32.协议框架................................................................................................................................................................33.协议内容................................................................................................................................................................33.1设备内部组网协议(或者MCU透传模式协议)...............................................33.1.1通讯命令格式.........................................................................................................33.1.2配对机制.................................................................................................................33.1.3连接机制.................................................................................................................43.1.4心跳机制.................................................................................................................53.2设备与云端通讯协议.....................................................................................................53.2.1通讯命令格式.........................................................................................................53.2.2连接流程.................................................................................................................53.3数据包格式定义...............................................................................................................63.3.1设备间通讯数据格式.......................................................................................63.3.2设备与云、APP通讯数据格式...........................................................................114.公共命令定义....................................................................................................................................................125.编码表..................................................................................................................................................................195.1节点类型编码表..............................................................................................................195.2命令回应编码表..............................................................................................................191.适用范围本协议定义WiFi模块与MCU控制单元,WiFi模块与云APP间,以及主从模块之间的通讯协议框架。2.协议框架协议基于二进制协议框架,完成命令发送接收、命令上报、内部组网等功能。3.协议内容3.1设备内部组网协议(或者MCU透传模式协议)备内部组网协议包括设备配对、连接、心跳机制等,目的是将一个子设备加入到设备组中,并保持连接。3.1.1通讯命令格式采用二进制的通讯协议格式,包格式如下表:同步头HeadOption包长度(变长)加密随机数(Option)源设备类型(Option)源设备编码(Option)CMDKeyCMDIDPayloadCRC(Option)2B1B1~2B1B1B3B1B1BNB2B详细的包格式在后续章节介绍3.1.2配对机制配对机制仅适用于设备内组网模式,MCU透传模式不需要组网协议。进入配对模式由主从设备分别触发,只有在进入配对模式后,才处理相关的配对命令。从设备进入配对模式后定时发送配对请求,直到收到请求回应。主设备收到请求后分配一个设备ID给从设备,标识此ID被占用,并等待采集器的上线通知,一定时间内收到通知之后确认存入设备列表,如果没有上线通知,则认为设备没有配对成功,从子设备中删除。从设备收到配对回应后存储设备ID,并且发送上线通知,收到上线通知后完成配对。配对的过程如下图所示:主模块从模块主设备回应请求从设备发送配对请求从设备上线进入配对模式配对结束主设备回应设备上线3.1.3连接机制设备每次上电连接需要发送上线通知以及连接所需要的参数给主设备,如下图所示:WiFi模块MCU/从模块上线通知上线通知回应云连接成功(仅用于透传模式)WiFi通路配置(仅用于透传模式)命令交互状态上报3.1.4心跳机制使用对等的心跳机制,主设备和从设备都可以发现对方的异常状态。3.2设备与云端通讯协议设备与云端通讯协议基于MQTT协议,数据包使用MQTT协议传输,数据加密方式采用SSL加密,命令码采用2进制命令格式同设备间通讯协议。3.2.1MQTT通讯框架本协议是针对与设备的数据通信,目前通信节点包括:设备、云端和APP终端三方。WIFI上的协议采用MQTT协议框架,串口上的通信采用包含包头和校验的二进制协议,通信包采用二进制格式传输,高位在前低位在后。此协议定义的MQTTTopic类型有以下2种:①单播,unicast/u/{TargetType}/{TargetID}②广播,broadcast/b/{SourceType}/{SourceID}注释:TargetType:目标设备类型,TargetID:目标设备编码SourceType:源设备类型,SourceID:源设备编码3.2.2通讯命令格式设备与云端、APP的通讯命令分为4种:请求与回应、通知命令、广播命令,具体的命令以及格式在后面章节介绍。3.2.2连接流程设备连接云端的步骤如下图:WiFi模块云建立MQTT连接订阅设备主题命令交互状态上报等待连接路由等待MCU上电,获取密钥https获取server信息https发送server信息3.3数据包格式定义数据包的格式根据通讯双方的不同、数据链路的差异会有不同的包格式,本协议为尽量保证数据包格式的统一,做了几点规划:1.数据包格式中核心的部分包括CMDID和CMDPayload,这两部分格式所有的包中保持一致,CMDID1个字节,CMDPayload紧跟CMDID长度N字节。2.设备间通讯,包括内部命令、外部转发命令等的数据包格式虽然可能不一样,但是都可以通过包头中的Option字节进行区分,可以公用相同的解析函数3.外部串口通讯的命令格式与设备间通讯格式保持一致。3.3.1设备间通讯数据格式同步头HeadOption包长度(变长)加密随机数(Option)源设备类型(Option)源设备编码(Option)CMDKeyCMDIDPayloadCRC(Option)2B1B1~2B1B1B3B1B1BNB2B3.3.1.1Fixheader固定帧头,格式如下表:同步头HeadOption包长度(变长)2Byte1Byte1~2Byte同步头:0x5CFEHeadOption:Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0预留预留预留预留CheckSum校验广播类型链路CRC校验加密选项typedefenum{OPTIONAL_ENCRYPT_BIT=(10),OPTIONAL_CRC_BIT=(11),OPTIONAL_BROADCAST_DATALINK_BIT=(12),OPTIONAL_CHECKSUM_BIT=(13),}OptionalBitsT;包长度:长度包括本字节之后的所有数据的长度长度是1~2个字节字节数取值长度范围10x0~0x7F0~12720x0180~0x7FFF128~16383长度的编码方式参考MQTT:如长度是321=(65+2*128),那么会被编码为两个字节,低字节为65+128=193.高字节为2。3.3.1.2可变包格式可变包格式需要通过HeadOption来解析,格式如下表:OptionBit0OptionBit2OptionBit1OptionBit3加密随机数设备类型设备编码消息体......CRC校验CheckSum1Byte1Byte3Byte......2Byte1Byte异或随机数:如HeadOption中的加密选项为0,那么加密随机数这个字节不存在,同时数据不会进行加密源设备信息:用于广播类型的数据链路,需要标识数据的来源。CRC校验:采用16bit的CRC算法,CRC算法参照附录。CheckSum:采用8Bit的和校验,用于对数据长度比较敏感,但是又需要进行数据校验的场景设备编码和设备类型:Payload中可能需要用到的内部设备Type和ID的定义:内部设备Type和设备ID在设备配对时由主设备分配给从设备,其中Type由主设备获取到从设备的DeviceType之后映射一个数值,并分配给从设备,建立映射关系。ID的3字节构成为:Byte3Byte2Byte1随机数,避免不同子网的ID冲突ID序号,由主设备维护3.3.1.3命令消息体结构如下表CMDkeyCMDIDPayload1Byte1ByteNByteCMDKey:命令标识,主要作用是标识命令的类型以及编号,由主设备生成,发送给从设备,从设备将key返回给主设备,另外在还标识命令的类型CMD