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

    文章

    697

    浏览量

    23862
  • MQTT协议
    +关注

    关注

    0

    文章

    100

    浏览量

    6028
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【创龙TL3562-MiniEVM开发板试用体验】--MQTT通讯

    本篇讲述开发MQTT通讯。 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布订阅(Publish/Subscribe)模式
    发表于 08-17 22:45

    GraniStudio :MQTT 协议的深度剖析

    在工业物联网(IIoT)的通信协议体系中,MQTT(Message Queuing Telemetry Transport)凭借其轻量级、发布 - 订阅模式和低带宽占用等特性,成为连接边缘设备与云端
    的头像 发表于 08-04 09:48 ?266次阅读
    GraniStudio :<b class='flag-5'>MQTT</b> 协议的深度剖析

    MQTT介绍

    一、什么是MQTT 物联网(IoT)发展迅猛,传感器、网关、云平台之间如何高效通信成了核心问题。MQTT(Message Queuing Telemetry Transport)作为一种轻量级
    的头像 发表于 07-14 09:34 ?1246次阅读
    <b class='flag-5'>MQTT</b>介绍

    精通 MQTT:消息队列遥测传输指南!

    引言MQTT(消息队列遥测传输)是一种轻量级消息协议,专为低带宽、高延迟和不可靠的网络环境设计。它广泛应用于物联网(IoT)应用、消息系统以及实时数据通信领域。本指南深入探讨了MQTT的工作原理
    的头像 发表于 06-16 16:56 ?585次阅读
    精通 <b class='flag-5'>MQTT</b>:消息队列遥测传输指南!

    MQTT 回调处理程序中遇到了随机 MQTT 断开连接的问题,怎么解决?

    MCU:CYW55913。 MQTT Broker 端点:Amazon AWS 云。 保持活动超时:60 秒 ping 响应超时:5 秒 我们在 MQTT 回调处理程序中遇到了随机 MQTT
    发表于 06-05 07:14

    如何在MQTT中发布和订阅实体

    MQTT中发布和订阅实体(主题)是MQTT通信的核心操作,下面将详细介绍其原理、步骤以及示例代码,帮助你全面理解这一过程。 一、MQTT发布与订阅的基本概念 发布(Publish):客户端将
    的头像 发表于 05-20 17:21 ?493次阅读

    MQTT物联网平台有哪些?有哪些功能?

    (IoT)。关于MQTT物联网平台及其功能,可以归纳如下: MQTT物联网平台 MQTT物联网平台通过提供一种标准化的协议和平台,实现了消息的可靠传输、设备连接管理、数据存储和分析等功能,方便
    的头像 发表于 03-15 14:23 ?908次阅读
    <b class='flag-5'>MQTT</b>物联网平台有哪些?有哪些功能?

    MQTT测试程序上机实验

    mqtt_test、paho.mqtt.c.tar.bz2放到Ubuntu上同一个目录下。
    的头像 发表于 02-11 13:35 ?756次阅读
    <b class='flag-5'>MQTT</b>测试程序上机实验

    基于MQTT协议的车云通信设计

    随着智能汽车的发展,车云通信的功能场景及数据量也逐渐增多,具有轻量化、可靠性等特点的MQTT协议成为很多OEM车云通信协议的选择。本文主要介绍。 什么是MQTTMQTT(Message
    的头像 发表于 01-08 10:24 ?1165次阅读
    基于<b class='flag-5'>MQTT</b>协议的车云通信设计

    低功耗4G模组:MQTT通信功能

    ?今天我们来学习使用合宙Air708E开发板的MQTT通信基本功能。 一、MQTT介绍 MQTT是一种低开销、低带宽占用的即时通讯协议,可以用极少的代码和带宽为远程设备提供实时可靠的消
    的头像 发表于 11-01 07:26 ?1230次阅读

    MQTT调试助手中文版(物联网开发必备)

    MQTT调试助手中文版(物联网开发必备)。?支持模拟设备链接各种MQTT云服务器、 ?阿里云、腾讯云、华为云、原子云、onenet等等。
    发表于 10-12 14:23 ?9次下载

    低功耗4G模组Air780E快速入门:通过MQTT连接实现远程控制

    ? 今天我们学习Air780E快速入门之通过MQTT连接实现远程控制,伙伴们,学起来! 一、修改代码 1.1 准备工具 Air780E开发板 Air780E开发板设计资料
    的头像 发表于 10-11 14:01 ?1262次阅读
    低功耗4G模组Air780E<b class='flag-5'>快速</b>入门:通过<b class='flag-5'>MQTT</b>连接实现远程控制

    MQTT物联网云平台有什么功能

    随着物联网(IoT)技术的迅猛发展,MQTT(Message Queuing Telemetry Transport)物联网云平台作为一种重要的基础设施,正在智能制造、智能家居、车联网等多个领域发挥
    的头像 发表于 10-09 14:15 ?787次阅读

    MQTT协议网关的工作原理及功能特性

    在物联网的快速发展中,MQTT协议网关作为连接物联网设备与消息代理服务器的重要桥梁,扮演着不可或缺的角色。MQTT是一种基于发布/订阅模式的轻量级通信协议,特别适用于低带宽、不稳定网络环境下
    的头像 发表于 09-18 17:00 ?1292次阅读
    <b class='flag-5'>MQTT</b>协议网关的工作原理及功能特性

    MQTT网关:物联网中的关键桥梁

    MQTT网关:物联网中的关键桥梁 在物联网(IoT)的广阔世界中,MQTT网关扮演着至关重要的角色。MQTT,全称为Message Queuing Telemetry Transport,是一种
    的头像 发表于 08-22 14:15 ?865次阅读
    <b class='flag-5'>MQTT</b>网关:物联网中的关键桥梁