收藏 分享(赏)

设备通讯协议.doc

上传人:精品资料 文档编号:10512103 上传时间:2019-11-24 格式:DOC 页数:22 大小:534.50KB
下载 相关 举报
设备通讯协议.doc_第1页
第1页 / 共22页
设备通讯协议.doc_第2页
第2页 / 共22页
设备通讯协议.doc_第3页
第3页 / 共22页
设备通讯协议.doc_第4页
第4页 / 共22页
设备通讯协议.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、设备通信协议目录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 模块与云

2、 APP 间,以及主从模块之间的通讯协议框架。2. 协议框架协议基于二进制协议框架,完成命令发送接收、命令上报、内部组网等功能。3. 协议内容3.1 设备内部组网协议(或者 MCU 透传模式协议)备内部组网协议包括设备配对、连接、心跳机制等,目的是将一个子设备加入到设备组中,并保持连接。3.1.1 通讯命令格式采用二进制的通讯协议格式,包格式如下表:同步头 HeadOption包长度(变长) 加密随机数(Option)源设备类型(Option)源设备编码(Option)CMD KeyCMD ID Payload CRC(Option)2B 1B 12 B 1B 1B 3B 1B 1B NB 2

3、B详细的包格式在后续章节介绍3.1.2 配对机制配对机制仅适用于设备内组网模式,MCU 透传模式不需要组网协议。进入配对模式由主从设备分别触发,只有在进入配对模式后,才处理相关的配对命令。从设备进入配对模式后定时发送配对请求,直到收到请求回应。主设备收到请求后分配一个设备 ID 给从设备,标识此 ID 被占用,并等待采集器的上线通知,一定时间内收到通知之后确认存入设备列表,如果没有上线通知,则认为设备没有配对成功,从子设备中删除。从设备收到配对回应后存储设备 ID,并且发送上线通知,收到上线通知后完成配对。配对的过程如下图所示:主模块 从模块主设备回应请求从设备发送配对请求从设备上线进入配对模

4、式配对结束主设备回应设备上线3.1.3 连接机制设备每次上电连接需要发送上线通知以及连接所需要的参数给主设备,如下图所示:W i F i 模块 M C U / 从模块上线通知上线通知回应云连接成功 ( 仅用于透传模式 )W i F i 通路配置 ( 仅用于透传模式 )命令交互状态上报3.1.4 心跳机制使用对等的心跳机制,主设备和从设备都可以发现对方的异常状态。3.2 设备与云端通讯协议设备与云端通讯协议基于 MQTT 协议,数据包使用 MQTT 协议传输,数据加密方式采用SSL 加密,命令码采用 2 进制命令格式同设备间通讯协议。3.2.1 MQTT 通讯框架本协议是针对与设备的数据通信,目

5、前通信节点包括:设备、云端和 APP 终端三方。WIFI 上的协议采用 MQTT 协议框架,串口上的通信采用包含包头和校验的二进制协议,通信包采用二进制格式传输,高位在前低位在后。 此协议定义的 MQTT Topic 类型有以下 2 种: 单播,unicast/u/TargetType/TargetID 广播,broadcast/b/SourceType/SourceID注释:TargetType:目标设备类型,TargetID:目标设备编码SourceType:源设备类型, SourceID:源设备编码3.2.2 通讯命令格式设备与云端、APP 的通讯命令分为 4 种:请求与回应、通知命令、

6、广播命令,具体的命令以及格式在后面章节介绍。3.2.2 连接流程设备连接云端的步骤如下图:W i F i 模块 云建立 M Q T T 连接订阅设备主题命令交互状态上报等待连接路由等待 M C U 上电 , 获取密钥h t t p s 获取 s e r v e r信息h t t p s 发送 s e r v e r信息3.3 数据包格式定义数据包的格式根据通讯双方的不同、数据链路的差异会有不同的包格式,本协议为尽量保证数据包格式的统一,做了几点规划:1. 数据包格式中核心的部分包括 CMD ID 和 CMD Payload,这两部分格式所有的包中保持一致,CMD ID 1 个字节,CMD Pa

7、yload 紧跟 CMD ID 长度 N 字节。2. 设备间通讯,包括内部命令、外部转发命令等的数据包格式虽然可能不一样,但是都可以通过包头中的 Option 字节进行区分,可以公用相同的解析函数3. 外部串口通讯的命令格式与设备间通讯格式保持一致。3.3.1 设备间通讯数据格式同步头 HeadOption包长度(变长) 加密随机数(Option)源设备类型(Option)源设备编码(Option)CMD Key CMD IDPayload CRC(Option)2B 1B 12 B 1B 1B 3B 1B 1B NB 2B3.3.1.1 Fix header固定帧头,格式如下表:同步头 He

8、ad Option 包长度(变长)2Byte 1Byte 12 Byte同步头:0x5CFEHead Option:Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0预留 预留 预留 预留 CheckSum 校验广播类型链路CRC 校验 加密选项typedef enumOPTIONAL_ENCRYPT_BIT = (1 设备同步头 HeadOption包长度(变长) 加密随机数(Option)源设备类型(Option)源设备编码(Option)源设备 GUID目标设备 GUIDCMD IDPayloadCRC(Option)2B 1B 12 B 1B 1B 3B 3

9、4 字节 1B NB 2B上行数据格式,设备-PAD同步头 HeadOption包长度(变长) 加密随机数(Option)源设备类型(Option)源设备编码(Option)源设备 GUID CMD IDPayloadCRC(Option)2B 1B 12 B 1B 1B 3B 34 字节 1B NB 2B4.公共命令定义下表是公共命令码以及命令数据的定义,此表仅涉及到上文提到的 CMD ID 和命令信息码(或回复码) ,命令中的其他部分数据请参考上文中的数据包定义。命令码 命令描述 通信方 命令组成 备注设备内部命令起始1 请求配对 从设备-主设备 CMD Key1Byte,0x01 CMD

10、 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 版

11、本号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 Key1By

12、te, 0x01 CMD ID1Byte8 云断开通知主设备-MCU/从设备 CMD Key1Byte, 0x01 CMD ID1Byte9 WiFi 模块上电通知 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 Key1Byt

13、e, 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 Baudrate

14、4ByteBaudrate 取值: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 失败 Baudr

15、ate4ByteWiFi 模块命令起始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 在线33 WiFi 配置完成通知 Wi

16、Fi 模块-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 配置

17、信息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 GUIDA

18、SCII,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 字节、设设备是否在线,0 不在线,1 在线备业务编码长度1Byte、设备业务编码N Byte、固件版本1BYTE、设备硬件架构类型1

19、BYTE、设置是否在线1Byte,若干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 请求同步时间回应

20、 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。信号强度

21、取值范围 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暂时

22、只需要工厂测试程序支持67 设置出厂信息回应 设备-App/Cloud CMD ID1Byte RC(参考命令回应编码表:0 成功,1 失败68 Debug Log 输出控制 App/Cloud-设备 CMD ID1Byte Debug Log 开关1Byte,0关,1 开 是否掉电保存1Byte,0 掉电不保存,1 掉电保存暂时云端实现69 Debug Log 输出控制回应 设备- App/Cloud CMD ID1Byte RC(参考命令回应编码表:0 成功,1 失败70 Debug Log 信息输出 设备- App/Cloud CMD ID1Byte 固件版本 version1Byte

23、日志类型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 推送信息内容nByte76 OTA 升级完成上报 设备- Cloud

24、/APP CMD ID1Byte RC1Byte, 0 成功,1 失败云端以这个命令作为OTA 真正完成的判断标准5. 编码表5.1 节点类型编码表节点类型编码 类型 名称5.2 命令回应编码表031,公共错误码命令回应编码 命令回应含义0 成功1 失败内部通讯公共 RC 值起始2 配对失败,设备满3 WiFi 配置(Easy link)超时4 WiFi 配置(Easylink)退出531 内部通讯公共 RC 值预留外部通讯公共 RC 值起始32 OTA 包号错误33 OTA 数据校验错误34 当前状态不允许 OTA3563 外部通讯公共 RC 值预留业务 RC 值起始64255 业务错误码5

25、.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, 0xC

26、1, 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,

27、 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, 0

28、x81, 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, 0x0

29、0, 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,

30、 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, 0

31、x06, 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, 0x

32、D3, 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

33、, 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,

34、 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,

35、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 加密算法

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报