MQTT服务器搭建和ESP32实现MQTT代码

1、MQTT介绍:

1.1、需求介绍

在智能家居、物联网应用中,经常需要多个设备间彼此通讯、远程控制等,这些信息的特点是信息量较少、连接的节点多,有时只需要1个字节0/1即可用于控制设备的通断,一个房间里面有很多个这种设备。

并且每个设备的性能不是很高,很可能内存只有几K字节,此时我们上网常用的HTTP协议就不再适合这种场景了。

为了解决这种问题,IBM在1999年发布了MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),其最大优点是可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。

作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。

1.2、MQTT介绍:

关于MQTT详细的介绍链接如下:
https://www.runoob.com/w3cnote/mqtt-intro.html

这里摘抄部分说明:

首先MQTT是基于客户端-服务器的消息发布/订阅传输协议,需要一个较高性能的设备作为整个通讯流程中的服务器,用来找到主题对应的订阅者ID并把消息推送过去,这个服务器在MQTT里面叫做broker。MQTT整个结构框图如下:
在这里插入图片描述在这里插入图片描述
每个设备都可以作为消息的发布者和消息的订阅者。

A和B通信只需要A发布消息msg_A,
然后B订阅msg_A即可获得A发布的信息,

这种机制很方便扩展为单对多通信或者多对多通信。

扫描二维码关注公众号,回复: 14982124 查看本文章

MQTT底层是依赖TCP协议进行连接的,
但也有基于UDP的MQTT,叫做MQTT-SN。MQTT的冗余通信小,固定的通信头部长度是2个字节。

MQTT里面发布消息有三种机制,
"至多一次",
消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。

"至少一次",
确保消息到达,但消息重复可能会发生。

"只有一次",
确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。

2、具体实现:

2.1、库推荐

实现MQTT有很多完善的开源库,在esp32上推荐使用PubSubClient库,其体积很小,不到700行的代码,
官网链接如下:
https://pubsubclient.knolleary.net/api#loop

有较为完善的API说明文档:
在这里插入图片描述

2.2、配置MQTT的服务器Broker:

首先我们需要先在电脑上搭建起MQTT的服务器,服务器有很多,这里推荐EMQX,体积较小(30M不到),简单方便。除此之外还有mosquitto等开源消息代理。

EMQX官网链接如下:
https://www.emqx.com/zh/community

在官网下载安装好后(笔者是win10系统),运行CMD进入到bin文件夹,./bin/emqx start启动。启动后,浏览器进入:

http://127.0.0.1:18083/

用户名admin,密码public,可以看到界面如下:
在这里插入图片描述
这时便已成功搭建并启动了MQTT服务器,此时如果有设备接入到该MQTT里面,这里就会监控到。

2.3、PubSubClient库使用:

使用该库较为简单,说明如下:
第一步,
创建一个WIFI客户端节点,并用该客户端初始化MQTT客户端。
在这里插入图片描述
第二步,
配置WIFI客户端正确的连接到服务器,并配置一个接收到订阅的主题后的回调函数。
在这里插入图片描述
回调函数格式如下:
在这里插入图片描述
第三步,
订阅一个主题,订阅后服务器便会监测是否有设备发送该主题,如果发送了就推送给订阅该主题的设备。
在这里插入图片描述
第四部,
在主函数一个循环里面一直执行MQTT的循环服务函数。
在这里插入图片描述

此时便已经实现了MQTT服务器的搭建和单片机连接到MQTT服务器上的所有工作。因为本文是在熟悉MQTT之后写的,已经进行过测试,但未拍测试图片,所以就不放测试图片了。

3、使用MQTT设备的工程代码:

上传了一个使用MQTT的工程代码,可以参考进行MQTT的部署。
链接如下:

https://download.csdn.net/download/wcc243588569/84995708

4、最后:欢迎和我一起交流学习

猜你喜欢

转载自blog.csdn.net/wcc243588569/article/details/123557400