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

    文章

    721

    浏览量

    24786
  • MQTT协议
    +关注

    关注

    0

    文章

    103

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MQTT网关支持5G通信吗

    速率,能够满足物联网设备对大数据量、低延迟的需求。MQTT协议作为一种轻量级的发布/订阅消息传输协议,与5G网络结合后,可以实现更快速、更高效的数据传输。 低延迟通信 :5G网络的低延迟特性使得MQTT网关能够实时响应物联网设备
    的头像 发表于 12-08 11:13 31次阅读

    MQTT网关对接到物联网平台快速开发应用

    在物联网(IoT)数据流转体系中,MQTT 网关与物联网平台的对接是打通设备端与云端的关键链路,而基于 API 数据接口的系统开发则是实现数据价值转化的核心环节。者的协同应用,正成为构建高效、稳定
    的头像 发表于 11-03 11:13 172次阅读

    Air780EPM嵌入式开发:LuatOS下的MQTT通信实践

    通过LuatOS脚本在Air780EPM开发板上实现MQTT通信,是物联网设备开发中高效且便捷的解决方案。 一、MQTT 协议详解   1.1 什么是
    的头像 发表于 09-30 16:11 1607次阅读
    Air780EPM嵌入式<b class='flag-5'>开发</b>:LuatOS下的<b class='flag-5'>MQTT</b>通信实践

    LuatOS嵌入式开发实战:Air780EPM与MQTT通信

     本教程聚焦于LuatOS在Air780EPM开发板上的应用,演示如何通过脚本实现MQTT协议通信,助力物联网设备快速联网。 一、MQTT 协议详解   1.1 什么是
    的头像 发表于 09-29 18:10 290次阅读
    LuatOS嵌入式<b class='flag-5'>开发</b>实战:Air780EPM与<b class='flag-5'>MQTT</b>通信

    MQTT_协议中文资料

    电子发烧友网站提供《MQTT_协议中文资料.pdf》资料免费下载
    发表于 09-02 16:19 0次下载

    物联网MQTT网关是什么

    物联网MQTT网关是一种采用MQTT物联网协议的智能设备或软件组件,其核心功能是连接不同通信协议的物联网设备与消息代理服务器,实现设备间的数据交换与集中管理,同时支持边缘计算、安全防护和协议转换
    的头像 发表于 08-29 15:24 656次阅读

    【创龙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 811次阅读
    GraniStudio :<b class='flag-5'>MQTT</b> 协议的深度剖析

    MQTT介绍

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

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

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

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

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

    MQTT测试程序上机实验

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

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

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