设备通讯协议.doc

上传人:jian****018 文档编号:10324369 上传时间:2020-04-11 格式:DOC 页数:22 大小:524.50KB
返回 下载 相关 举报
设备通讯协议.doc_第1页
第1页 / 共22页
设备通讯协议.doc_第2页
第2页 / 共22页
设备通讯协议.doc_第3页
第3页 / 共22页
点击查看更多>>
资源描述
设备通信协议目录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通讯数据格式94.公共命令定义105.编码表115.1节点类型编码表115.2命令回应编码表111. 适用范围本协议定义WiFi模块与MCU控制单元,WiFi模块与云APP间,以及主从模块之间的通讯协议框架。2. 协议框架协议基于二进制协议框架,完成命令发送接收、命令上报、内部组网等功能。3. 协议内容3.1设备内部组网协议(或者MCU透传模式协议)备内部组网协议包括设备配对、连接、心跳机制等,目的是将一个子设备加入到设备组中,并保持连接。3.1.1 通讯命令格式采用二进制的通讯协议格式,包格式如下表:同步头HeadOption包长度(变长)加密随机数(Option)源设备类型(Option)源设备编码(Option)CMD KeyCMD IDPayloadCRC(Option)2B1B12 B1B1B3B1B1BNB2B详细的包格式在后续章节介绍3.1.2 配对机制配对机制仅适用于设备内组网模式,MCU透传模式不需要组网协议。进入配对模式由主从设备分别触发,只有在进入配对模式后,才处理相关的配对命令。从设备进入配对模式后定时发送配对请求,直到收到请求回应。主设备收到请求后分配一个设备ID给从设备,标识此ID被占用,并等待采集器的上线通知,一定时间内收到通知之后确认存入设备列表,如果没有上线通知,则认为设备没有配对成功,从子设备中删除。从设备收到配对回应后存储设备ID,并且发送上线通知,收到上线通知后完成配对。配对的过程如下图所示:3.1.3 连接机制设备每次上电连接需要发送上线通知以及连接所需要的参数给主设备,如下图所示:3.1.4 心跳机制使用对等的心跳机制,主设备和从设备都可以发现对方的异常状态。3.2 设备与云端通讯协议设备与云端通讯协议基于MQTT协议,数据包使用MQTT协议传输,数据加密方式采用SSL加密,命令码采用2进制命令格式同设备间通讯协议。3.2.1 MQTT通讯框架本协议是针对与设备的数据通信,目前通信节点包括:设备、云端和APP终端三方。WIFI上的协议采用MQTT协议框架,串口上的通信采用包含包头和校验的二进制协议,通信包采用二进制格式传输,高位在前低位在后。 此协议定义的MQTT Topic类型有以下2种: 单播,unicast/u/TargetType/TargetID 广播,broadcast/b/SourceType/SourceID注释:TargetType:目标设备类型,TargetID:目标设备编码SourceType:源设备类型,SourceID:源设备编码3.2.2 通讯命令格式设备与云端、APP的通讯命令分为4种:请求与回应、通知命令、广播命令,具体的命令以及格式在后面章节介绍。3.2.2 连接流程设备连接云端的步骤如下图:3.3 数据包格式定义数据包的格式根据通讯双方的不同、数据链路的差异会有不同的包格式,本协议为尽量保证数据包格式的统一,做了几点规划:1. 数据包格式中核心的部分包括CMD ID和CMD Payload,这两部分格式所有的包中保持一致,CMD ID 1个字节,CMD Payload紧跟CMD ID长度N字节。2. 设备间通讯,包括内部命令、外部转发命令等的数据包格式虽然可能不一样,但是都可以通过包头中的Option字节进行区分,可以公用相同的解析函数3. 外部串口通讯的命令格式与设备间通讯格式保持一致。3.3.1 设备间通讯数据格式同步头HeadOption包长度(变长)加密随机数(Option)源设备类型(Option)源设备编码(Option)CMD KeyCMD IDPayloadCRC(Option)2B1B12 B1B1B3B1B1BNB2B3.3.1.1 Fix header固定帧头,格式如下表:同步头Head Option包长度(变长)2Byte1Byte12 Byte同步头:0x5CFEHead Option:Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0预留预留预留预留CheckSum校验广播类型链路CRC校验加密选项typedef enum OPTIONAL_ENCRYPT_BIT = (10), OPTIONAL_CRC_BIT = (11), OPTIONAL_BROADCAST_DATALINK_BIT = (12), OPTIONAL_CHECKSUM_BIT = (1设备同步头HeadOption包长度(变长)加密随机数(Option)源设备类型(Option)源设备编码(Option)源设备GUID目标设备GUIDCMD IDPayloadCRC(Option)2B1B12 B1B1B3B34字节1BNB2B上行数据格式,设备-PAD同步头HeadOption包长度(变长)加密随机数(Option)源设备类型(Option)源设备编码(Option)源设备GUIDCMD IDPayloadCRC(Option)2B1B12 B1B1B3B34字节1BNB2B4. 公共命令定义下表是公共命令码以及命令数据的定义,此表仅涉及到上文提到的CMD ID和命令信息码(或回复码),命令中的其他部分数据请参考上文中的数据包定义。命令码命令描述通信方命令组成备注设备内部命令起始1请求配对从设备-主设备 CMD Key1Byte,0x01 CMD ID1Byte 业务设备类型5Byte 当前的内部设备类型1Byte 当前的内部设备编码3Byte,全0表示未配置过,非全0表示之前配置过 设备业务编码长度1Byte 设备业务编码N Byte5个字节的业务设备类型,需要向乐君申请,并且保存在从设备中设备业务编码是用从设备自行定义的设备ID字符串,不超过32字节2请求配对回应主设备-从设备 CMD Key,0x01 CMD ID1Byte RC1Byte,参考RC表 分配的设备类型1Byte 分配的设备ID3Byte3设备启动通知MCU/从设备-主设备 CMD Key1Byte, 0x01 CMD ID1Byte 版本号1Byte 子设备类型1Byte,参考5.3章节:子设备类型表 业务设备类型5Byte 内部设备类型1Byte 内部设备编码3Byte 设备业务编码长度1Byte 设备业务编码N Byte4设备启动通知的回应主设备-MCU/从设备 CMD Key1Byte, 0x01 CMD ID1Byte RC1Byte, 参考RC表5WiFi就绪通知主设备-MCU/从设备 CMD Key1Byte, 0x01 CMD ID1Byte6WiFi断开通知主设备-MCU/从设备 CMD Key1Byte, 0x01 CMD ID1Byte7云就绪通知主设备-MCU/从设备 CMD Key1Byte, 0x01 CMD ID1Byte8云断开通知主设备-MCU/从设备 CMD Key1Byte, 0x01 CMD ID1Byte9WiFi模块上电通知WiFi模块-MCU CMD Key1Byte, 0x01 CMD ID1ByteWiFi模块上电后定时发送上电通知给MCU,直至MCU上报上线通知给WiFi模块(适用于用于透传模式)10WiFi模块配置完成通知WiFi模块-MCU CMD Key1Byte, 0x01 CMD ID1Byte RC1Byte,0成功,3超时,4退出11退出WiFi模块配置MCU-WiFi模块 CMD Key1Byte, 0x01 CMD ID1Byte12退出WiFi模块配置回应WiFi模块-MCU CMD Key1Byte, 0x01 CMD ID1Byte RC1Byte,0成功,1失败13重新配置WiFi模块MCU-WiFi模块 CMD Key1Byte, 0x01 CMD ID1Byte14重新配置WiFi模块回应WiFi模块-MCU CMD Key1Byte, 0x01 CMD ID1Byte RC1Byte,0成功,1失败15设置WiFi模块串口波特率MCU-WiFi模块 CMD Key1Byte, 0x01 CMD ID1Byte Baudrate4ByteBaudrate取值:9600192003840057600115200其他值返回fail默认值是960016设置WiFi模块串口波特率回应WiFi模块-MCU CMD Key1Byte, 0x01 CMD ID1Byte RC1Byte,0成功,1失败返回值以新设置的波特率发送17查询WiFi模块串口波特率MCU-WiFi模块 CMD Key1Byte, 0x01 CMD ID1Byte18查询WiFi模块串口波特率回应WiFi模块-MCU CMD Key1Byte, 0x01 CMD ID1Byte RC1Byte,0成功,1失败 Baudrate4ByteWiFi模块命令起始32设备信息上报WiFi模块- Cloud/APP CMD ID1Byte Num1Byte,设备个数 设备拥有者的小智IDstring, 10字节 WiFi模块Mac地址ASCII,12字节 GUIDASCII,17字节、设备业务编码长度1Byte、设备业务编码N Byte、固件版本1BYTE、设备硬件架构类型1BYTE、设置是否在线1Byte,若干MQTT主题:/b/SourceType/SourceID第一个设备是主设备设备硬件架构类型参考“设备硬件架构类型编码表”设备是否在线,0不在线,1在线33WiFi配置完成通知WiFi模块-APP CMD ID1Byte 设备GUIDASCII,17字节 用户的小智IDstring, 10字节 设备业务编码长度1Byte 设备业务编码N ByteMQTT主题:/u/TargetType/TargetID34获取WiFi模块监控数据Cloud/APP-WiFi模块 CMD ID1Byte35获取WiFi模块监控数据回应WiFi模块-Cloud/APP CMD ID1Byte WiFi模块连接信号强度1Byte,有符号的1个字节,一般范围在-100Dbm0Dbm WiFi模块型号16byte, 小于16字节的字符串36设置WiFi配置信息APP/Cloud/串口控制端-设备 CMD ID1Byte 是否设置拥有者ID1Byte,0不设置,1设置 设备拥有者的小智IDstring, 10字节 是否设置路由器信息1Byte,0不设置,1设置 SSID Len,用户名长度1 BYTE,用户名长度小于等于32字节 PWD Len,密码长度1 BYTE,密码小于等于64字节 SSID PWD37设置WiFi配置信息回应设备-APP/Cloud/串口控制端 CMD ID1Byte RC(参考命令回应编码表:0成功,1失败38删除子设备APP/Cloud/串口控制端-设备 CMD ID1Byte GUIDASCII,17字节39删除子设备回应设备- APP/Cloud/串口控制端 CMD ID1Byte RC(参考命令回应编码表:0成功,1失败40获取设备列表APP/Cloud/串口控制端-主设备 CMD ID1Byte41获取设备列表回应主设备-APP/Cloud/串口控制端 CMD ID1Byte Num1Byte,设备个数 设备拥有者的小智IDstring, 10字节 WiFi模块Mac地址ASCII,12字节 GUIDASCII,17字节、设备业务编码长度1Byte、设备业务编码N Byte、固件版本1BYTE、设备硬件架构类型1BYTE、设置是否在线1Byte,若干设备是否在线,0不在线,1在线44设置设备进入配对模式App/Cloud/串口控制端-设备 CMD ID1Byte45设置设备进入配对模式回应设备- App/Cloud/串口控制端 CMD ID1Byte RC(参考命令回应编码表:0成功,1失败) BYTE47设置设备退出配对模式App/Cloud/串口控制端-设备 CMD ID1Byte48设置设备退出配对模式回应设备- App/Cloud/串口控制端 CMD ID1Byte RC(参考命令回应编码表:0成功,1失败) BYTE49请求同步时间设备-Cloud CMD ID1Byte50请求同步时间回应Cloud-设备 CMD ID1Byte RC(参考命令回应编码表:0成功,1失败) BYTE RTC时间67Byte,格式是秒-分-时-日-月-年-星期几,各一个字节星期几的范围从17,1表示星期一51扫描AP列表控制端-设备 CMD ID1Byte52扫描AP列表回应设备到控制端 CMD ID1Byte RC(参考命令回应编码表:0成功,1失败) BYTE AP Number1Byte,扫描到的AP数量 AP信息 32Byte,SSID1Byte,RSSI信号强度若干SSID为字符串,最大32字节,返回数据中固定32字节位置存放SSID。信号强度取值范围0100所有设备公共命令起始64主MCU OTA传输文件Cloud-设备 CMD ID1Byte 总包数2Byte 当前包号2Byte 包内容N BYTE,最大长度102465主MCU OTA传输文件回应设备-Cloud CMD ID1Byte RC(参考命令回应编码表:0成功,1失败,32包号错误,33数据校验错误) 1 BYTE 当前包号2Byte66设置出厂信息App/Cloud-设备 CMD ID1Byte 设备ID12 Byte 设备业务ID长度1 Byte 设备业务IDN Byte设备业务ID长度为0表示不需要设备业务ID暂时只需要工厂测试程序支持67设置出厂信息回应设备-App/Cloud CMD ID1Byte RC(参考命令回应编码表:0成功,1失败68Debug Log输出控制App/Cloud-设备 CMD ID1Byte Debug Log开关1Byte,0关,1开 是否掉电保存1Byte,0掉电不保存,1掉电保存暂时云端实现69Debug Log输出控制回应设备- App/Cloud CMD ID1Byte RC(参考命令回应编码表:0成功,1失败70Debug Log信息输出设备- App/Cloud CMD ID1Byte 固件版本version1Byte 日志类型LogType1Byte Log内容NByte,字符串71从MCU OTA传输文件Cloud-设备 CMD ID1Byte 总包数2Byte 当前包号2Byte 包内容N BYTE,最大长度1024用于升级主从MCU架构下的从MUC固件72从MCU OTA传输文件回应设备-Cloud CMD ID1Byte RC(参考命令回应编码表:0成功,1失败,32包号错误,33数据校验错误) 1 BYTE 当前包号2Byte73云端推送通知信息CloudAPP/设备 CMD ID1Byte 推送信息内容nByte76OTA升级完成上报设备- Cloud/APP CMD ID1Byte RC1Byte, 0成功,1失败云端以这个命令作为OTA真正完成的判断标准5. 编码表5.1节点类型编码表节点类型编码类型名称5.2命令回应编码表031,公共错误码命令回应编码命令回应含义0成功1失败内部通讯公共RC值起始2配对失败,设备满3WiFi配置(Easy link)超时4WiFi配置(Easylink)退出531内部通讯公共RC值预留外部通讯公共RC值起始32OTA包号错误33OTA数据校验错误34当前状态不允许OTA3563外部通讯公共RC值预留业务RC值起始64255业务错误码5.3 子设备类型表子设备类型描述1透传模式下的MCU设备2组网模式下的从设备5.4 设备硬件架构类型编码表设备硬件结构类型描述0单MCU架构1双MCU架构(WiFi模块+控制MCU模块)6. 附录6.1 CRC校验算法static const uint8 c_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;static const uint8 c_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, 0x2F, 0xEF,0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1,0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4,0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB,0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA,0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0,0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97,0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E,0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89,0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83,0x41, 0x81, 0x80, 0x40;uint16 CalCrc16(uint8* buff, uint16 len)uint8 crc_h = 0xFF; /crc 校验高8位uint8 crc_l = 0xFF; /crc 校验低8位uint16 index; / CRC索引 if(len = 0 | buff =NULL) return 0; while (len-)index = crc_l *buff+ ;crc_l = crc_h c_crc_htalbeindex;crc_h = c_crc_ltalbeindex ;return (crc_h 8) | crc_l) ;6.2 加密算法
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 模板表格


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!