MQTT(一):什么是MQTT?MQTT在物联网通信中的位置

文章目录

  • 1、什么是MQTT?
  • [2、 MQTT在整个物联网通信中的位置](#2、 MQTT在整个物联网通信中的位置)
    • [2.1 系统架构与MQTT位置详解](#2.1 系统架构与MQTT位置详解)
    • [2.2 水泵MCU ⇄ WiFi模组(无MQTT)](#2.2 水泵MCU ⇄ WiFi模组(无MQTT))
    • [2.3 WiFi模组 ⇄ 阿里云物联网平台(MQTT的核心)](#2.3 WiFi模组 ⇄ 阿里云物联网平台(MQTT的核心))
    • [2.4 阿里云物联网平台(MQTT Broker)](#2.4 阿里云物联网平台(MQTT Broker))
    • [2.5 阿里云物联网平台 ⇄ 手机App(通常无MQTT)](#2.5 阿里云物联网平台 ⇄ 手机App(通常无MQTT))

1、什么是MQTT?

MQTT到底是什么呢?

先附上百度百科的解释:

MQTT(消息队列遥测传输,Message Queuing Telemetry Transport)是一种基于发布/订阅范式的轻量级消息传输协议,由 IBM 与 Eurotech 于 1999 年提出,现已成为国际标准(ISO/IEC 20922:2016) 。该协议专为计算资源受限、带宽有限以及网络连接不稳定的设备设计,具有报文结构简洁、功耗低、传输可靠等特点,能够在复杂环境中实现高效通信。凭借其轻量、高效、易实现的特性,MQTT 已成为物联网(IoT)与机器到机器(M2M)通信领域的主流协议之一,广泛应用于智能家居、车联网、工业控制、远程医疗等场景。

下面我用个人的方法简单介绍一下MQTT(谨代表个人观点):

其实用一个简单的例子进行概括:MQTT可以看作是一种为物联网设备设计的"微信群"协议。 它可以让设备之间能高效、可靠地互相传递消息。

如果把一个物联网比作一个微信群,那么

  1. 群主(MQTT Broker)

    • 这是一个服务器(比如阿里云物联网平台),所有信息都汇总到这里,再由它分发。它负责管理整个"群"。
  2. 群成员(MQTT Clients)

    • 这可以是我的水泵WiFi模组 ,也可以是手机App后台,或者其他任何设备。它们都加入了这个群。
  3. 话题(Topic)

    • 群里可以有很多话题 ,比如 #水泵状态汇报#水泵控制命令
    • 设备不用直接互相联系,只需要关注自己感兴趣的话题
  4. 发布消息(Publish)

    • 比如如果我的的水泵 想汇报状态了,它就在 #水泵状态汇报 这个话题下发布一条消息:"我当前压力是1.2,一切正常"。
    • 它只管发出去,不用管谁在看。
  5. 订阅消息(Subscribe)

    • 云端服务或者手机App后台订阅#水泵状态汇报 这个话题。一旦有设备在这个话题下发布新消息,群主(Broker)就会立刻把消息推送给所有订阅者
    • 同样,手机App想控制水泵时,就在 #水泵控制命令 这个话题下发布一条"请把压力调到1.5"。而我的水泵WiFi模组订阅了这个话题,所以它能立刻收到这条命令。

那么,MQTT为什么适合物联网呢?

  • 轻量高效:协议设计得非常简洁,数据包很小,特别适合(比如水泵上)这种计算能力和网络带宽都有限的设备。
  • 发布/订阅模式 :设备之间不直接连接,解耦了发送方和接收方。发送者不知道也不关心谁接收,接收者也不知道消息来自哪台具体设备,非常灵活。
  • 可靠传递:它有"服务质量"等级。比如,对于重要的命令,可以设置为"确保对方收到",防止因网络问题丢失指令。
  • 适合弱网络:专门为不稳定的网络(如移动网络、WiFi)设计,连接断了会自动尝试重连。

2、 MQTT在整个物联网通信中的位置

以我的应用场景(水泵)为例,水泵上有MCU和庆科的wifi模组,,MCU向wifi模组发消息,wifi模组将消息发送给阿里云物联网平台,然后再云智能手机app中就能看到相关的状态信息了。如下图所示,那么mqtt是存在于哪一部分呢?

从图中可以看到,MQTT是存在于wifi模组向阿里云通信的过程中。

2.1 系统架构与MQTT位置详解

其实我的系统架构可以划分为以下几个部分,

复制代码
[水泵MCU] <---> [WiFi模组] <---(MQTT over WiFi)---> [阿里云物联网平台] <---(非MQTT)---> [手机App]
    │               │                       │                      │
    │               │                       │                      │
 (串口通信)    (实现MQTT客户端)        (MQTT Broker)         (通常使用HTTP/WebSocket)

2.2 水泵MCU ⇄ WiFi模组(无MQTT)

  • 通信方式串口通信,通常是UART。
  • 通信协议自定义的简单数据协议
  • 具体过程
    • MCU通过串口发送一条简单的数据帧给WiFi模组。例如,它可能只发送:TEMP:25.6,PRESS:1.2,STATUS:OK\n
    • 这个阶段没有MQTT。MCU完全不需要知道MQTT是什么,它只负责采集数据和执行控制,并通过最简单的方式与WiFi模组"对话"。
    • wifi模组的固件会解析这条串口指令,将其转换为内部数据结构。

2.3 WiFi模组 ⇄ 阿里云物联网平台(MQTT的核心)

这是整个系统中最关键的一环,MQTT就运行在这里

  • 通信方式WiFi → 互联网 → 阿里云
  • 通信协议MQTT over TCP/IP
  • WiFi模组的角色 :它是一个内置了MQTT客户端的智能模组
    • 它内部已经烧录了固件,这个固件完成了所有复杂的网络和MQTT协议处理。
    • 它的工作流程如下
      1. 初始化 :上电后,模组根据预置的或MCU下发的ProductKeyDeviceNameDeviceSecret(设备三元组)等信息。
      2. 建立连接 :模组通过WiFi连接到互联网,然后作为一个MQTT客户端,与阿里云的MQTT Broker(消息代理服务器)建立TCP连接,并进行鉴权登录。
      3. 数据转换与发布
        • 当它从串口收到MCU发来的 "TEMP:25.6..." 数据后,固件程序会将这些数据打包成一个符合阿里云格式的JSON对象
        • 例如:{"params": {"Temperature": 25.6, "Pressure": 1.2, "Status": "OK"}}
        • 然后,模组的MQTT客户端将这个JSON数据发布 到一个特定的MQTT Topic 上,比如 /sys/${productKey}/${deviceName}/thing/event/property/post
      4. 命令接收与转发
        • 同时,模组的MQTT客户端会订阅 另一个用于接收云端命令的Topic,比如 /sys/${productKey}/${deviceName}/thing/service/property/set
        • 当手机App下发控制命令时,阿里云Broker会通过这个Topic将消息推送给模组。
        • 模组收到MQTT消息后,解析出其中的命令(例如 {"Pressure": 1.5}),然后将其转换回简单的串口指令 发送给MCU,比如 SET_PRESS:1.5

所以,WiFi模组其实就是一个"协议转换器",它把简单的串口协议"翻译"成了标准的、复杂的MQTT协议,并与云端通信。

2.4 阿里云物联网平台(MQTT Broker)

  • 角色 :它是整个MQTT通信的中枢大脑(Broker)
  • 功能
    • 接受所有设备的MQTT连接。
    • 验证每个设备的身份(通过三元组)。
    • 接收设备发布到某个Topic的消息。
    • 将消息转发给所有订阅了该Topic的客户端(在这个场景里,订阅者不是另一个设备,而是云端的后台服务)。

2.5 阿里云物联网平台 ⇄ 手机App(通常无MQTT)

  • 通信方式HTTP/HTTPS 或 WebSocket
  • 原因
    • 手机App运行在用户多变的网络环境下(移动网络、WiFi切换),直接维护一个长连接的MQTT客户端比较复杂且耗电。
    • 对于"查询状态"这类操作,HTTP的"请求-响应"模型更简单直接。
    • 对于"实时推送"控制命令或状态更新,App通常会建立一个到应用服务器的WebSocket长连接,或者使用苹果/谷歌的原生推送服务。
  • 具体过程
    • 手机App通过调用阿里云提供的HTTP API向云端服务请求设备的最新状态。
    • 云端服务收到请求后,可以去阿里云IoT平台查询,或者从平台已经持久化到数据库的数据中获取,再返回给App。
    • 当App下发控制命令时,也是通过HTTP API将命令发送到云端服务,云端服务再通过调用阿里云IoT平台的API,最终以MQTT消息的形式下发到设备。
相关推荐
亿坊电商1 小时前
24H-无人共享KTV:如何实现安全的自助服务?
大数据·物联网·安全
沫儿笙11 小时前
安川机器人tag焊接怎么节省保护气
人工智能·物联网·机器人
熊文豪14 小时前
工业物联网时序数据库选型指南:Apache IoTDB 的技术优势与应用实践
物联网·apache·时序数据库·iotdb
杭州泽沃电子科技有限公司15 小时前
在线监测:为医药精细化工奠定安全、合规与质量基石
运维·人工智能·物联网·安全·智能监测
q***d17319 小时前
C在物联网中的Azure IoT Solution Accelerators
物联网·microsoft·azure
1***s63219 小时前
C在物联网中的Azure IoT Hub
物联网·microsoft·azure
河南博为智能科技有限公司19 小时前
动环监控终端-守护变电站安全运行的智能核心
运维·服务器·网络·物联网
TDengine (老段)1 天前
TDengine 日期函数 DATE 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
E***U9451 天前
C在物联网中的.NET Core
物联网·.netcore