STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(二)MQTT协议常用报文详解

上一次我们讲了OneNet平台的注册,这次我们来讲一下MQTT的常用报文用法

上一篇地址https://blog.csdn.net/weixin_42138122/article/details/108062089

惯例先贴上协议手册:https://mcxiaoke.gitbooks.io/mqtt-cn/content/
我们对着手册慢慢看

CONNECT – 连接服务端

要想发送数据咱们至少要先连接上服务器吧,所以先来看一下连接报文
连接报文由固定报头 可变报头 有效载荷3个部分组成

固定报头

顾名思义,这个部分是不会变的,我们可以在协议手册里看到它是什么

第1位(byte1)是00010000转为16进制就是10(一位8个字节,正好对应两位16进制,转为16进制是为方便表述和发送,之后的表达都会采用16进制)

byte2是剩余长度,我们先不管这个

固定报头暂且定位:10 ??

可变报头


byte1、byte2:前两位表示协议名的长度,因为我们的协议是“MQTT”所以是4位,因此前两位是 00 04

byte3、4、5、6:后四位自然就是我们的MQTT四个字母了,分别将这几个字母的ASCII码转为16进制,所以后4位就是4D 51 54 54


byte7:这一位对应协议版本,由于我们用的3.1.1版本,所以这一位固定 04


byte8:这一位相当于配置一些MQTT协议的模式,每一位的配置文档都有详细说明,如图配置,启用用户名和密码(相当于你的设备ID鉴权信息),不保留遗嘱,Qos等级0,所以这一位为C2

byte9、byte10:这两位用来设置连接保活时间,也就是你啥都不干多久被服务器踢下去,单位是秒,这里我们设置120秒,转为16进制也就是 00 78

总体来看我们的可变报文为:00 04 4D 51 54 54 04 C2 00 78

有效载荷


因为前面我们使了能用户名和密码,所以这个地方根据文档我们应该依次填入(遗嘱没有使能):

客户端标识符 Client Identifier:对应Onenet的设备ID
用户名 User Name:对应Onenet的产品ID
密码 Password:对应Onenet鉴权信息

格式如下 长度+东西


上面为我画的示意图,注意这个地方按照你创建的设备来填写用户名密码,之前我们在固定报头一直没讲的第二位的取值为固定报头之后所有的长度,也就是可变报头+有效载荷

至此我们的连接报文已经完成了,打开网络助手,连接服务器建立TCP连接,官网可以看到IP和端口号


可以看到服务器,发了一串数据给我们应答,这个地方我们看最后一位,它表连接返回码,码字对应意义如下:

如果为00,则代表连接成功,如果为其他,请根据错误信息对照修改,如果你没有收到信息并且被直接断开,就说明你报文格式都不对,请根据上面的教程仔细检查修改

DISCONNECT –断开连接

上次讲了连接,这次来讲断开连接

断开连接可以说是相当简单,就是很简单的一条固定指令E0 00,先连接,之后再发送你就会发现连接断开了

SUBSCRIBE - 订阅主题

固定报头


一样很简单,固定的暂且定位82 ??

可变报头


这两个字节相当于给报文取名字,我们随便设置一个00 0A

有效载荷


如图可以看到有效载荷的结构长度+主题名+服务等级
假设我们订阅一个“test”主题

由于我们需要一个发送端和一个接收端,所以我们还需要一个设备,onent里面点击添加设备,另一个设备的connect报文请自己举一反三,这里不再赘述

先发连接报文,然后再发订阅报文

可以收到如下信息,参看手册可以发现我们的“00 0A”报文等级0订阅成功

PUBLISH – 发布消息

先介绍一点基础概念,推送订阅主题,这个东西有点像微博,如果你订阅了一个用户,那么这个用户发微博你就会收到推送,而这里的主题就相当于微博的用户,publish报文就相当于发微博,接下来我们看一看具体怎么写

固定报头


byte1、byte2:和连接报文一样,固定值和剩余长度,并且需要一定的配置,具体配置参数手册写的很清楚,这里不再赘述,我们这个地方配置Qos等级0不保留,所以这两位暂且为 30 ??

可变报头


接下来是可变报头,包含主题名报文标识符,由于我们是qos0所以不需要报文标识符

假设我们向一个名为“test”的主题推送一条消息

总共包含长度主题名两个字段,以这里的"test"为例,长度为4,主题名自然就是test,将test转为16进制,报文则可以写作00 04 74 65 73 74

有效载荷


接下来是有效载荷,说白了就i是我们要发的消息,如文档所述,有效载荷的长度,会被服务器自己算出来,所以这里我们不需要给出,直接写我们要发的消息就行了,假设我们发送字符串"AC is the Best",将ASCII码转为16进制,则为 41 43 20 69 73 20 74 68 65 20 42 65 73 74

由此,我们的推送报文就写好了,总体来看为30 14 00 04 74 65 73 74 41 43 20 69 73 20 74 68 65 20 42 65 73 74

我们打开两个网络调试助手来进行测试,一个连接设备1并推送一个连接设备2并订阅,接收端选择ASCII码显示,就可以我们已经收到了字符串"AC is the Best"

还有一些常用的报文,如PINGREQ – 心跳请求UNSUBSCRIBE –取消订阅等,但由于比较简单,所以希望大家跟着手册自己进行测试

STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(二)MQTT协议常用报文详解相关推荐

  1. STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(三)STM32部分

    STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(三)STM32部分 关于单片机部分主要使用ESP8266 WIFI模块进行联网,单片机采用STM32ZET6 ESP8266部分 ...

  2. 怎么传mysql数据到onenet_STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(一)...

    STM32 ESP8266 MQTT协议 连接中国移动OneNet服务器 上传接收数据(一) 之前写过一篇通过自己的服务器来搭建MQTT的服务器的博客,但是我相信不是所有人都有自己的服务器,毕竟服务器 ...

  3. 怎么修改服务器上的cpt文件,DELL-服务器-RAID-配置详解(28页)-原创力文档

    DELL 服务器 RAID 配置详解 磁盘阵列可以在安装系统之前或之后产生,系统会视之为一个(大型)硬盘,而它具有容 错及冗余的功能.磁盘阵列不单只可以加入一个现成的系统,它更可以支持容量扩展,方 法 ...

  4. 服务器上怎样开启sql远程,如何开启SqlServer 远程访问详解(图文并茂)

    这篇文章主要介绍了如何开启SqlServ­er 远程访问,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 当Mi­crosoft Sqlserv­er XXXX安装好后 ...

  5. 基于RT_Thread连接中国移动onenet平台的RGB三色灯项目

    一.简介 1.RT_Thread简介 RT-Thread是一个集实时操作系统(RTOS)内核.中间件组件和开发者社区于一体的技术平台,由熊谱翔先生带领并集合开源社区力量开发而成,RT-Thread也是 ...

  6. 网页如何与服务器连接到服务器,怎样把网页连接到云服务器上

    怎样把网页连接到云服务器上 内容精选 换一换 对于使用第三方VR运行环境(如SteamVR)的用户,GPU云服务器创建完成或重启后,建议用户在连接头显设备前先进行房间设置,即登录GPU云服务器配置环境 ...

  7. 网站云服务器资料本地备份,云服务器上备份本地数据

    云服务器上备份本地数据 内容精选 换一换 云服务器备份(CSBS,Cloud Server Backup Service)提供对弹性云服务器(Elastic Cloud Server)和裸金属服务器( ...

  8. 邮件自动被服务器删除,如何防止outlook等邮件客户端删除服务器上的邮件数据?...

    当用户使用outlook来接收邮件时,outlook客户端将对应邮箱账号的邮件数据从邮件服务器下载至计算机本地硬盘,并且默认设置在一定时间后自动删除邮件服务器上的邮件数据,导致用户通过网页登录邮箱后发 ...

  9. 直接读取ftp服务器文件,如何在ftp服务器上只读取十二个文件?

    如何只读取12个文件导致我只读取ftp 服务器中的所有文件,每4分钟文件添加一个新文件.如何在ftp服务器上只读取十二个文件? 感谢您的帮助,我是初学者在API编程:) if(files.length ...

最新文章

  1. 制作OpenStack上使用的CentOS系统镜像
  2. sqlalchemy数据库中的limit使用(限制查询的用户数量)
  3. Objective-C Reflection(Objective-C 反射机制)实用随笔笔记(持续更新)
  4. 【C++】构建栈 进栈和出栈
  5. boost::noinit_adaptor用法实例
  6. asp.net导出GridView数据到Excel
  7. 百练 Let it Bead
  8. 全新 Veeam Availability Suite 9.5 成为率先全面集成 Windows Server 2016和Hyper-V技术的 可用性解决方案之一...
  9. 【实用工具】adb检测android设备
  10. 伺服驱动器cn1引脚定义_台达A2 A3系列伺服CN1接线对照表
  11. 使用计算机为苹果更新,你不知道的一招,用电脑给苹果手机更新系统
  12. 应对Flash中国版流氓后台偷窥的解决方法
  13. php 生成思维导图,JavaScript如何生成思维导图(mindmap)
  14. PowerPoint PPT 模板插入可修改的文本框
  15. 说一说 ArrayList 的扩容机制
  16. [经典面试题][淘宝]求首尾相连数组的最大子数组和
  17. 填写设置小程序信息-微信小程序开发-视频教程3
  18. ActionList
  19. 会议论文有没有影响因子_2013年 图形学领域的期刊和会议 影响因子排名
  20. React-Native 自封装原生模块

热门文章

  1. Ubuntu 删除deep-wine安装的软件
  2. 腾讯17年发展史上的14个关键点
  3. 大型计算机主机通常是,大型主机是个啥
  4. 记录Qml删除数组内多个元素问题
  5. 折腾一天安装Centos7,以及后面恢复Win7引导的曲折历程
  6. 【Excel】Excel学习笔记 -- 多条件的排序和筛选
  7. 王者服务器维护8.25,上单位移全部削弱射手春天到来!王者荣耀体验服8.25英雄调整详解...
  8. 使用idea(1)--增加内存
  9. 观察!写作机器人频频上头条,内容生产者如何与机器“共舞”?
  10. 新东方雅思词汇---7.1、probation