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

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

3天内不再提示

MQTT是什么?

汽车电子技术 来源:程序猿Aki 作者: 程序猿Aki 2023-01-20 11:46 次阅读

前言

本文简单介绍了MQTT的基础知识和使用方法,以蓝牙WIFI双模芯片W801作为硬件设备,接入到华为云。


一、MQTT是什么?

MQTT(消息队列遥测传输协议),是一种基于 发布/订阅 (publish/subscribe)模式的"轻量级"通讯协议, 该协议构建于TCP/IP协议上 。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

好了,以上都是一些文绉绉的说辞,了解一下即可。然后我们要知道,它是如何实现通信的??

MQTT协议中有三种身份:发布者(Publish)、服务器(Broker)、订阅者(Subscribe)。

如下图,每个设备之间都已经建立了MQTT连接。某手机和某电脑订阅了“温度”主题,充当订阅者,温度计充当发布者。当温度计向“温度”主题发布一条消息时,那么订阅了“温度”主题的订阅者都会收到这条消息。而服务器只是充当转发的角色

微信截图_20230105161930.png

下面是在MQTT中的一些操作:

  • Connect:与服务器进行MQTT连接;
  • Disconnect:与服务器断开MQTT连接;
  • Subscribe:订阅某个主题;
  • UnSubscribe:取消订阅某个主题;
  • Publish:发布消息;

以下是通信过程中使用到的报文,在下文中会使用到。

微信截图_20230105161930.png

二、接入物联网平台(以华为云为例)

下面是物联网应用的一个典型的示意图。现在举一个例子加以说明:假设设计一个温度监测的应用。设备端(温度传感器+可以联网的芯片)进行数据采集,将数据通过MQTT协议传输到物联网平台(服务器、Broker)。与此同时,应用端(手机APP、小程序或电脑网页等)从物联网平台接收数据进行显示监测。应用端和物联网平台之间的通信协议并非只限于MQTT,也可能是HTTP、AMQP等。

微信截图_20230105161930.png

1.创建产品和新增设备

首先我们需要在物联网平台上新建一个产品并新增一个测试设备,具体设置如下:

微信截图_20230105161930.png

微信截图_20230105161930.png

微信截图_20230105161930.png

2.建立TCP连接

因为MQTT是建立在TCP连接上的。因此,在建立MQTT连接之前需要建立TCP连接。具体一般是使用套接字进行建立TCP连接,需要的参数包括 域名(解析出IP地址),端口(一般是1883)

从腾讯云的文档中找到域名和端口:

  • 域名(中国大陆):

    productid.iotcloud.tencentdevices.com,其中productid更换为产品ID

  • 端口:1883

调用函数建立TCP连接

static int mqtt_init_socket(mqtt_broker_handle_t *broker, const char *hostname, short port);
//broker:MQTT信息的结构体
//hostname:域名
//port:端口

3.建立MQTT连接

设备端与服务器建立MQTT连接的步骤如下:1、发送CONNECT报文;2、接收CONNACK报文;3、定时发送心跳包。

1、CONNECT报文

CONNECT报文的内容如下:

  • client id:客户端id
  • username:用户名
  • password:密码
  • clean session:清除会话
  • keepalive:心跳时间

其中前三个参数可以在华为云提供的工具中获取(如下图):华为云MQTT报文内容生成工具。填入上图生成的设备ID和密钥即可生成。

微信截图_20230105161930.png

参数clean session与Qos(服务质量)有关,保持默认即可;心跳时间的设置建议60-300,单位是s。

2、接收CONNACK报文

发送CONNECT报文后会接收到连接确认报文CONNACK。

3、发送心跳包

Keepalive指定连接最大空闲时间T,当客户端检测到连接空闲时间超过T时,必须向Broker发送心跳报文PINGREQ,Broker收到心跳请求后返回心跳响应PINGRESP。若Broker超过1.5T时间没收到心跳请求则断开连接,并且投递遗嘱消息到订阅方;同样,若客户端超过一定时间仍没收到心跳响应PINGRESP则断开连接。 简单来说,心跳包是让对方知道设备还在线,没有断开连接

完成上述步骤后,即可激活设备。

微信截图_20230105161930.png

微信截图_20230105161930.png

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

    关注

    112

    文章

    5430

    浏览量

    165671
  • WIFI
    +关注

    关注

    81

    文章

    5162

    浏览量

    199454
  • MQTT
    +关注

    关注

    5

    文章

    538

    浏览量

    21981
收藏 人收藏

    评论

    相关推荐

    什么是MQTTMQTT功能介绍

    RT-ThreadMQTT客户端功能特点MQTT简述MQTT功能介绍MQTT客户端MQTT协议中的方法
    发表于 03-30 07:06

    MQTT是什么?MQTT协议的特点有哪些

    MQTT是什么?MQTT协议的特点有哪些?MQTT协议有几种消息发布服务质量啊?
    发表于 09-29 07:43

    MQTT的概述与MQTT的代码编程理解

    图1为MQTT通信模型图,我们针对此图进行理解MQTT的通信过程。
    的头像 发表于 03-23 15:58 3184次阅读
    <b class='flag-5'>MQTT</b>的概述与<b class='flag-5'>MQTT</b>的代码编程理解

    smart-mqtt MQTT Broker服务

    gitee-smart-mqtt.zip
    发表于 04-20 10:46 1次下载
    smart-<b class='flag-5'>mqtt</b> <b class='flag-5'>MQTT</b> Broker服务

    MQTT.Chat开源的MQTT消息传递代理

    gitee-MQTT.Chat.zip
    发表于 04-20 09:58 2次下载
    <b class='flag-5'>MQTT</b>.Chat开源的<b class='flag-5'>MQTT</b>消息传递代理

    OpenHarmony开发之MQTT讲解

    MQTT这个名称大家都不陌生,物联网的开发必然会遇到MQTT相关知识的应用。那么什么是MQTT?它有什么特点?它能解决什么问题?它是如何工作的?OpenAtom OpenHarmony(以下简称
    的头像 发表于 11-15 22:50 729次阅读

    MQTT 5协议你知道多少?

    MQTT协议是当今世界上最流行、接受度最高的物联网协议。自推出以来,MQTT协议在各行业应用广泛。本文带大家了解MQTT协议演进历史以及最新规范MQTT 5的特点。
    的头像 发表于 02-23 13:14 592次阅读

    什么是MQTT网关?

    Modbus转MQTT网关
    的头像 发表于 10-25 12:28 705次阅读
    什么是<b class='flag-5'>MQTT</b>网关?

    MQTT透传和MQTT网关的区别

    MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议
    的头像 发表于 11-13 10:47 1501次阅读
    <b class='flag-5'>MQTT</b>透传和<b class='flag-5'>MQTT</b>网关的区别

    我想做“MQTT猫”,你认为可行吗

    本文抛出“MQTT猫”的想法和实施思路,设计“MQTT猫”的目的是降低程序员对MQTT编程的要求,也就是把MQTT编程转换为大多数程序员熟悉的串口编程。这样更多的程序员能将
    的头像 发表于 07-10 10:28 512次阅读
    我想做“<b class='flag-5'>MQTT</b>猫”,你认为可行吗

    智联物联分享之物联网协议MQTT简述,MQTT协议特点

    接触过物联网设备的朋友们对于MQTT应该都不陌生吧,那MQTT是什么呢?智联物联小编为大家分享下MQTT的简述与特点。MQTT(MessageQueuingTelemetryTrans
    的头像 发表于 03-28 18:10 805次阅读
    智联物联分享之物联网协议<b class='flag-5'>MQTT</b>简述,<b class='flag-5'>MQTT</b>协议特点

    MQTT发布特性有哪些

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

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

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

    MQTT是什么 MQTT特点

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

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

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