一、写在之前

首先分享一篇华为云的官方指南:在线开发MQTT协议的智慧路灯_设备接入 IoTDA_最佳实践_设备接入_华为云

这篇文章很好地讲述了如何通过MQTT.fx的设备模拟器替代真实的设备,然后快速体验设备上报数据到物联网平台和远程下发控制命令到设备的全过程。但是MQTT.fx在这里屏蔽了太多MQTT协议的细节,我们只需要简简单单copy几条字符串,就可以完成CONNECT、PUBLIC等操作,这对于入门肯定是有好处的,但是如果想要从中学习MQTT协议,那就帮助不大了。所以在做完这个实验后,老师推荐我们使用网络调试助手通过MQTT协议接入到华为云物联网平台。所以在这里我也会用网络调试助手重现官方指南中所有的操作,在这个过程中熟悉了解MQTT报文的格式。

二、前期准备

强烈建议先跟着华为云的官方指南先操作一遍!!!

软件:网络调试助手,附百度网盘链接:

链接:https://pan.baidu.com/s/19Nv_Q5jzwqVKQI_WczZCaQ 
        提取码:1i57

连接信息:

(1)根据官方指南,得到的ClientId、Username、Password

(2)成功注册设备后,获得的diviceId(不是这个截图里的,而是截图所代表的这一步完成之后,会自动收到一份txt,是那里面的)

(3)平台的对接地址

笔者的连接信息如下,建议大家可以用一个word文档把这些东西记下来,因为之后会用到:

ClientId:621e287fe68aa647c088f044_123456lzy_0_0_2022030114

Username:621e287fe68aa647c088f044_123456lzy

Password:0218f83bed7afa2be05c453fe79e585d3c2244fde7161f8b11b6ee8acf49c8fa

diviceId:621e287fe68aa647c088f044_123456lzy

平台对接地址:a1621c9400.iot-mqtts.cn-north-4.myhuaweicloud.com

(这些是笔者的连接信息哦,每个人连接信息都不相同)

三、连接到华为云平台(CONNECT)

一份MQTT报文由三个部分组成,分别是固定报头+可变报头+负载。我们先不去了解报文的每一个字段,每一个数字详细是什么含义,先来组装一个CONNECT报文。(以下出现的都是十六进制)

1、固定报头:10 +(可变报头和负载的总长度)

2、可变报头:00 04 4D 51 54 54 04 C2 00 64(00 64是Keep Alive的时长,可自行定义)

3、负载(这个部分一定要认真仔细)

先打开我们的网络调试助手,我们利用它来将字符串转化为十六进制,还能统计长度。要转化的字符串如下:

ClientId:621e287fe68aa647c088f044_123456lzy_0_0_2022030114

Username:621e287fe68aa647c088f044_123456lzy

Password:0218f83bed7afa2be05c453fe79e585d3c2244fde7161f8b11b6ee8acf49c8fa

先来转化ClientId,按照我的截图中的设置界面的各种选项:

将十六进制码复制过来:

36 32 31 65 32 38 37 66 65 36 38 61 61 36 34 37 63 30 38 38 66 30 34 34 5F 31 32 33 34 35 36 6C 7A 79 5F 30 5F 30 5F 32 30 32 32 30 33 30 31 31 34

然后在前面加上它的长度的十六进制码,右下角有十进制的长度,我们手算装换一下进制就行:

00 31 36 32 31 65 32 38 37 66 65 36 38 61 61 36 34 37 63 30 38 38 66 30 34 34 5F 31 32 33 34 35 36 6C 7A 79 5F 30 5F 30 5F 32 30 32 32 30 33 30 31 31 34

(这里注意,长度的格式为00+长度,不要漏掉00)

依样画葫芦,得到Username和Password的十六进制串:

Username:

00 22 36 32 31 65 32 38 37 66 65 36 38 61 61 36 34 37 63 30 38 38 66 30 34 34 5F 31 32 33 34 35 36 6C 7A 79

Password:

00 40 30 32 31 38 66 38 33 62 65 64 37 61 66 61 32 62 65 30 35 63 34 35 33 66 65 37 39 65 35 38 35 64 33 63 32 32 34 34 66 64 65 37 31 36 31 66 38 62 31 31 62 36 65 65 38 61 63 66 34 39 63 38 66 61

再把三者连接起来,恭喜,CONNECT报文的负载就有了!

00 31 36 32 31 65 32 38 37 66 65 36 38 61 61 36 34 37 63 30 38 38 66 30 34 34 5F 31 32 33 34 35 36 6C 7A 79 5F 30 5F 30 5F 32 30 32 32 30 33 30 31 31 34 00 22 36 32 31 65 32 38 37 66 65 36 38 61 61 36 34 37 63 30 38 38 66 30 34 34 5F 31 32 33 34 35 36 6C 7A 79 00 40 30 32 31 38 66 38 33 62 65 64 37 61 66 61 32 62 65 30 35 63 34 35 33 66 65 37 39 65 35 38 35 64 33 63 32 32 34 34 66 64 65 37 31 36 31 66 38 62 31 31 62 36 65 65 38 61 63 66 34 39 63 38 66 61

然后我们把可变报头加到负载的前面:
        00 04 4D 51 54 54 04 C2 00 64 00 31 36 32 31 65 32 38 37 66 65 36 38 61 61 36 34 37 63 30 38 38 66 30 34 34 5F 31 32 33 34 35 36 6C 7A 79 5F 30 5F 30 5F 32 30 32 32 30 33 30 31 31 34 00 22 36 32 31 65 32 38 37 66 65 36 38 61 61 36 34 37 63 30 38 38 66 30 34 34 5F 31 32 33 34 35 36 6C 7A 79 00 40 30 32 31 38 66 38 33 62 65 64 37 61 66 61 32 62 65 30 35 63 34 35 33 66 65 37 39 65 35 38 35 64 33 63 32 32 34 34 66 64 65 37 31 36 31 66 38 62 31 31 62 36 65 65 38 61 63 66 34 39 63 38 66 61

然后我们计算上面这一大串的长度,笔者这里为163,转化为十六进制就是A3,这里要注意一下了,如果大于128,A3后面要加01放进固定报头中,我这里是A3 01,so,最后的报文:

10 A3 01 00 04 4D 51 54 54 04 C2 00 64 00 31 36 32 31 65 32 38 37 66 65 36 38 61 61 36 34 37 63 30 38 38 66 30 34 34 5F 31 32 33 34 35 36 6C 7A 79 5F 30 5F 30 5F 32 30 32 32 30 33 30 31 31 34 00 22 36 32 31 65 32 38 37 66 65 36 38 61 61 36 34 37 63 30 38 38 66 30 34 34 5F 31 32 33 34 35 36 6C 7A 79 00 40 30 32 31 38 66 38 33 62 65 64 37 61 66 61 32 62 65 30 35 63 34 35 33 66 65 37 39 65 35 38 35 64 33 63 32 32 34 34 66 64 65 37 31 36 31 66 38 62 31 31 62 36 65 65 38 61 63 66 34 39 63 38 66 61

终于完成了,以上就是我们的CONNECT报文!现在我们来发送吧,上截图:

按照我的界面来配置界面,回复20 02 00 00 即为连接成功,回复其它的就是连接失败了,太久没有回复就是你滴十六进制码有问题,建议检查一下长度,有没有缺00,总长度后面是否要加01。连接成功后,在控制台找到所有设备。看到已经有了一个绿色的点,在线。

到此为止,我们已经完成了连接到平台的过程,发送的那一大串十六进制码,就是所谓的CONNECT报文。

四、上报数据(PUBLISH)

接下来是PUBLISH报文,相信看到这里,你应该对报文有些许认识了吧,没有太多深奥的东西,就是一串十六进制的数字串,但是它的每个字节都有它的含义,少了一个字节,机器就辨认不出来。

如果你已经理解的话,那么只要知道结构,报文就可以自己整理出来了吧!

PUBLISH报文的结构:

(1)固定报头:30 +(可变报头+负载的总长度)

(2)可变报头:长度 + topic(华为云的指南有说明,topic实际上就是那个接口地址)

笔者的为:$oc/devices/{621e287fe68aa647c088f044_123456lzy}/sys/properties/report

(3)负载:依旧看华为云的指南,其实就是这段代码,复制过来,咱们把回车删掉,弄成一行。有一点要提,这个负载我们弄成十六进制后就不用在前面加长度了。

笔者的为:{"services": [{"service_id": "BasicData","properties": {"luminance": 40}}]}

(40是我改动的luminance的值,要验证的同学可以随意改一下)

最后的PUBLISH报文:
        30 93 01 00 46 24 6F 63 2F 64 65 76 69 63 65 73 2F 7B 36 32 31 65 32 38 37 66 65 36 38 61 61 36 34 37 63 30 38 38 66 30 34 34 5F 31 32 33 34 35 36 6C 7A 79 7D 2F 73 79 73 2F 70 72 6F 70 65 72 74 69 65 73 2F 72 65 70 6F 72 74 7B 22 73 65 72 76 69 63 65 73 22 3A 20 5B 7B 22 73 65 72 76 69 63 65 5F 69 64 22 3A 20 22 42 61 73 69 63 44 61 74 61 22 2C 22 70 72 6F 70 65 72 74 69 65 73 22 3A 20 7B 22 6C 75 6D 69 6E 61 6E 63 65 22 3A 20 34 30 7D 7D 5D 7D

CONNECT后发送,上截图:

发送的PUBLISH报文虽然没有得到回复,但是我们刷新一下华为云的设备详情,变成了40,成功改变了luminance!

五、命令下发

命令下发就更简单了,是平台给我们发命令,发送完CONNECT报文后,我们打开华为云平台的命令下发,点击确定:

在网络调试助手可以收到:

搞定!

六、MQTT协议总结

写到这里我本来是想把MQTT的报文的各种结构、细节、资料什么的全部都copy贴过来的,如果上面的步骤都有好好过完的话,看懂MQTT协议应该是没有什么问题的了,但是随便一搜就能搜到的东西我也不好意思水字数了,CSDN上有很多人总结得比我更厉害(其实是因为我懒,哈哈哈)。我一直都是这样的观点,有基础才能看得懂,没基础,看别人写的经验、帖子,就是对着干巴巴的文字呲牙。实践之后形成感性的认识,才能更好接收理论上的知识。

最后,这是我写的第一篇文章,自己也是个新手,如果有写的不对的地方,希望大家不吝赐教!

使用网络调试助手通过MQTT协议接入到华为云物联网平台相关推荐

  1. ESP8266通过AT指令接入华为云物联网平台

    1. esp8266 MQTT固件烧录 在先前如果使用Arduino开发过后的esp8266可能已经无法使用AT指令,或者出厂固件不支持全部的MQTT功能,这里我们首先对esp8266进行MQTT固件 ...

  2. MQTT网关连接华为云物联网平台应用

    1.概述 ZLAN5143D是一款专门为工业环境设计的RS485设备数据采集器/物联网网关,兼具串口服务器.Modbus网关.MQTT网关.RS485转JSON等多种功能于一体.如图 1所示,可以连接 ...

  3. stm32+AT指令+ESP8266接入华为云物联网平台并完成属性上报与命令响应

    (示例:stm32f103c8t6+esp01s串口AT指令模式) 流程简介: 一. MQTT透传AT固件烧录 本期教程使用的是stm32+AT指令控制esp01s接入华为云联网平台完成数据上报与命令 ...

  4. 合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制

    一.简介 1.项目介绍 之前发布的文章有esp8266的wifi模块和BC20的NB模块与华为云物联网通信为主,本期文章采用了合宙的4G LTE Cat.1模块,编程语言用的是lua,整体来说代码比较 ...

  5. 教你如何使用esp8266接入华为云物联网平台(IOTDA)(Arduino IDE开发)

    教你如何使用esp8266接入华为云物联网平台(IOTDA)(Arduino IDE开发) 一.简介         esp8266系列作为低功耗高性价比的嵌入式无线网络控制模块,深受对嵌入式感兴趣的 ...

  6. 华为云物联网平台创建产品与设备(含MQTT.fx测试)

    一. 创建产品.注册设备.添加属性 1. 创建产品 点击进入:华为云物联网平台控制台 2.注册设备 此时可获取设备ID和密钥: device id:"61fb2d7fde9933029be5 ...

  7. EC600 QuecPython接入第三方MQTT服务器, 以阿里云物联网平台为例,可替换为自己创建的MQTT服务器

    EC600 QuecPython 自带Aliyun.腾讯云物联网平台的接入库,但重口难调,产品项目中更多的是接入自己搭建的第三方服务器. MQTT协议接入不同的服务器,最大的区别在于connect报文 ...

  8. HI3861学习笔记(25)——接入华为云物联网平台IoT

    一.平台简介 设备接入服务(IoTDA) 是华为云的物联网平台,提供海量设备连接上云.设备和云端双向消息通信.批量设备管理.远程控制和监控.OTA升级.设备联动规则等能力,并可将设备数据灵活流转到华为 ...

  9. 使用网络调试助手 MQTT接入阿里云物联网平台,逐字节讲解,适用单片机/ESP8266接入阿里云

    目录 1. CONNECT 连接服务器 2. CONNACK 确认连接 3. DISCONNECT 断开连接 4. PINGREQ 心跳请求 5. PINGRESP 心跳响应 6. SUBSCRIBE ...

最新文章

  1. 基于多视图几何方式的三维重建
  2. java框架篇---Struts2的处理流程
  3. 人际交往的“三有三避”
  4. CefSharp试用
  5. wps 复制流程图_简单三步,用WPS轻松完成一个又大气又好看的流程图!
  6. 武德 | 年轻人!这才叫真正的程序猿的武德
  7. 年年传、年年鸽!iPhone “神机”又被曝光了,明年年初亮相?
  8. ajax对象的属性和方法
  9. C++单目运算符的重载与双目运算符的重载【案例】
  10. Git基础操作及常见命令——详解
  11. SaltStack 模块学习之拷贝master服务器上文件和目录到minion服务器
  12. 数据结构期末复习第一章绪论
  13. 路由器 AP、路由、中继、桥接模式的区别
  14. 养老院智能健康手环开发/功能/特点/结构/原理
  15. 【原创】基于JavaWeb的医院预约挂号系统(医院挂号管理系统毕业设计)
  16. 常见windows字体和MacOS字体分类主要有几种?
  17. deepin个性化设置
  18. 办公能手教你pdf如何设置背景颜色
  19. 大数据 人工智能 数据库 数据仓库
  20. LabVIEW 严格类型VI

热门文章

  1. CH340与Android串口通信
  2. STM32延时函数的四种方法
  3. 【数据库基础】数据库的视图操作
  4. FX5 C的编程语言,三菱 FX5UC系列PLC性能规格/参数说明
  5. 关于cocos2dx 3.0 跳转场景
  6. 关于数据科学的十本好书
  7. 6-5 奇数值结点链表 (20分)
  8. Marvell 88E1111 百兆工程 (FPGA)
  9. GO 重新进阶学习(四)
  10. pom文件报红Failure to find cn.xx:xxx:pom:3.x.x in https://maven.aliyun.com/repository/public/ was cached