0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

快速开发MQTT(二)初识MQTT

DigCore掘芯嵌入式 2019-01-10 11:15 次阅读

基本介绍

在上篇文章《快速开发MQTT(一)电子工程师眼中的MQTT》中,对比了串口连接和TCP连接,我们知道实现了连接和数据收发之后,接下来就是要考虑数据的封装、组包的事了。

比如UART传输过程中,数据被从A设备发送到B设备时,一般的都做这样的协议简单封装数据:“包头0xAA+两字节包长度LEN+1字节的LRC+数据内容”,此时B设备收到数据包就进行解析。

这一过程就是应用层面的协议。

类似的,MQTT也有报文格式,应用程序将数据填入报文包中,后通过TCP进行发送。

为了查看其报文格式,可以利用MQTT客户端工具MQTT.fx,尝试向TCP服务器发起一个连接请求。

TCP服务器继续使用上篇文章《快速开发MQTT(一)电子工程师眼中的MQTT》中提到的SSCOM工具进行模拟

交互过程如下:

TCP服务器开启,并侦听;

MQTT.fx作为客户端,向TCP服务器发起请求,发出的CONNECT报文(Hex):10 1A 00 044D 51 54 54 04 02 00 3C 00 0E 77 77 77 2E 64 69 67 63 6F 72 65 2E 63 6E;

TCP服务器接收到该请求,TCP服务器此刻该回复(Hex):20 02 00 00;

完成连接请求。

以下为交互过程截图:

配置TCPServer和MQTT.fx客户端,需要填写一致的IP地址和端口

MQTT.fx发起连接时,TCPServer接收到的完整数据包内容

TCPServer通过发送栏,回复数据(Hex):2002 00 00

至此,MQTT的连接流程完成,并且MQTT.fx客户端显示已连接的状态。通过这一模拟的过程,我们能够清晰认识到MQTT文档中的报文格式定义已经协议规范的定义。

对以上的数据分析,我们很容易就和MQTT-3.1.1版本规范进行对应:

客户端发的数据是10 1A 00 04 4D 51 54 54 04 02 00 3C 00 0E 77 77 77 2E 64 69 67 63 6F 72 65 2E 63 6E

解析如下:

固定报头:0x10 1A,即报文类型是1,长度是26个字节(0x1A)

可变报头:

0x00 04 4D 51 54 54,此处定义了协议名,长度是4,协议名是”MQTT”;

0x04,协议级别;

0x02,连接标志;

0x00 3C,保持连接,以秒为单位的时间间隔;

有效载荷:

0x00 0E,有效载荷内容的长度

0x77 77 77 2E 64 69 67 63 6F 72 65 2E 63 6E,客户端标识符www.digcore.cn

TCPServer回复的数据是20 0200 00

解析如下:

固定报头:0x20 02,即报文类型是2,长度是2个字节(0x02)

可变报头:0x00 00,即连接确认标志和连接返回码

在实际开发过程中,可以利用SSCOM工具作为服务器式验证自己编写的MQTT客户端程序是否正确发出数据,另外也可以作为客户端验证与MQTT服务器的正确交互。

既然TCP连接后就已经实现了数据收发的功能,为什么应用层还有这么多的通信协议:HTTP、FTP、MQTT等。

这就有区别于串口,毕竟串口在通信时是有着导线直接相连,而基于TCP连接的通信,在复杂的计算机网络中,准确找对一个终端并与之交互数据,这中间需要做的是靠应用层的协议进行握手、确认等交互,有着“一回生二回熟三回四回热炕头”这么一个啰嗦的过程。

协议框架

MQTT框架模型非常清晰看到,服务器实现了该协议的最主要功能,对数据和指令进行“转发”。

★★★★★推荐文章

《【嵌入式编程】平台大小端存储差异解决办法》

《嵌入式硬件通信接口-使用RingBuffer处理数据(二)详细设计过程》

《嵌入式硬件通信接口-使用RingBuffer处理数据(一)》

《快速开发MQTT(一)电子工程师眼中的MQTT》

《快速开发MQTT(二)初识MQTT》

《MQTT客户端搭建-最清晰的MQTT协议架构》

《MQTT服务端搭建-最快方式验证自己开发的客户端》

★★★★★相似文章

《嵌入式硬件通信接口协议-UART(五)数据包设计与解析》

《嵌入式硬件通信接口协议-UART(四)设计起止式的应用层协议》

《嵌入式硬件通信接口协议-UART(三)快速使用串口及应用》

《嵌入式硬件通信接口协议-UART(二)不同电气规范下的标准》

《嵌入式硬件通信接口协议-UART(一)协议基础》

《嵌入式硬件通信接口协议-SPI(二)分层架构设计模拟接口》

《嵌入式硬件通信接口协议-SPI(一)协议基础》

★★★★★扩展阅读

《【硬件电路】AltiumDesigner18规则检查含义》

《【硬件电路】N沟道、P沟道MOS管基本原理与应用案例》

文章首发于同名微信公众号:DigCore

欢迎关注同名微信公众号:DigCore,及时获取最新技术博文。

原文链接:https://mp.weixin.qq.com/s/hY3y0EpWLeya3YkWwvU1lQ

(说明:此处的文章从微信公众号拷贝而来,排版事宜由电子说工作人员编辑,可能存在一定的瑕疵,欢迎点击原文链接阅读)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • MQTT
    +关注

    关注

    5

    文章

    537

    浏览量

    21950
  • MQTT协议
    +关注

    关注

    0

    文章

    90

    浏览量

    5219
收藏 人收藏

    评论

    相关推荐

    MQTT网关是什么?MQTT网关的功能

    MQTT网关是支持MQTT协议的物联网网关,是一种用于连接不同设备和云端平台之间的中间件。它充当了设备和云端服务之间的数据传输桥梁。MQTT网关能够接收来自各种设备的数据,并将其发送到云端平台,同时
    的头像 发表于 03-18 17:10 194次阅读

    MQTT协议网关解决方案设计与实施

    的主要功能包括协议转换、消息过滤、安全认证、负载均衡等,以确保消息的可靠传输和系统的稳定运行。随着物联网技术的快速发展,MQTT协议作为一种轻量级的发布/订阅消息传输协议,在物联网应用中得到了广泛的应用。MQTT协议具有低开销、
    的头像 发表于 03-11 14:07 127次阅读

    什么是MQTTMQTT协议中的方法

    MQTT是一种轻量级消息传递协议,由IBM开发,于1999年首次发布。它使用发布/订阅模式并在设备、服务器和应用程序之间转换消息。
    的头像 发表于 02-25 17:04 523次阅读
    什么是<b class='flag-5'>MQTT</b>?<b class='flag-5'>MQTT</b>协议中的方法

    如何快速搭建一个MQTT协议的测试环境

    大家好,我是麦叔,之前有小伙伴建议出一期如何快速搭建一个MQTT协议的测试环境,因为自己写的mqtt测试工具总是有这样那样的问题。
    的头像 发表于 12-26 09:28 611次阅读
    如何<b class='flag-5'>快速</b>搭建一个<b class='flag-5'>MQTT</b>协议的测试环境

    物联网中的MQTT协议概述

    MQTT协议已经成了物联网通信中的一个热词,今天我们一起来学习一下关于MQTT协议的一些知识。
    的头像 发表于 11-25 14:09 853次阅读

    MQTT是什么 MQTT特点

    MQTT 是 Message Queuing Telemetry Transport 的缩写,是一种轻量级的、基于发布/订阅模式的物联网通信协议。 它具有以下特点: •简单易用:MQTT 的协议规范
    的头像 发表于 11-09 15:20 1186次阅读

    MQTT协议是什么?工业级路由器网关中的MQTT协议

    什么是MQTTMQTT作为一种工具,可以在各种规模的部署中连接多种类型的IoT设备。它最初始于1999年,用于石油和天然气管道通过远程卫星进行通信。MQTT在物联网领域应用非常广泛,基本上所有
    的头像 发表于 11-08 13:53 686次阅读
    <b class='flag-5'>MQTT</b>协议是什么?工业级路由器网关中的<b class='flag-5'>MQTT</b>协议

    如何使用OneNET平台的MQTT功能?

    ;设备进行模拟实际使用情况。推荐阅读《设备如何使用华为云接入MQTT上报数据》《MQTT设备连接与通讯+LoRaWAN网关产品快速入门教程》一OneNET平台MQTT服务准备1.注册O
    的头像 发表于 10-20 08:21 651次阅读
    如何使用OneNET平台的<b class='flag-5'>MQTT</b>功能?

    MQTT网关快速连接三菱系列PLC实现远程监控

    __MQTT协议网关串口连接三菱FX3UPLC操作说明 __ __MQTT协议网关串口连接三菱FX3UPLC操作说明v1.2 __ 前言:MQTT是一个基于客户端-服务器的消息发布/订阅传输协议
    的头像 发表于 10-17 15:28 911次阅读
    <b class='flag-5'>MQTT</b>网关<b class='flag-5'>快速</b>连接三菱系列PLC实现远程监控

    MQTT发布特性有哪些

    MQTT 发布/订阅特性 从以上实例我们可以看到,MQTT 通信的核心枢纽是 MQTT 服务端,它负责将 MQTT 客户端发送来的信息传递给 MQT
    的头像 发表于 07-30 15:16 462次阅读

    盘点2023年值得尝试的MQTT客户端工具

    随着物联网(IoT)的快速发展,MQTT协议被许多公司和开发人员广泛使用。在学习和使用 MQTT 的过程中,MQTT 客户端工具用于连接
    的头像 发表于 07-13 10:11 2934次阅读
    盘点2023年值得尝试的<b class='flag-5'>MQTT</b>客户端工具

    MQTT客户端快速入门指南 按键按下

    MQTT客户端快速入门指南 按键按下
    发表于 07-03 18:34 0次下载
    <b class='flag-5'>MQTT</b>客户端<b class='flag-5'>快速</b>入门指南 按键按下

    MQTT客户端空气质量快速入门指南

    MQTT客户端空气质量快速入门指南
    发表于 07-03 18:34 0次下载
    <b class='flag-5'>MQTT</b>客户端空气质量<b class='flag-5'>快速</b>入门指南

    MQTT 5协议中的基础更改(二)

    上期文章中给大家介绍了MQTT 5协议中基础更改的信息和CONNACK返回码,本篇文章我们继续介绍MQTT 5协议中其他新功能的细节。
    的头像 发表于 05-16 10:46 350次阅读
    <b class='flag-5'>MQTT</b> 5协议中的基础更改(二)

    虹科干货 | MQTT 5协议中的基础更改(一)

    虹科IIoTMQTT5协议中的基础更改(一)虹科干货01协议的基础性变化MQTT5是对现有协议规范的重大更新,新版本协议具有以下特征:轻量级、易用性、极强的可扩展性、对移动网络的适用性以及通信参与者
    的头像 发表于 04-21 09:51 319次阅读
    虹科干货 | <b class='flag-5'>MQTT</b> 5协议中的基础更改(一)