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

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

3天内不再提示

为何物联网倾向于MQTT?

lhl545545 来源:乐创客 作者:乐创客 2020-09-27 16:01 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

MQTT(Message Queuing Telemetry Transport),说人话的意思就是消息队列遥测传输。早些年的PC端盛行的时候,很多工程师压根就没有听过个绕口的名词,但是随着物联网IoT)技术的逐步发展,这个协议越来越频繁的出现在各大工程师的眼前。这也就造成了很多工程师只知其名不知其意,甚至很多人都还以为这是一种随着IoT发展而被开发出来的协议。其实不然,MQTT协议最早在二十几年前就被发明出来,到了1999年IBM公司的安迪·斯坦福-克拉克及Cirrus Link公司的阿兰·尼普撰写了该协议的第一个版本。后来这个协议也被国际标准化了,成为了ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅方式的消息协议。IBM公司在2013年就向结构化资讯标准促进组织提交了 MQTT 3.1 版规范,并附有相关章程,以确保只能对规范进行少量更改,此后MQTT协议一直在一些小众领域中使用。而到了物联网技术基础设施架构完成之后,这种古老的协议开始焕发出它的第一个春天。

网络的传输层和应用层

众所周知,物联网至今的高速发展离开不了通讯网络的基础建设,你现在可以在全世界的任何一个角落控制家里某个房间灯光的开关,或者做工业控制的时候,你也可以远程操控某个机器人的运动,这种技术的成熟都是基于网络通讯为基础的。而目前网络技术的主要技术就是OSI七层模型,当然实际应用中其实使用的是TCP/IP四层网络模型。

TCP/IP四层网络模型的第三层传输层就是大名鼎鼎的TCP/IP协议了,这一层协议的主要目的是用来将网络上一台计算机发出的通信数据传输到指定IP地址的另一台机器上面,比如一个IP地址为“192.168.137.19”的机器要发给IP地址为“192.168.137.10”的机器16字节的二进制数据包,那么使用TCP/IP协议传输即可以。而是用TCP传输数据时,我们常用的方式就是用socket。

但当IP地址为“192.168.137.19”的机器发送数据给“192.168.137.10”的机器时,这一包TCP数据包里面的数据究竟是代表什么意思,接收端的IP地址为“192.168.137.10”的机器该如何其解析这一个包的数据,这个问题就是交由传输层上面一层的协议来解决了,这就是应用层协议。当然,如果你的协议不想给普通的网络上的计算机解析时,你也可以自己去制定一些应用层的协议,这个无关紧要,传输层的目的只是把数据传达到目标机器上面就可以了。

我们日常的工作,娱乐中常常会碰到各种各样的应用层协议,比如当你打开一个网页时,这个图片显示在那个位置,这个按钮点下去是实现什么功能,这种都是由HTML超文本传输协议(英文:HyperTextTransferProtocol,缩写:HTTP)所约定的。这就保证了你网站中某个网页被任何一台设备请求时,这台设备可以正常的显示出来。除了HTTP,应用层协议还有很多,如DNS,FTP等,而我们今天的主角MQTT协议也是其中的一员。

为何物联网倾向于MQTT

既然我们既有的应用中已经有了那么多优秀的应用层协议,为何在物联网领域中偏偏MQTT大放异彩。其实选择MQTT协议也不是毫无根据的,MQTT 是一种轻量级的、灵活的网络协议,致力于为 IoT 开发人员实现适当的平衡:

这个轻量级协议可在严重受限的设备硬件和高延迟/带宽有限的网络上实现。

它的灵活性使得为 IoT 设备和服务的多样化应用场景提供支持成为可能。

大多数开发人员已经熟悉 HTTP Web 服务。那么为什么不让 IoT 设备连接到 Web 服务?设备可采用 HTTP 请求的形式发送其数据,并采用 HTTP 响应的形式从系统接收更新。这种请求和响应模式存在一些严重的局限性:

HTTP 是一种同步协议。客户端需要等待服务器响应。Web 浏览器具有这样的要求,但它的代价是牺牲了可伸缩性。在 IoT 领域,大量设备以及很可能不可靠或高延迟的网络使得同步通信成为问题。异步消息协议更适合 IoT 应用程序。传感器发送读数,让网络确定将其传送到目标设备和服务的最佳路线和时间。

HTTP 是单向的。客户端必须发起连接。在 IoT 应用程序中,设备或传感器通常是客户端,这意味着它们无法被动地接收来自网络的命令。

HTTP 是一种一对一的协议。客户端发出请求,服务器进行响应。将消息传送到网络上的所有设备上,不但很困难,而且成本很高,而这是 IoT 应用程序中的一种常见使用情况。

HTTP 是一种有许多标头和规则的重量级协议。它不适合受限的网络。

出于上述原因,大部分高性能、可扩展的系统都使用异步消息总线来进行内部数据交换,而不使用 Web 服务。

订阅/发布模型

有意思的是,这种MQTT协议的服务器,其实是比web服务器设计还要简单地多,因为它追求的是一种高效性的服务。MQTT主要进行消息收发的机制有点类似于我们公众号和各位读者之间的关系。

在现实的世界中,我和大家一样都类似于一个有一个的MQTT设备挂接在统一的一个服务器上面,大家出于对我们公众号的兴趣或者某种感情订阅了我们,而当每天我发文推送的时候,大家的手机里就会出现我推送的消息了,这个过程中,你获取我信息的方式被称为“订阅”,而我向这个公众号发布消息的行为就是“发布”。而大家可到我文章的时候,可以随意地向我留言,这个行为就是大家地“发布”行为,而我无时无刻守在某一篇推送面前看大家的留言,这就是一种“订阅”行为。在这个过程中,外部的所有信息都与我们无关,我们只是简单地以两个方向的信息流沟通着。MQTT中的消息传递机制也是基于“发布(Publish)”-“订阅(Subscribe)”的模型的。

MQTT具体的操作步骤为:

第一步:使用先获得一个MQTT服务器,然后新建一个MQTT通讯产品。

第二步:接着去连接这个服务器,连接服务器的两个重要的参数就是主机号(域名或者IP地址)和端口号。

第三步:如果使用的是第三方云服务器平台,它可能需要你使用产品ID和鉴权信息去登录这个设备,这两个在设备云的后台都能找到。

这三个步骤做完之后,你就可以对对应的主题订阅或者发布消息了。

我后面会专门整理一个文档来给大家演示一下如何来“白嫖”一个中国移动的设备云开放接入平台。

这三个步骤既适用于应用软件开发,也适用于单片机开发。在单片机开发时,如果你用AT指令和外部的WIFI模块通讯,那么一般模块都可以自带AT+MQTT命令,这是最好的办法,可以极大地减少单片机的压力。或者你也可以直接获取TCP/IP传输层的数据,然后自己去解析这个MQTT,这就需要用户对MQTT协议要有一个很深的理解还要自己去解析Json数据,所以一般在做嵌入式设备时,一般推荐大家直接用现成带MQTT协议的模块,直接解析AT指令是比较方便的。

案例分析:

远程控制灯和获取当前房间温度。

关于这个案例,其实是MQTT最简单的一个应用,首先房间的嵌入式控制板主要通过WIFI连接到服务器,它既可以控制灯的开关,也可以采集温度。远在天边的终端设备是一台手机。

要保持通信正常,首先它们需要接入同一个MQTT服务器。

设备端的温度信息,是设备采集的,因此需要将采集来的数据发布到“温度”主题,而手机是获取这个温度信息的,因此需要来订阅这个“温度”主题。一旦设备端发送温度信息到“温度主题”,这个主题就会被手机所接收。

设备端的灯控,是设备执行的,因此需要订阅“灯开关”主题,而手机是控制灯的开关的,因此需要来对这个“灯开关”主题发布控制信息。一旦手机发送开灯信息到“灯开”关主题,这个主题就会被终端所接收,再去执行开灯命令。
责任编辑:pj

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

    关注

    2939

    文章

    47322

    浏览量

    407888
  • 计算机
    +关注

    关注

    19

    文章

    7764

    浏览量

    92682
  • 硬件
    +关注

    关注

    11

    文章

    3555

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    北向MQTT工业物联网网关是什么

    北向MQTT工业网关是工业物联网中连接底层设备与上层云平台的核心设备,其核心功能是通过MQTT协议实现设备数据的高效、可靠上传,并支持云端对设备的远程监控与管理。 以下从定义、功能、应用场
    的头像 发表于 12-02 11:13 85次阅读

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

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

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

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

    【教程】必看!手把手教你学会MQTT工作模式下阿里云物联网平台的配置

    (MessageQueuingTelemetryTransport)是一种轻量级的消息传输协议,特别适用于物联网(IoT)和资源受限的环境。相较传统的请求-响应模式,发布-订阅(Pu
    的头像 发表于 09-04 19:34 1100次阅读
    【教程】必看!手把手教你学会<b class='flag-5'>MQTT</b>工作模式下阿里云物<b class='flag-5'>联网</b>平台的配置

    联网MQTT网关是什么

    联网MQTT网关是一种采用MQTT联网协议的智能设备或软件组件,其核心功能是连接不同通信协议的物联网设备与消息代理服务器,实现设备间的数
    的头像 发表于 08-29 15:24 656次阅读

    通过MQTT协议能接入工业物联网云平台中吗

    通过MQTT协议完全可以接入工业物联网云平台,且因其轻量、高效、可靠等特性,已成为工业物联网场景中的主流通信协议之一。
    的头像 发表于 08-26 18:03 643次阅读

    MQTT联网数据解析的难点有哪些?

    MQTT联网数据解析的难点主要源于物联网场景中设备的多样性、数据的复杂性以及系统的高要求,具体可归纳为以下几个方面。
    的头像 发表于 08-05 18:13 572次阅读

    MQTT介绍

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

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

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

    MQTT为何成为物联网协议

    MQTT(Message Queuing Telemetry Transport)即消息队列遥测传输协议,已成为物联网领域广泛应用的协议,这主要得益其在资源占用、通信效率、可靠性、扩展性等多方面
    的头像 发表于 05-20 09:54 601次阅读

    KaihongOS操作系统:MQTT联网通讯协议

    @ohos.net.khMqtt (MQTT联网通讯协议) 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 目前支持3.1.1
    发表于 05-08 07:51

    何为趋肤效应?

    “趋肤效应”我们先拆开来理解 趋:可以理解为倾向的意思。 肤:可以用“表面”的意思去理解,而在电学中,这里的“趋肤” 其实就是:倾向于表面的意思,而这个表面就是导体的表面。那到底是什么倾向于导体
    发表于 04-21 11:37

    工业智能网关与MQTT联网云平台的关系

    工业智能网关与 MQTT联网云平台在物联网架构中是互补协作的关系,具体可归纳为以下几点: 数据交互桥梁 工业智能网关负责采集现场设备(如 PLC、传感器、仪器仪表等)的实时数据,通过协议转换(如
    的头像 发表于 03-21 09:44 874次阅读

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

    MQTT(Message Queuing Telemetry Transport)是一种基于客户端-服务器架构的发布/订阅模式的消息传输协议,它广泛应用于机器与机器的通信(M2M)以及物联网环境
    的头像 发表于 03-15 14:23 1222次阅读
    <b class='flag-5'>MQTT</b>物<b class='flag-5'>联网</b>平台有哪些?有哪些功能?

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

    Queuing Telemetry Transport)是由OASIS发布的应用层协议,采用订阅/发布的通信模式,下层基于TCP/IP进行传输。该标准在工业物联网、车联网等领域有广泛应用。 MQTT主要有以下
    的头像 发表于 01-08 10:24 1721次阅读
    基于<b class='flag-5'>MQTT</b>协议的车云通信设计