【物联网】物1— 初步认识MQTT、连接到MQTT服务端

这篇具有很好参考价值的文章主要介绍了【物联网】物1— 初步认识MQTT、连接到MQTT服务端。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、MQTT是什么

二、MQTT的版本

两者之间的关系:

​三、MQTT工作的基本原理

3.1、概念

MQTT客户端:

MQTT服务端:

MQTT主题:

3.2、MQTT订阅/发布主题的特点

相互可独立性:

空间可分离:

时间可异步:

四、连接到MQTT服务器端

4.1理论篇

两个步骤

4.2实战篇

电脑端MQTT客户端连接MQTT服务器

ESP8266连接MQTT服务端


一、MQTT是什么

mqtt连接服务器,物联网MQTT,物联网,MQTT

特点:客户端/服务端架构、发布/订阅模式、易于实现

二、MQTT的版本

mqtt连接服务器,物联网MQTT,物联网,MQTT

两者之间的关系:

三、MQTT工作的基本原理

深入了解客户端、服务端的概念,首先来看一下下概念:

3.1、概念

MQTT客户端:

mqtt连接服务器,物联网MQTT,物联网,MQTT

MQTT服务端:

mqtt连接服务器,物联网MQTT,物联网,MQTT

MQTT主题:

mqtt连接服务器,物联网MQTT,物联网,MQTT

以下面这个图为例进行解释:

汽车、手机、电脑都是可以作为MQTT客户端,MQTT服务器是服务端

mqtt连接服务器,物联网MQTT,物联网,MQTT

1、汽车将数据传输至MQTT服务端,然后手机和电脑可以从MQTT服务器端获取数据

2、客户端可以接收数据和上传数据,如下图所示:

mqtt连接服务器,物联网MQTT,物联网,MQTT

3、客户端上传或读取数据时,需要指定该数据的主题,就是说明这个数据是干啥的。可以将主题

理解为一个频道,可以在这个主题里面发布数据或读取数据,例如汽车速度和空调温度是两个不同

的主题。

3.2、MQTT订阅/发布主题的特点

相互可独立性:

mqtt连接服务器,物联网MQTT,物联网,MQTT

提炼:就是发布主题的客户端不知道有多少其他客户端订阅了该主题,订阅该主题的客户端也不知

道一共有多少人订阅了该主题,只知道自己是否订阅了。

空间可分离:

mqtt连接服务器,物联网MQTT,物联网,MQTT

时间可异步:

mqtt连接服务器,物联网MQTT,物联网,MQTT

某个客户端上传数据时,如果订阅该主题的客户端不在线,那么服务端会先保存该信息,当订阅该

主题的客户端上线时,再进行推送。

可是可以的意思,并不是一定是这样

四、连接到MQTT服务器端

4.1理论篇

MQTT客户端连接到MQTT服务端一共有两个步骤

第一个步骤:客户端向服务端发送连接请求connect

mqtt连接服务器,物联网MQTT,物联网,MQTT

简而言之:就是MQTT客户端向MQTT服务端发送一个特定格式的数据包(报文)connect,包括

一些连接的信息以及连接以后的一些设置,数据包格式如下:

mqtt连接服务器,物联网MQTT,物联网,MQTT

先来学习clientID、cleanSession、keepAlive这三个变量

clientID:连接到服务器端的客户端名称标识。连接到同一MQTT服务端的clientID不能重复只能有

一个;

mqtt连接服务器,物联网MQTT,物联网,MQTTcleanSession(干净会话):标识此连接是否重要。如果为FALSE,则说明此连接不是干净会话,

是一个重要的连接过程,当服务器端给此客户端发信息时,如果未收到客户端的确认信息,则会一

直保存要发送的信息,直至收到客户端的确认信息。

mqtt连接服务器,物联网MQTT,物联网,MQTT

keepAlive:心跳时间间隔。MQTT服务端想知道客户端是否连接到服务端,需要客户端定时给服

务端发消息确认,这个心跳时间间隔就是发送信息的间隔。

第二个步骤:服务端向客户端发送确认连接请求connack

mqtt连接服务器,物联网MQTT,物联网,MQTT

简而言之:就是服务端收到了客户端发来的连接请求,所以向客户端返回一个确认收到请求连接的

报文,数据包为connack,格式为下:

mqtt连接服务器,物联网MQTT,物联网,MQTT

该报文只有两个变量,比较简单

returnCode:连接返回码。返回连接状态,是否成功,如果不成功则返回错误代码

mqtt连接服务器,物联网MQTT,物联网,MQTT

sessionPresent:当前会话。对于比较重要的连接,如果服务端发送消息后,未收到客户端的确认

消息,则会保存着数据等待下次发送,直至成功。这个sessionpresent参数就是标明服务端是否有

未收到客户端确认的数据。需要与cleansession配合使用

mqtt连接服务器,物联网MQTT,物联网,MQTT

4.2实战篇

电脑端MQTT客户端连接MQTT服务器

首先要有一个MQTT客户端软件,这里以MQTTfx为例,下载链接如下:

下载 – 太极创客 (taichi-maker.com)http://www.taichi-maker.com/homepage/download/#mqtt下载以后打开以后是这个页面:

mqtt连接服务器,物联网MQTT,物联网,MQTT

通过设置一些参数,可以尝试连接,可以连接本地的服务端,也可以连接一些公共的MQTT服务端

可以连接到公网IP测试是否可以连接,例如:test.ranye-iot.net

注意:我连接然那个公共的MQTT服务器没有成功,测试的是一个国外的MQTT公共服务器

mqtt连接服务器,物联网MQTT,物联网,MQTT

如上图所示,已经成功连接; 

MQTTFX客户端使用教程:

【太极创客】零基础入门学用物联网 - MQTT篇 1-4 服务端连接操作_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1T54y1k7MQ/?spm_id_from=333.788.recommend_more_video.0&vd_source=0864131da85286458a76f1653d414f35

ESP8266连接MQTT服务端

要写好程序烧录至开发板,这是极为关键的

1、首先将pubsubclient库加载到arduino上,具体方法如下:

为Arduino IDE安装添加库 – 太极创客 (taichi-maker.com)

库的下载地址:下载 – 太极创客 (taichi-maker.com)

2、其次编写程序(太极创客实例程序)

/**********************************************************************
本程序旨在演示如何使用PubSubClient库使用ESP8266向连接MQTT服务器。
-----------------------------------------------------------------------
本示例程序为太极创客团队制作的《零基础入门学用物联网》中示例程序。
该教程为对物联网开发感兴趣的朋友所设计和制作。如需了解更多该教程的信息,请参考以下网页:
http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-c/esp8266-nodemcu-web-client/http-request/
***********************************************************************/
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
 
// 设置wifi接入信息(请根据您的WiFi信息进行修改)
const char* ssid = "taichi-maker";
const char* password = "12345678";
const char* mqttServer = "test.ranye-iot.net";
 
// 如以上MQTT服务器无法正常连接,请前往以下页面寻找解决方案
// http://www.taichi-maker.com/public-mqtt-broker/
 
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
 
void setup() {
  Serial.begin(9600);
 
  //设置ESP8266工作模式为无线终端模式
  WiFi.mode(WIFI_STA);
  
  // 连接WiFi
  connectWifi();
  
  // 设置MQTT服务器和端口号
  mqttClient.setServer(mqttServer, 1883);
 
  // 连接MQTT服务器
  connectMQTTServer();
}
 
void loop() { 
  if (mqttClient.connected()) { // 如果开发板成功连接服务器    
    mqttClient.loop();          // 保持客户端心跳
  } else {                  // 如果开发板未能成功连接服务器
    connectMQTTServer();    // 则尝试连接服务器
  }
}
 
void connectMQTTServer(){
  // 根据ESP8266的MAC地址生成客户端ID(避免与其它ESP8266的客户端ID重名)
  String clientId = "esp8266-" + WiFi.macAddress();
 
  // 连接MQTT服务器
  if (mqttClient.connect(clientId.c_str())) { 
    Serial.println("MQTT Server Connected.");
    Serial.println("Server Address: ");
    Serial.println(mqttServer);
    Serial.println("ClientId:");
    Serial.println(clientId);
  } else {
    Serial.print("MQTT Server Connect Failed. Client State:");
    Serial.println(mqttClient.state());
    delay(3000);
  }   
}
 
// ESP8266连接wifi
void connectWifi(){
 
  WiFi.begin(ssid, password);
 
  //等待WiFi连接,成功连接后输出成功信息
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi Connected!");  
  Serial.println(""); 
}

3.烧录程序即可

打开串口监视器,会有以下信息显示:

mqtt连接服务器,物联网MQTT,物联网,MQTT

 今天的介绍就先到此为止,感谢大家的阅读文章来源地址https://www.toymoban.com/news/detail-535949.html

到了这里,关于【物联网】物1— 初步认识MQTT、连接到MQTT服务端的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【自用】云服务器 使用 docker 搭建 HomeAssistant + MQTT 物联网平台

    1.搭建流程概述 2.准备工作 3.开始搭建! 4.总结 如果想看 ESP32 或其他使用 MicroPython 编程的单片机如何连接到该云服务器,实现 HomeAssistant 控制 单片机的内容,请看我这篇博客的下一篇。 0.总体流程 我们需要先有一台云服务器,然后在上面搭建 docker(用宝塔傻瓜式搭建就行

    2024年02月13日
    浏览(35)
  • 使用合宙Air724UG物联网模块发送MQTT消息至EMQX服务器 MQTT如何发送消息 AIR724发送MQTT至腾讯云 腾讯云接收MQTT消息

    在上一篇关于物联网的文章中介绍了如何建立一个MQTT的EMQX服务器,有需要的同学可以点击查看。在这里服务器的作用相当于建立一个MQTT消息的中转站,消息先发送到服务器中,再在服务器进行转发消息。 那么有了一个转发的平台,如何在嵌入式终端中发送MQTT消息呢,在这

    2024年02月09日
    浏览(47)
  • 前端mqtt的详细使用(包含mqtt服务器部署,前端vue3使用mqtt连接、订阅主题、发布等)

    ​ MQTT(消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的通讯协议,该协议构建于TCP/IP协议上。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。MQTT 协议的应用场景包括物联网、移动应用、车联网、智能

    2024年02月08日
    浏览(52)
  • 连接(EMQX)mqtt服务器时报错

    线下项目连接正常,部署到阿里云服务器的项目也正常连接,仅在安装emqx的服务器上部署的项目连接不上。 具体报错信息,如下: 2022-09-01 15:25:27.791 ERROR 1 — [ main] c.z.iotplatfrom.util.mqtt.MQTTListener : Unable to connect to server org.eclipse.paho.client.mqttv3.MqttException: Unable to connect to server

    2024年02月05日
    浏览(32)
  • 【物联网】使用RabbitMQ作为MQTT服务端并自定义设备连接权限

    最近公司启动了一个新的物联网项目,使用MQTT协议与设备通信,在比较了各大MQTT服务后,决定选用开源的RabbitMQ搭建我们的服务端。我们的目标是能够支撑10万台设备同时在线,因此比较看重集群和高可用功能,RabbitMQ在这方面十分优异,同时RabbitMQ也能够兼顾项目中的消息中

    2024年02月11日
    浏览(33)
  • 13-ESP8266连接MQTT服务器发送数据

    Author:teacherXue MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号

    2024年02月03日
    浏览(47)
  • STM32通过ESP8266连接MQTT服务器

            ESP8266有多种连接MQTT方式,本文介绍使用的是AT MQTT版本固件的ESP01s,基于此固件版本进行说明。本文所需硬件:STM32F103RCT6、LED、ESP01s、DHT11,实现功能:温湿度上传和远程开关灯的基本功能。 B站视频教程:STM32+ESP8266+DHT11_哔哩哔哩_bilibili gitee: STM32_Share: STM32、DHT

    2024年02月09日
    浏览(36)
  • ESP8266入门教程11:连接MQTT服务器

    将第三方库PubSubClient下载到lib文件夹 git clone https://github.com/knolleary/pubsubclient.git 1、打开阿里云IOT官网,登录阿里云账号 https://iot.console.aliyun.com 2、创建实例 3、新建产品 4、自定义主题  5、添加设备  6、查看设备配置   1、修改PubSubClient.h头文件,否则无法连接阿里云MQTT服务

    2023年04月24日
    浏览(46)
  • 基于ESP32搭建物联网服务器十二(使用MQTT协议与ESP32互动)

    在之前的文章中:基于ESP32搭建物联网服务器十一(用WEB页面控制引脚(GPIO)功能)_esp32webserver 控制io_你的幻境的博客-CSDN博客 已经简单地介绍了MQTT协议,对比于其它网络协议,MQTT协议在物联网的开发中,它的特点使它适用于大多数受限的环境。例如网络代价昂贵,带宽低、不可

    2024年02月02日
    浏览(37)
  • 【STM32 x ESP8266】连接阿里云 MQTT 服务器(报文连接)

    具体如何在阿里云创建一个 MQTT 服务器我就不写出来了,可以去百度一下(主要是我忘了,不好演示)。 有关 MQTT 报文的一些标识在我前面的 一篇文章 中讲过,感兴趣的可以去看看( 有关代码部分讲解的内容也在那里 ,这里就不细讲了,主要讲如何连接的) 插一嘴,如果

    2024年02月06日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包