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

news2024/12/29 10:56:05

目录

一、MQTT是什么

二、MQTT的版本

两者之间的关系:

​三、MQTT工作的基本原理

3.1、概念

MQTT客户端:

MQTT服务端:

MQTT主题:

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

相互可独立性:

空间可分离:

时间可异步:

四、连接到MQTT服务器端

4.1理论篇

两个步骤

4.2实战篇

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

ESP8266连接MQTT服务端


一、MQTT是什么

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

二、MQTT的版本

两者之间的关系:

三、MQTT工作的基本原理

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

3.1、概念

MQTT客户端:

MQTT服务端:

MQTT主题:

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

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

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

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

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

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

的主题。

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

相互可独立性:

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

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

空间可分离:

时间可异步:

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

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

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

四、连接到MQTT服务器端

4.1理论篇

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

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

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

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

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

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

一个;

cleanSession(干净会话):标识此连接是否重要。如果为FALSE,则说明此连接不是干净会话,

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

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

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

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

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

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

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

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

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

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

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

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

4.2实战篇

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

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

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

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

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

注意:我连接然那个公共的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.烧录程序即可

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

 今天的介绍就先到此为止,感谢大家的阅读

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/472454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创建第一个DJango3的后端项目

1.安装DJango 需要事先安装python 打开控制台,使用pip命令安装django pip install django如何检验安装成功&#xff1a;在命令行中进入python的环境&#xff0c;导入并打印django的版本信息 2.使用django创建第一个项目 在命令行中进入要存放项目的位置&#xff0c;输入dj…

【mysql】日常遇到的问题解决

目录 MySQL 删除数据库报错 1010 - Error dropping database (cant rmdir) [ERR] 1452 - Cannot add or update a child row: a foreign key constraint fails MySQL 删除数据库报错 1010 - Error dropping database (cant rmdir) 场景复现&#xff1a;navicat中&#xff0c…

Java集合 —— HashMap

一、HashMap是什么 HashMap是一个存储key-value键值对的哈希表&#xff0c;表中每个元素的key都是唯一的&#xff08;通过equals方法判断&#xff09;&#xff0c;查询时通过key的hashcode值即可定位到元素的存储地址&#xff0c;因此HashMap在理想情况下查询时间复杂度为O(1)…

简单谈谈OLTP,OLAP和列存储的概念

简单谈谈OLTP,OLAP和列存储的概念 OLTP(online transaction processing)OLAP(online analytic processing)OLTP VS OLAP数据仓库OLTP数据库和数据仓库之间的差异星型和雪花分析模式列式存储列压缩列式存储和列族内存带宽与矢量化处理列式存储中的排序顺序几个不同的排序顺序 写…

换个花样玩C++(4)细聊C++的引用精妙之处

引用是C++引入的新语言特性。而且在日常工作开发过程中,经常会使用到引用,对于一些做系统架构的架构师而言,这也是不可或缺的一门基本功,我在工作中发现,很多人并没有搞清楚引用。因此我在本篇中将对引用进行详细讨论,希望对大家更好地理解和使用引用起到抛砖引玉的作用。…

你的mysql到底能存多少数据呢?

前言 参考借鉴文章 我说MySQL每张表最好不超过2000万数据&#xff0c;面试官让我回去等通知&#xff1f; 这里自己在总结一下&#xff0c;原因是相关知识欠缺&#xff0c;看别人的文章研究很久才弄明白&#xff0c;所以这里记录一些心得。 作者&#xff1a;阿杆 链接&#xff…

4月28号软件资讯更新合集.....

快速接活&#x1f496;Snowy v2.2.8 已更新 Snowy&#xff08;SnowyAdmin&#xff09;是国内首个国密前后端分离快速开发平台&#xff0c;集成国密加解密插件&#xff0c; 使用 AntdvVite3SpringBootMybatisPlusHutoolSaToken 技术栈开发&#xff0c;软件层面符合等保测评要求…

PPPwizard1.4.3软件使用说明中文翻译稿

PPP软件包使用说明(版本1.4.3) 1. 交付包 PPPWizardxy内容是按照以下模式组成&#xff1a; PPPWizardxy |-- PPPSoftwarePackage_v1.4.3.pdf |-- RTRover |-- compile.sh |-- generateLowLevel.cpp |-- getStream.cpp |-- laurichesse_ion_gnss_2015_september_bdp.pdf |-- …

JVM内存模型的演变

1&#xff0c;背景 class文件、类的加载过程。我们的class文件就要进入到JVM内存里&#xff0c;我们沿着经典的JDK1.6&#xff0c;JDK1.7&#xff0c;JDK1.8看看在其中都经历了哪些改变 概念的统一&#xff1a; 方法区&#xff1a; 方法区可以看作是JVM逻辑上管理一片区域的…

深度学习-第T5周——运动鞋品牌识别

深度学习-第T5周——运动鞋品牌识别 深度学习-第T5周——运动鞋品牌识别一、前言二、我的环境三、前期工作1、导入数据集2、查看图片数目3、查看数据 四、数据预处理1、 加载数据1、设置图片格式2、划分训练集3、划分验证集4、查看标签 2、数据可视化3、检查数据4、配置数据集 …

微短剧“小阳春”,“爱优腾芒”抢滩登陆?

降本增效一整年&#xff0c;长视频平台们似乎扭转了市场对于它们“烧钱”的印象。 爱奇艺宣布2022全年盈利&#xff0c;腾讯视频宣布从去年10月起开始盈利&#xff0c;视频平台们结束了一场“无限战争”。 与此同时&#xff0c;随着短视频平台的崛起&#xff0c;视频内容的形…

从0到1带你构建——低代码开发入门案例

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端&#xff08;Node.js&#xff09; &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿多个前端 offer&#xff08;…

【算法】欧拉路径的DFS存储顺序

欧拉路径和欧拉回路 对于无向图&#xff0c;所有边都是连通的。 &#xff08;1&#xff09;存在欧拉路径的充分必要条件&#xff1a;度数为奇数的点只能有0个或2个。 &#xff08;2&#xff09;存在欧拉回路的充分必要条件&#xff1a;度数为奇数的点只能有0个。 对于有向图&a…

jvm之字节码

写在前面 java字节码由单字节的指令(也叫做操作码)组成&#xff0c;但一个 byte 最多能够存储 256 个指令&#xff0c;够用吗&#xff1f;截止到目前是够的&#xff0c;因为指令的个数是200多一点&#xff0c;指令分为如下四类&#xff1a; 1&#xff1a;栈操作指令&#xff…

【前端基础知识】Vue中的变量不是响应式的吗?属性赋值后视图不变化的原因是什么?

目录 &#x1f914;问题&#x1f4dd;回答&#x1f3a8;使用场景动态添加属性动态添加数组元素 ❌注意事项$set只能在响应式对象上使用$set不能用于根级别的属性$set的性能问题 &#x1f4c4;总结 &#x1f914;问题 Vue是一款在国内非常流行的框架&#xff0c;采用MVVM架构&a…

数据库课设--基于Python+MySQL的餐厅点餐系统

文章目录 一、系统需求分析二、系统设计1. 功能结构设计2、概念设计2.2.1 bill_food表E-R图2.2.2 bills表E-R图2.2.3 categories E-R图2.2.4 discounts表 E-R图2.2.5 emp表E-R图2.2.6 food 表E-R图2.2.7 member表E-R图2.2.8 member_point_bill表E-R图2.2.9 servers表E-R图2.2.1…

五一出行!如何辨别偷拍设备

五一小长假即将到来&#xff0c;作为出行的重要一环&#xff0c;我们都希望能在旅途中享受安全与便捷。但不可避免的事&#xff0c;有些不法分子可能会通过安装针孔摄像头等方式进行非法监控。从表面上看&#xff0c;我们很难分辨。这些小小的设备&#xff0c;被伪装成日常用品…

elementUI组件库el-switch开关控件的样式设置,精细至开关内的文字、圆点、背景设置

开发项目时做一种开关控件样式&#xff0c;要求显示和隐藏两种状态下的文字、圆点、背景色等都有区别&#xff0c;就研究了一下&#xff0c;各种设置已在代码中标注&#xff0c;小白也可直接复制使用。 <el-table-column label"操作"><template slot-scope&…

【FPGA】Spartan®-7器件XC7S75-1FGGA484C、XC7S15-1FTGB196C现场可编程门阵列芯片

赛灵思 Spartan-7现场可编程门阵列采用运行频率超过200DMIP的MicroBlaze™软处理器&#xff0c;支持800Mb/s DDR3&#xff0c;基于28nm技术。FPGA是半导体器件&#xff0c;基于通过可编程互连系统连接的可配置逻辑块 (CLB) 矩阵。Spartan-7具有集成的模数转换器、专用安全特性以…

回溯算法经典面试题

⭐️前言⭐️ 本文汇总了常见的回溯算法题目&#xff0c;并将框架来进行运用&#xff0c;相信通过这篇文章&#xff0c;读者能够对回溯算法有一定了解。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主将持续更…