MQTT协议连接华为云

这篇具有很好参考价值的文章主要介绍了MQTT协议连接华为云。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

操作中使用到的相关链接资料:

一、华为云产品设备的创建

二、MQTT.fx调试

操作步骤:

三、网络调试助手NetAssist调试

1.CONNECT 报文--用于连接项目产品

最终CONNECT 报文

PING报文--用于保活

断开连接发送

2.PUBLISH – 发布消息

最终 PUBLISH 报文

四、串口调试助手XCOM调试(这里需要结合USB-TTL和ESP8266-01S)

总结:

 文章来源地址https://www.toymoban.com/news/detail-430010.html

操作中使用到的相关链接资料:

  • 云平台链接:华为云物联网平台_华为云IoT平台_IoT_设备接入-华为云 (huaweicloud.com)
  • 华为云提供的MQTT.fx调试文档链接:使用MQTT.fx调测_设备接入 IoTDA_开发指南_设备侧开发_使用MQTT Demo接入_华为云 (huaweicloud.com)
  • API参考:08 API参考 (huaweicloud.com)

一、华为云产品设备的创建 (产品创建就不多说了,创建的时候要知道自己创建的信息,重要的是记录下生成的信息Deviveld和DeviceSecret)

 

  • 记录下的Deviveld和DeviceSecret通过华为云设备接入提供的MQTT ClientId生成工具(Huaweicloud IoTDA Mqtt ClientId Generator (myhuaweicloud.com))生成连接信息(ClientId、Username、Password)。这些信息都是后续需要。
  • 还有一个域名和端口号需要记录

    MQTT协议连接华为云


    华为云的设备接入 IoTDA ->管理控制台 -> 总览 -> 接入信息,我们可以看到右边会跳出华为云设备接入的域名端口号信息。
    这里我是真实设备硬件设备接入,采用MQTT协议。我们记录下我们需要的信息:
    域名:211352f6b5.iot-mqtts.cn-north-4.myhuaweicloud.com
    端口号:MQTT (1883)| MQTTS (8883)
    IP地址(可选,获取方法:通过cmd命令窗口ping域名获取):121.36.42.100
  • 二、MQTT.fx调试

    • 这里的MQTT.fx调试是跟随华为云提供文档步骤操作的,可以参考使用MQTT.fx调测_设备接入 IoTDA_开发指南_设备侧开发_使用MQTT Demo接入_华为云 (huaweicloud.com)这里我简单介绍一下:
    • MQTT.fx下载链接https://iotda-document.obs.cn-north-4.myhuaweicloud.com/mqttfx-1.7.1-windows-x64.exe
    • 操作步骤:

      • 打开软件单击设置图标
      • 参考图片配置:红色框内需要填写,其他默认。配置完后点击Apply然后关闭该窗口。

        MQTT协议连接华为云


        需要填写IP地址不能通过域名,ClientId、Username、Password是前面让你记录的信息。
      • 填写上报信息

        MQTT协议连接华为云

        • 一个Topic,上报消息的Topic格式为:“$oc/devices/{device_id}/sys/properties/report”
          例:填写接口地址,此处以“$oc/devices/{device_id}/sys/properties/report”为例,如“$oc/devices/63b812b7b7768d66eb7080d9_MQTT_text/sys/properties/report”。
        • 一个上报的数据格式参考:
          例:数据格式:
          {
          "services": [{
          "service_id":"Connectivity",
          "properties": {
          "dailyActivityTime":99
          },
          "event_time": "2023017T121212Z"
          },
          {
          "service_id":"Battery",
          "properties": {
          "batteryLevel": 75
          },
          "event_time":"2023017T121212Z"
          }
          ]
          }
        • 结果:(可以根据你自己创建的产品属性自定义上报的数据内容)

          MQTT协议连接华为云

  • 三、网络调试助手NetAssist调试

    MQTT协议连接华为云

    • 调试前先注意左边两个HEX的红框,图片上还有连接信息(IP地址端口号),上报的数据(这里使用的MQTT协议,具体格式可以网上搜索相关MQTT文档翻阅,这里简单介绍几个连接与设备属性上传)
    • 简单说一下MQTT报文包含固定报头、可变报头和负载
    • 1.CONNECT 报文--用于连接项目产品

      • 固定报头byte1:10 byte2...(这里字节得根据后面可变报头加上负载的长度得出,通常一个字节不过不排除数据多是两个字节甚至更多)
      • 可变报头:00 04 4D 51 54 54 04 C2 00 64(10个字节)
        保活时间:64 => 0110 0100(32+16+4=100秒)
        详情翻看MQTT协议(我没放链接,网上应该有,或者可以私信我我免费给(没放链接有担忧的......))
      • 负载:负载顺序:客户端标识符,遗嘱主题,遗嘱消息,用户名,密码。是否需要根据链接标志(这里我需要客户端标识符、用户名、密码(这些信息前面有让记录))
        1. 客户端ID:
        63b812b7b7768d66eb7080d9_MQTT_text_0_0_2023010612
        00 31 36 33 62 38 31 32 62 37 62 37 37 36 38 64 36 36 65 62 37 30 38 3064 39 5F 4D 51 54 54 5F 74 65 78 74 5F 30 5F 30 5F 32 30 32 33 30 31 30 36 3132
        2. 用户名:
        63b812b7b7768d66eb7080d9_MQTT_text
        00 22 36 33 62 3831 32 62 37 62 37 37 36 38 64 36 36 65 62 37 30 38 30 64 39 5F 4D 51 54 54 5F74 65 78 74
        3. 密码:
        3b3264a175c8d1d89624b88312d5da71a3c5790577ffb1871a8723185165c0c5
        00 40 33 62 33 3236 34 61 31 37 35 63 38 64 31 64 38 39 36 32 34 62 38 38 33 31 32 64 35 64 6137 31 61 33 63 35 37 39 30 35 37 37 66 66 62 31 38 37 31 61 38 37 32 33 31 3835 31 36 35 63 30 63 35

        负载中的3 个信息都构建好了,那么把3 个信息按顺序,先是客户端id,然后是用户名,最后是密码,组合在一起16 进制如下:
        (2+49+2+34+2+64 = 153 )
        36 33 62 38 31 32 62 37 62 37 37 36 38 64 36 36 65 62 37 30 38 30 64 39 5F 4D 51 54 54 5F 74 65 78 74 5F 30 5F 30 5F 32 30 32 33 30 31 30 36 31 32 00 22 36 33 62 38 31 32 62 37 62 37 37 36 38 64 36 36 65 62 37 30 38 3064 39 5F 4D 51 54 54 5F 74 65 78 74 00 40 33 62 33 32 36 34 61 31 3735 63 38 64 31 64 38 39 36 32 34 62 38 38 33 31 32 64 35 64 61 37 31 61 33 6335 37 39 30 35 37 37 66 66 62 31 38 37 31 61 38 37 32 33 31 38 35 31 36 35 6330 63 35
      • 计算固定报头中的剩余长度:
        剩余长度 = 可变报头长度 + 负载长度
        可变报头是 10 个字节, 负载是217 个字节,剩余长度 = 10 + 153= 163,163/128=1…35,需要进位,剩余长度2字节,如此固定报头就定下来了,我们简化 16 进制进行书写,结果如下:10 A3 01
      • 最终CONNECT 报文为:
        10 A3 01 00 04 4D 51 54 5404 C2 00 64 00 31 36 33 62 38 31 32 62 37 62 37 37 36 38 64 36 36 65 62 37 30 38 30 64 39 5F4D 51 54 54 5F 74 65 78 74 5F 30 5F 30 5F 32 30 32 33 30 31 30 36 31 32 00 22 36 33 62 38 31 32 62 37 62 37 37 36 38 64 36 36 65 62 37 30 38 30 64 395F 4D 51 54 54 5F 74 65 78 74 00 40 33 62 33 32 36 34 61 31 37 35 63 38 64 31 64 38 39 36 32 34 62 38 38 3331 32 64 35 64 61 37 31 61 33 63 35 37 39 30 35 37 37 66 66 62 31 38 37 31 6138 37 32 33 31 38 35 31 36 35 63 30 63 35

      • 返回数据20 02 00 00 (有依据可查,翻看MQTT协议)
      • 拓展一下PING报文--用于保活(由于connect报文设置了报获时间,这里我们需要定时发送PING(类似心脏,告诉服务器你这台设备还“活着”))
        发送:C0 00 (返回数据:D0 00 )

      • 断开连接
        发送:E0 00(无返回数据)

    • 2.PUBLISH – 发布消息

      • 固定报头byte1:30 byte2....(剩余长度根据后面跟随的数据,计算方法如上)
      • 可变报头
        按顺序包含主题名和报文标识符。
        • 主题名(Topic Name)用于识别有效载荷数据应该被发布到哪一个信息通道。
          需要发布数据的Topic 字符串
          Topic: $oc/devices/{device_id}/sys/properties/report
          设备ID: 63b812b7b7768d66eb7080d9_MQTT_text
          >> Topic:
          $oc/devices/63b812b7b7768d66eb7080d9_MQTT_text/sys/properties/report

          长度68字节,转成 16 进制,并且最前面加入表示长度的2个字节,
          00 44 24 6F 63 2F 6465 76 69 63 65 73 2F 36 33 62 38 31 32 62 37 62 37 37 36 38 64 36 36 65 62 3730 38 30 64 39 5F 4D 51 54 54 5F 74 65 78 74 2F 73 79 73 2F 70 72 6F 70 65 7274 69 65 73 2F 72 65 70 6F 72 74
        • 报文标识符(Packet Identifier)只有当QoS等级是1或2时,报文标识符(Packet Identifier)字段才能出现在PUBLISH报文中。(这里不需要)
      • 负载
        数据格式如下:
        {"services":[{"service_id":"Connectivity","properties":{"dailyActivityTime":57},"event_time":"20151212T121212Z"},{"service_id":"Battery","properties":{"batteryLevel":80},"event_time":"20151212T121212Z"}]}

        长度205字节,转成 16 进制(这里特别注意,负载数据前,不用加 2 个字节)
        7B 22 73 65 7276 69 63 65 73 22 3A 5B 7B 22 73 65 72 76 69 63 65 5F 69 64 22 3A 22 43 6F 6E6E 65 63 74 69 76 69 74 79 22 2C 22 70 72 6F 70 65 72 74 69 65 73 22 3A 7B 2264 61 69 6C 79 41 63 74 69 76 69 74 79 54 69 6D 65 22 3A 35 37 7D 2C 22 65 7665 6E 74 5F 74 69 6D 65 22 3A 22 32 30 31 35 31 32 31 32 54 31 32 31 32 31 325A 22 7D 2C 7B 22 73 65 72 76 69 63 65 5F 69 64 22 3A 22 42 61 74 74 65 72 7922 2C 22 70 72 6F 70 65 72 74 69 65 73 22 3A 20 7B 22 62 61 74 74 65 72 79 4C65 76 65 6C 22 3A 38 30 7D 2C 22 65 76 65 6E 74 5F 74 69 6D 65 22 3A 22 32 3031 35 31 32 31 32 54 31 32 31 32 31 32 5A 22 7D 5D 7D
      • 剩余长度=可变报头长度(2+68)+负载长度(205)= 275 == 93 02
      • 最终 PUBLISH 报文:
        30 93 0200 44 24 6F 63 2F 64 65 76 69 63 65 73 2F 36 33 62 38 31 32 6237 62 37 37 36 38 64 36 36 65 62 37 30 38 30 64 39 5F 4D 51 54 54 5F 74 65 7874 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 7276 69 63 65 73 22 3A 5B 7B 22 73 65 72 76 69 63 65 5F 69 64 22 3A 22 43 6F 6E6E 65 63 74 69 76 69 74 79 22 2C 22 70 72 6F 70 65 72 74 69 65 73 22 3A 7B 2264 61 69 6C 79 41 63 74 69 76 69 74 79 54 69 6D 65 22 3A 35 37 7D 2C 22 65 7665 6E 74 5F 74 69 6D 65 22 3A 22 32 30 31 35 31 32 31 32 54 31 32 31 32 31 325A 22 7D 2C 7B 22 73 65 72 76 69 63 65 5F 69 64 22 3A 22 42 61 74 74 65 72 7922 2C 22 70 72 6F 70 65 72 74 69 65 73 22 3A 20 7B 22 62 61 74 74 65 72 79 4C65 76 65 6C 22 3A 38 30 7D 2C 22 65 76 65 6E 74 5F 74 69 6D 65 22 3A 22 32 3031 35 31 32 31 32 54 31 32 31 32 31 32 5A 22 7D 5D 7D

    四、串口调试助手XCOM调试(这里需要结合USB-TTL和ESP8266-01S)

      • ESP8266-01S的AT指令这里不细说了,简单步骤就是设置AP(连接热点)模式、连接WIFI热点、连接服务器、进入透传、发送数据等
      • AT--测试是否OK
      • AT+CWMODE=1 -- 设置AP模式
      • AT+CWJAP="wifiname","wifipassword" -- 连接WIFI热点
      • AT+CIPSTART="TCP","121.36.42.100",1883 -- 连接华为云服务器
      • AT+CIPMODE=1 -- 准备透传
      • AT+CIPSEND -- 开始透传
      • 发送数据 -- 上面我们计算出的CONNECT 报文和 PUBLISH 报文
  • 总结:

    • 上面所有调试我均测试成功,服务器能够正常通信,可以参考MQTT协议和API参考编写更多的报文。
    • 调试方法如上,真实设备的报文可以通过代码写好,就不用再计算了,计算有风险,本人在计算中出错导致没有建立连接,导致我又花了两个小时看文档,最后坚信自己的方法重新计算才发现问题。
    • 重复一次手动计算有风险,又浪费时间,可以尝试一次但不建议每次报文都手动计算。可以通过代码实现。
    • 我的设备是通过ESP8266-01S模块通信STM32F103开发板(开发板不限,有串口就行),主控开发板进行报文计算发送和接收服务器的数据进行解析。具体思路可以参考第四串口调试助手XCOM调试

 

 

 

 

 

 

 

 

 

 

 

到了这里,关于MQTT协议连接华为云的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于mqtt协议的物联网项目之微信小程序mqtt连接(三)

    官方连接 https://www.emqx.com/zh/blog/how-to-use-mqtt-in-wechat-miniprogram 所以uniapp使用v4.1.0版本,试过v3.0.0也可以用 默认从阿里云下载的SSL证书为cert.pem和key.key格式,我们要使用转换工具把.key转换成.pem 在线转换地址为:https://www.myssl.cn/tools/merge-pem-cert.html 替换EMQX安装路径下etc/emqx/cer

    2024年02月10日
    浏览(36)
  • STM32连接--OneNET,阿里云(MQTT协议)详细教程

    物联网一词在2009年由Kevin Ashton首次使用。物联网指的是通过互联网来连接物理设备。物理设备可以相互之间通过互联网交换数据或由其他设备控制。物联网设备可以是冰箱、交通信号灯、工业控制系统等电子装置或电气设备。最常见的用例之一是传感器数据的收集,传输,分

    2024年02月06日
    浏览(30)
  • 采用MQTT协议实现Android APP与阿里云平台的连接

    相信APP+单片机是很多同学毕设或者课设的模式,上学期做课设的时候用到了MQTT协议连接阿里云平台实现数据的通信,也是根据网上大佬的经验做的,中间也踩了很多坑。本文将介绍Android APP 通过MQTT协议与阿里云云平台连接的内容,希望对大家能有所帮助。 MQTT(Message Que

    2024年02月04日
    浏览(37)
  • esp8266模块--MQTT协议连接服务器实现数据接收和发送+源码

    首先推荐中国移动的代码,我觉得中国移动的代码更为合理:(但是有一些其他的模块在里面) OneNET开发板代码、资料--2020-09-27--标准板、Mini板bug修复 - 开发板专区 - OneNET设备云论坛 (10086.cn) 以及这位b站up做的视频:(wifi模块在p9节) 【挽救小白第一季】STM32+8266+小程序智能

    2024年02月08日
    浏览(49)
  • 【阿里云】物联网平台配置ESP8266真实设备AT串口连接,支持MQTT协议通信

    1 阿里云物联网平台 官方文档:https://help.aliyun.com/product/30520.html 官方控制台:https://iot.console.aliyun.com/lk/summary/new 左边有产品和设备, 产品是抽象的品类 ,比如说电灯,空调等等。 设备是品类下具体的物品 ,和实物一一对应的云端信息,比如电灯1,电灯2,电灯-卧室,电灯

    2024年02月01日
    浏览(45)
  • STM32+ESP8266+DHT11通过MQTT协议连接新版ONENET云平台上传数据

    项目讲解视频 新版 云平台搭建视频演示 单片机代码修改演示视频 APP参数修改 实物演示 前段时间ONENET云平台进行了升级更新,此前平台的多协议接入(包含旧版MQTT、HTTP、EDP、Modbus、TCP透传等)接口已经隐藏,后续应该会下架,为了能够后续继续使用ONENET云平台,就需要学

    2024年02月09日
    浏览(30)
  • Windows基础命令:目录和文件操作&文本处理&网络相关操作

    方法一:打开\\\"运行\\\"对话框(Win+R),输入cmd 也可以通过cmd /c 命令和cmd /k 命令的方式来直接运行命令(/c表示执行完命令后关闭cmd窗口;/k表示执行完命令后保留cmd窗口) 方法二:在任务栏直接搜索“cmd” 显示当前目录或改变当前目录 语法规则 (1)显示目录 显示当前驱动

    2024年02月05日
    浏览(32)
  • Ubuntu磁盘和目录和文件的相关操作

    目录 0、常见操作 1、目录的切换 2、查看目录及文件 3、目录的常见操作 4、文件的常见操作 0、常见操作 关机命令 重启命令 清除终端屏幕上的内容 显示最近执行的命令历史记录 Ctrl + C :中断当前运行的命令 Ctrl + D :退出当前终端会话 Ctrl + Alt + T :打开新终端窗口。 Ctrl

    2024年02月04日
    浏览(25)
  • QT使用MQTT协议连接ONENET云平台:智能家居PC客户端开发笔记-1 环境搭建

    前端时间做了一个项目,要求在PC端使用QT制作一个客户端,用来接收从单片机上传到Onennet的数据,并且还要下发指令。当时弄了好几天,中途遇见了非常多的问题,所以写下这篇文章记录一下,同时分享一下自己的经验。 我的环境:QT 5.12.6 总结下我遇见的难点: 1,环境配

    2024年02月11日
    浏览(56)
  • QT使用MQTT协议连接ONENET云平台:智能家居PC客户端开发笔记-2 项目开发

    这篇文章主要是分享QT智能家居项目的代码 在我看来,QT MQTT的使用主要难点就是对于环境的搭建,在我们把环境搭建完之后,接下来就是传统手艺了,我们只要知道相应的库函数,调用它,就能实现我们所需要的功能了。 所以,在这里我也只是简单的分享一下我写的第一版

    2024年02月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包