设备通讯协议_第1页
设备通讯协议_第2页
设备通讯协议_第3页
设备通讯协议_第4页
设备通讯协议_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设备通信协议

目录TOC\o"1-3"1. 适用范围 32. 协议框架 33. 协议内容 3设备内部组网协议(或者MCU透传模式协议) 3通讯命令格式 3配对机制 3连接机制 4心跳机制 5设备与云端通讯协议 5通讯命令格式 5连接流程 5数据包格式定义 6 设备间通讯数据格式 6设备与云、APP通讯数据格式 94. 公共命令定义 105. 编码表 11节点类型编码表 11命令回应编码表 11

适用范围本协议定义WiFi模块与MCU控制单元,WiFi模块与云APP间,以及主从模块之间的通讯协议框架。协议框架协议基于二进制协议框架,完成命令发送接收、命令上报、内部组网等功能。协议内容设备内部组网协议(或者MCU透传模式协议)备内部组网协议包括设备配对、连接、心跳机制等,目的是将一个子设备加入到设备组中,并保持连接。通讯命令格式采用二进制的通讯协议格式,包格式如下表:同步头HeadOption包长度(变长)加密随机数(Option)源设备类型(Option)源设备编码(Option)CMDKeyCMDIDPayloadCRC(Option)2B1B1~2B1B1B3B1B1BNB2B详细的包格式在后续章节介绍配对机制配对机制仅适用于设备内组网模式,MCU透传模式不需要组网协议。进入配对模式由主从设备分别触发,只有在进入配对模式后,才处理相关的配对命令。从设备进入配对模式后定时发送配对请求,直到收到请求回应。主设备收到请求后分配一个设备ID给从设备,标识此ID被占用,并等待采集器的上线通知,一定时间内收到通知之后确认存入设备列表,如果没有上线通知,则认为设备没有配对成功,从子设备中删除。从设备收到配对回应后存储设备ID,并且发送上线通知,收到上线通知后完成配对。配对的过程如下图所示:连接机制设备每次上电连接需要发送上线通知以及连接所需要的参数给主设备,如下图所示:心跳机制使用对等的心跳机制,主设备和从设备都可以发现对方的异常状态。设备与云端通讯协议设备与云端通讯协议基于MQTT协议,数据包使用MQTT协议传输,数据加密方式采用SSL加密,命令码采用2进制命令格式同设备间通讯协议。MQTT通讯框架本协议是针对与设备的数据通信,目前通信节点包括:设备、云端和APP终端三方。WIFI上的协议采用MQTT协议框架,串口上的通信采用包含包头和校验的二进制协议,通信包采用二进制格式传输,高位在前低位在后。此协议定义的MQTTTopic类型有以下2种:单播,unicast/u/{TargetType}/{TargetID}广播,broadcast/b/{SourceType}/{SourceID}注释:TargetType:目标设备类型,TargetID:目标设备编码SourceType:源设备类型,SourceID:源设备编码通讯命令格式设备与云端、APP的通讯命令分为4种:请求与回应、通知命令、广播命令,具体的命令以及格式在后面章节介绍。连接流程设备连接云端的步骤如下图:数据包格式定义数据包的格式根据通讯双方的不同、数据链路的差异会有不同的包格式,本协议为尽量保证数据包格式的统一,做了几点规划:数据包格式中核心的部分包括CMDID和CMDPayload,这两部分格式所有的包中保持一致,CMDID1个字节,CMDPayload紧跟CMDID长度N字节。设备间通讯,包括内部命令、外部转发命令等的数据包格式虽然可能不一样,但是都可以通过包头中的Option字节进行区分,可以公用相同的解析函数外部串口通讯的命令格式与设备间通讯格式保持一致。设备间通讯数据格式同步头HeadOption包长度(变长)加密随机数(Option)源设备类型(Option)源设备编码(Option)CMDKeyCMDIDPayloadCRC(Option)2B1B1~2B1B1B3B1B1BNB2BFixheader固定帧头,格式如下表:同步头HeadOption包长度(变长)2Byte1Byte1~2Byte同步头:0x5CFEHeadOption:Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0预留预留预留预留CheckSum校验广播类型链路CRC校验加密选项typedefenum{OPTIONAL_ENCRYPT_BIT=(1<<0),OPTIONAL_CRC_BIT=(1<<1),OPTIONAL_BROADCAST_DATALINK_BIT=(1<<2),OPTIONAL_CHECKSUM_BIT=(1<<3),}OptionalBitsT;包长度:长度包括本字节之后的所有数据的长度长度是1~2个字节字节数取值长度范围10x0~0x7F0~12720x0180~0x7FFF128~16383长度的编码方式参考MQTT:如长度是321=(65+2*128),那么会被编码为两个字节,低字节为65+128=193.高字节为2。可变包格式可变包格式需要通过HeadOption来解析,格式如下表:OptionBit0OptionBit2OptionBit1OptionBit3加密随机数设备类型设备编码消息体CRC校验CheckSum1Byte1Byte3Byte2Byte1Byte异或随机数:如HeadOption中的加密选项为0,那么加密随机数这个字节不存在,同时数据不会进行加密源设备信息:用于广播类型的数据链路,需要标识数据的来源。CRC校验:采用16bit的CRC算法,CRC算法参照附录。CheckSum:采用8Bit的和校验,用于对数据长度比较敏感,但是又需要进行数据校验的场景设备编码和设备类型:Payload中可能需要用到的内部设备Type和ID的定义:内部设备Type和设备ID在设备配对时由主设备分配给从设备,其中Type由主设备获取到从设备的DeviceType之后映射一个数值,并分配给从设备,建立映射关系。ID的3字节构成为:Byte3Byte2Byte1随机数,避免不同子网的ID冲突ID序号,由主设备维护命令消息体结构如下表CMDkeyCMDIDPayload1Byte1ByteNByteCMDKey:命令标识,主要作用是标识命令的类型以及编号,由主设备生成,发送给从设备,从设备将key返回给主设备,另外在还标识命令的类型CMDKey描述备注1设备内部消息(组网、透传模式的内部消息)这些命令没有重发机制,不能保障一定到达2Notify类消息3Broadcast类消息4~31预留reserved32~255动态分配的key,用于数据的转发、透传此范围的命令如果没有回复会重发,重发一定次数后丢弃,所以此消息可能会多次到达CMDID:命令码,1个字节命令码描述1配对请求2配对请求回应3设备启动通知4设备启动回应5WiFi就绪通知6WiFi断开通知7云就绪通知8云断开通知9WiFi上电通知10WiFi模块配置完成通知11退出WiFi模块配置12退出WiFi模块配置回应13重新配置WiFi模块14重新配置WiFi模块回应15设置WiFi模块串口波特率16设置WiFi模块串口波特率回应17查询WiFi模块串口波特率18查询WiFi模块串口波特率回应WiFi模块消息起始32设备上线通知33WiFi配置完成通知34获取设备WiFi模块监控信息35获取设备WiFi模块监控信息回应36设置路由器信息37设置路由器信息的回应38删除子设备39删除子设备回应40获取在线设备列表41获取在线设备列表回应42设置设备拥有者43设置设备拥有者回应44设置配对模式45设置配对模式回应46在线设备列表变更通知47~63WiFi模块预留所有设备公共命令起始64主MCUOTA传输文件65主MCUOTA传输文件回应66设置出厂参数67设置出厂参数回应68DebugLog输出控制69DebugLog输出控制回应70DebugLog信息输出71从MCUOTA传输文件72从MCUOTA传输文件回应73云端推送通知信息76OTA完成通知上报77~95设备公共命令预留设备业务命令起始96~127设备自定义设备内部消息128~255设备自定义设备与云端/APP通讯消息Payload:命令数据,N字节实例一个所有Option都打开的包结构如下:同步头HeadOption包长度(变长)加密随机数(Option)源设备类型(Option)源设备编码(Option)CMDKeyCMDIDPayloadCRC(Option)2B1B1~2B1B1B3B1B1BNB2B数据组包实例以下是使用CRC校验,并且加密的数据包的组包过程:假设命令包是1234,4个字节,现在要组包1:CRC第一步计算这4个字节的crc值,假设算出来是5、6第一步CRC之后的数据包就变成了1、2、3、4、5、6,6个字节2:加密加密第一步:加入一个随机数,假设这个随机数是0,现在包就是7个字节了,0、1、2、3、4、5、6加密第二步:异或,将除加密随机数外的其他数据都和加密随机数进行异或,得到得数据应该是0、1、2、3、4、5、6机密第三步:查表加密,假设表中0对应的是6、1对应的是5依次类推,那么查表之后的数据变为了6、5、4、3、2、1、0加密结束,payload最终就是6、5、4、3、2、1、0了3:加入包头Payload是7个字节,optional是CRC和加密,那么包头为FE5C0307最终包数据为:FE5C030706050403020100解包的过程与组包相反设备与云、APP通讯数据格式命令数据格式:源设备类型源设备IDCMDID5Byte12Byte1ByteNBytePad串口通讯数据格式下行数据格式,PAD->设备同步头HeadOption包长度(变长)加密随机数(Option)源设备类型(Option)源设备编码(Option)源设备GUID目标设备GUIDCMDIDPayloadCRC(Option)2B1B1~2B1B1B3B34字节1BNB2B上行数据格式,设备->PAD同步头HeadOption包长度(变长)加密随机数(Option)源设备类型(Option)源设备编码(Option)源设备GUIDCMDIDPayloadCRC(Option)2B1B1~2B1B1B3B34字节1BNB2B公共命令定义下表是公共命令码以及命令数据的定义,此表仅涉及到上文提到的CMDID和命令信息码(或回复码),命令中的其他部分数据请参考上文中的数据包定义。命令码命令描述通信方命令组成备注设备内部命令起始1请求配对从设备->主设备CMDKey[1Byte],0x01CMDID[1Byte]业务设备类型[5Byte]当前的内部设备类型[1Byte]当前的内部设备编码[3Byte],全0表示未配置过,非全0表示之前配置过设备业务编码长度[1Byte]设备业务编码[NByte]5个字节的业务设备类型,需要向乐君申请,并且保存在从设备中设备业务编码是用从设备自行定义的设备ID字符串,不超过32字节2请求配对回应主设备->从设备CMDKey,0x01CMDID[1Byte]RC[1Byte],参考RC表分配的设备类型[1Byte]分配的设备ID[3Byte]3设备启动通知MCU/从设备->主设备CMDKey[1Byte],0x01CMDID[1Byte]版本号[1Byte]子设备类型[1Byte],参考章节:子设备类型表业务设备类型[5Byte]内部设备类型[1Byte]内部设备编码[3Byte]设备业务编码长度[1Byte]设备业务编码[NByte]4设备启动通知的回应主设备->MCU/从设备CMDKey[1Byte],0x01CMDID[1Byte]RC[1Byte],参考RC表5WiFi就绪通知主设备->MCU/从设备CMDKey[1Byte],0x01CMDID[1Byte]6WiFi断开通知主设备->MCU/从设备CMDKey[1Byte],0x01CMDID[1Byte]7云就绪通知主设备->MCU/从设备CMDKey[1Byte],0x01CMDID[1Byte]8云断开通知主设备->MCU/从设备CMDKey[1Byte],0x01CMDID[1Byte]9WiFi模块上电通知WiFi模块->MCUCMDKey[1Byte],0x01CMDID[1Byte]WiFi模块上电后定时发送上电通知给MCU,直至MCU上报上线通知给WiFi模块(适用于用于透传模式)10WiFi模块配置完成通知WiFi模块->MCUCMDKey[1Byte],0x01CMDID[1Byte]RC[1Byte],0成功,3超时,4退出11退出WiFi模块配置MCU->WiFi模块CMDKey[1Byte],0x01CMDID[1Byte]12退出WiFi模块配置回应WiFi模块->MCUCMDKey[1Byte],0x01CMDID[1Byte]RC[1Byte],0成功,1失败13重新配置WiFi模块MCU->WiFi模块CMDKey[1Byte],0x01CMDID[1Byte]14重新配置WiFi模块回应WiFi模块->MCUCMDKey[1Byte],0x01CMDID[1Byte]RC[1Byte],0成功,1失败15设置WiFi模块串口波特率MCU->WiFi模块CMDKey[1Byte],0x01CMDID[1Byte]Baudrate[4Byte]Baudrate取值:9600192003840057600115200其他值返回fail默认值是960016设置WiFi模块串口波特率回应WiFi模块->MCUCMDKey[1Byte],0x01CMDID[1Byte]RC[1Byte],0成功,1失败返回值以新设置的波特率发送17查询WiFi模块串口波特率MCU->WiFi模块CMDKey[1Byte],0x01CMDID[1Byte]18查询WiFi模块串口波特率回应WiFi模块->MCUCMDKey[1Byte],0x01CMDID[1Byte]RC[1Byte],0成功,1失败Baudrate[4Byte]WiFi模块命令起始32设备信息上报WiFi模块->Cloud/APPCMDID[1Byte]Num[1Byte],设备个数设备拥有者的小智ID[string,10字节]WiFi模块Mac地址[ASCII,12字节]GUID[ASCII,17字节]、设备业务编码长度[1Byte]、设备业务编码[NByte]、固件版本[1BYTE]、设备硬件架构类型[1BYTE]、设置是否在线[1Byte],若干MQTT主题:/b/{SourceType}/{SourceID}第一个设备是主设备设备硬件架构类型参考“设备硬件架构类型编码表”设备是否在线,0不在线,1在线33WiFi配置完成通知WiFi模块->APPCMDID[1Byte]设备GUID[ASCII,17字节]用户的小智ID[string,10字节]设备业务编码长度[1Byte]设备业务编码[NByte]MQTT主题:/u/{TargetType}/{TargetID}34获取WiFi模块监控数据Cloud/APP->WiFi模块CMDID[1Byte]35获取WiFi模块监控数据回应WiFi模块->Cloud/APPCMDID[1Byte]WiFi模块连接信号强度[1Byte],有符号的1个字节,一般范围在-100Dbm~0DbmWiFi模块型号[16byte],小于16字节的字符串36设置WiFi配置信息APP/Cloud/串口控制端->设备CMDID[1Byte]是否设置拥有者ID[1Byte],0不设置,1设置设备拥有者的小智ID[string,10字节]是否设置路由器信息[1Byte],0不设置,1设置SSIDLen,用户名长度[1BYTE],用户名长度小于等于32字节PWDLen,密码长度[1BYTE],密码小于等于64字节SSIDPWD37设置WiFi配置信息回应设备->APP/Cloud/串口控制端CMDID[1Byte]RC(参考命令回应编码表:0成功,1失败38删除子设备APP/Cloud/串口控制端->设备CMDID[1Byte]GUID[ASCII,17字节]39删除子设备回应设备->APP/Cloud/串口控制端CMDID[1Byte]RC(参考命令回应编码表:0成功,1失败40获取设备列表APP/Cloud/串口控制端->主设备CMDID[1Byte]41获取设备列表回应主设备->APP/Cloud/串口控制端CMDID[1Byte]Num[1Byte],设备个数设备拥有者的小智ID[string,10字节]WiFi模块Mac地址[ASCII,12字节]GUID[ASCII,17字节]、设备业务编码长度[1Byte]、设备业务编码[NByte]、固件版本[1BYTE]、设备硬件架构类型[1BYTE]、设置是否在线[1Byte],若干设备是否在线,0不在线,1在线44设置设备进入配对模式App/Cloud/串口控制端->设备CMDID[1Byte]45设置设备进入配对模式回应设备->App/Cloud/串口控制端CMDID[1Byte]RC(参考命令回应编码表:0成功,1失败)[BYTE]47设置设备退出配对模式App/Cloud/串口控制端->设备CMDID[1Byte]48设置设备退出配对模式回应设备->App/Cloud/串口控制端CMDID[1Byte]RC(参考命令回应编码表:0成功,1失败)[BYTE]

49请求同步时间设备->CloudCMDID[1Byte]50请求同步时间回应Cloud->设备CMDID[1Byte]RC(参考命令回应编码表:0成功,1失败)[BYTE]RTC时间[67Byte],格式是{秒-分-时-日-月-年-星期几},各一个字节星期几的范围从1~7,1表示星期一51扫描AP列表控制端->设备CMDID[1Byte]52扫描AP列表回应设备到控制端CMDID[1Byte]RC(参考命令回应编码表:0成功,1失败)[BYTE]APNumber[1Byte],扫描到的AP数量AP信息{[32Byte],SSID[1Byte],RSSI信号强度}若干SSID为字符串,最大32字节,返回数据中固定32字节位置存放SSID。信号强度取值范围0~100所有设备公共命令起始64主MCUOTA传输文件Cloud->设备CMDID[1Byte]总包数[2Byte]当前包号[2Byte]包内容[NBYTE,最大长度1024]65主MCUOTA传输文件回应设备->CloudCMDID[1Byte]RC(参考命令回应编码表:0成功,1失败,32包号错误,33数据校验错误)[1BYTE]当前包号[2Byte]66设置出厂信息App/Cloud->设备CMDID[1Byte]设备ID[12Byte]设备业务ID长度[1Byte]设备业务ID[NByte]设备业务ID长度为0表示不需要设备业务ID暂时只需要工厂测试程序支持67设置出厂信息回应设备->App/CloudCMDID[1Byte]RC(参考命令回应编码表:0成功,1失败68DebugLog输出控制App/Cloud->设备CMDID[1Byte]DebugLog开关[1Byte],0关,1开是否掉电保存[1Byte],0掉电不保存,1掉电保存暂时云端实现69DebugLog输出控制回应设备->App/CloudCMDID[1Byte]RC(参考命令回应编码表:0成功,1失败70DebugLog信息输出设备->App/CloudCMDID[1Byte]固件版本version[1Byte]日志类型LogType[1Byte]Log内容[NByte],字符串71从MCUOTA传输文件Cloud->设备CMDID[1Byte]总包数[2Byte]当前包号[2Byte]包内容[NBYTE,最大长度1024]用于升级主从MCU架构下的从MUC固件72从MCUOTA传输文件回应设备->CloudCMDID[1Byte]RC(参考命令回应编码表:0成功,1失败,32包号错误,33数据校验错误)[1BYTE]当前包号[2Byte]73云端推送通知信息Cloud->APP/设备CMDID[1Byte]推送信息内容[nByte]76OTA升级完成上报设备->Cloud/APPCMDID[1Byte]RC[1Byte],0成功,1失败云端以这个命令作为OTA真正完成的判断标准编码表节点类型编码表节点类型编码类型名称命令回应编码表0~31,公共错误码命令回应编码命令回应含义0成功1失败内部通讯公共RC值起始2配对失败,设备满3WiFi配置(Easylink)超时4WiFi配置(Easylink)退出5~31内部通讯公共RC值预留外部通讯公共RC值起始32OTA包号错误33OTA数据校验错误34当前状态不允许OTA35~63外部通讯公共RC值预留业务RC值起始64~255业务错误码子设备类型表子设备类型描述1透传模式下的MCU设备2组网模式下的从设备设备硬件架构类型编码表设备硬件结构类型描述0单MCU架构1双MCU架构(WiFi模块+控制MCU模块)附录CRC校验算法staticconstuint8c_crc_htalbe[]=//CRC高8位查表{0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41, 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41, 0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41, 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, 0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41, 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41, 0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41, 0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, 0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41, 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41, 0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41, 0x00,0xC1,0x81,0x40};staticconstuint8c_crc_ltalbe[]= //CRC校验查表低8位{0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06,0x07,0xC7, 0x05,0xC5,0xC4,0x04,0xCC,0x0C,0x0D,0xCD,0x0F,0xCF,0xCE,0x0E, 0x0A,0xCA,0xCB,0x0B,0xC9,0x09,0x08,0xC8,0xD8,0x18,0x19,0xD9, 0x1B,0xDB,0xDA,0x1A,0x1E,0xDE,0xDF,0x1F,0xDD,0x1D,0x1C,0xDC,0x14,0xD4,0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3, 0x11,0xD1,0xD0,0x10,0xF0,0x30,0x31,0xF1,0x33,0xF3,0xF2,0x32, 0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4,0x3C,0xFC,0xFD,0x3D, 0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,0x3B,0xFB,0x39,0xF9,0xF8,0x38,0x28,0xE8,0xE9,0x29,0xEB,0x2B,0x2A,0xEA,0xEE,0x2E,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论