构建配置ESP8266 MQTT服务器

tech2024-10-29  25

背景知识视频教程

物联网#3:物联网(物联网)自动化与ESP8266掌握MQTT使用NodeMCU(由ESP8266支持),MicroPython和PyCharm进行物联网

我们将了解ESP8266模块如何通过消息队列遥测传输(MQTT)相互通信。

MQTT术语

已经使用了诸如中央代理,主题,发布,订阅之类的术语,因此现在该用类似于邮局的方式来解释它们了,消息是报纸或杂志:

代理:这是一个接收客户端消息的软件应用程序,并根据订阅者的请求路由消息。客户端:它是一种可以发布消息或可以接收消息的设备,或两者兼而有之。主题:这是一个字符串,代理使用该字符串来过滤每个连接的客户端的消息。 它由客户端在订阅请求中发送给代理,以表达接收其他客户端发布的消息的愿望。 由客户端在将消息发布到订阅了同一主题的任何其他客户端时发送。发布:在特定主题上向另一个客户端发送消息(杂志)的操作。订阅:通知代理有兴趣接收其他客户在该主题上发布的将来消息的操作。 客户可以订阅多个主题。退订:客户端告诉代理不要将消息发送到指定主题的操作。

由于MQTT的一个特点是灵活的订阅主题,因此让我们看一下主题的形成方式。主题由使用/作为主题级别分隔符的层次结构级别组成。

例如

62/livingroom/temperature456733-a55h56-667743/battery

注意:主题区分大小写。

主题通配符

如果通过代理将数据发布到另一个客户端,则必须指定完整的主题名称:要接收消息,客户端可以使用通配符级别订阅主题。通配符为单级+和多级#:

单级+在主题的订阅级别中使用+表示代替+可以是任何值。如果要构建显示面板来显示房屋的温度,则可以构建模块来读取每个房间的温度,并将其发布到以下主题中:

myHouse/groundFloor/livingroom/temperature

myHouse/groundFloor/kitchen/temperature

myHouse/firstFloor/bedroom/temperature和显示模块将订阅:myHouse/groundFloor/+/temperature每次位于底层的温度模块发布有关其主题的消息时,显示模块都会收到该消息,因此无需订阅每个主题,但它不会接收来自以下主题的数据:

myHouse/groundFloor/livingroom/humidity

myHouse/groundFloor/kitchen/light

多级#在订阅的主题级别的客户端中使用#将接收该级别以下的所有消息如果显示面板正在订阅主题myHouse/groundFloor/#表示它将接收以myHouse / groundFloor开头的主题上发布的所有消息。如果客户订阅#,则该主题将接收该代理中发布的所有消息。特殊主题$如果要监视代理的内部统计信息,则需要订阅$ SYS主题。以下是你获得的示例

Mosquitto代理

Eclipse Mosquitto TM是一个开源MQTT代理,它实现了MQTT v3.1和MQTT v.3.1.1标准,并提供了一种轻量级的方法来传输消息,从而允许发布和订阅低功耗传感器,移动设备,嵌入式计算机和微型计算机和控制器。

您可以直接从Linux存储库发行版中,在Raspberry Pi上,AWS实例上或VirtualBox Linux实例上安装Mosquitto。 或者,如果您需要websockets的支持,则可以获取源代码并自己进行编译。

从Linux发行版本库安装:

首先升级到最新版本

sudo apt update && sudo apt upgrade

然后安装 Mosquitto

sudo apt install mosquitto

你将看到如下截屏

安装Mosquitto代理后,验证代理是否已启动,并按如下所示安装mosquitto-clients:输入如下命令

sudo apt install mosquitto-clients

你将看到如下截屏

Mosquitto客户端带有三个非常重要的实用程序:

mosquitto_sub:一个简单的mqtt客户端,它将订阅一个主题并打印接收到的所有消息mosquitto_pub:一个简单的mqtt客户端,它将在单个主题上发布消息并退出mosquitto_passwd:一种用于管理Mosquitto密码文件的工具

将它们中的任何一个与–help选项一起使用,例如mosquitto_sub --help将提供包含可用于测试代理的所有选项的完整列表。

安装后,Mosquitto作为服务启动,并侦听端口1883。要测试此初始安装,让我们订阅一个主题并在该主题上发布一条消息。

以下命令显示使用-t选项订阅主题:

mosquitto_sub-t livingroom/temperature

如下运行命令

订阅主题,观察:此命令假定代理在本地服务器上运行。 当您将Mosquitto部署到Internet虚拟专用服务器(VPS)进行订阅时,请添加-h以指定服务器实例的IP地址(使用ifconfig进行查找),以及端口-p 1884(如果您未使用默认的1883) 端口。在这种情况下,命令将是:

mosquitto_sub -h 46.102.34.87 -t livingroom/temperature

在另一个终端中,让我们发布关于同一主题livingroom/temperature的一些JSON格式的消息。 使用数次以下命令,然后查看消息:

mosquitto_pub -t livingroom/temperature -m {"t":27.4}

你将看到结果:

发送消息后,mosquitto_pub将退出。 如果要每秒发送一次值,请使用watch实用程序,其中-n 1是命令之间的秒数:

watch -n 1 mosquitto_pub -t livingroom/temperature -m {"t":27.4}

现在,您可以尝试在订阅主题上使用+,#,mosquitto_sub -t livingroom /#将为您提供命令发送的所有数据:

mosquitto_pub -t livingroom/temperature -m {"t":27.4} mosquitto_pub -t livingroom/humidity -m {"h":68}

你将看到

并在主题中使用+,订阅所有温度主题:

mosquitto_sub - t myhouse/+/temperature

并从其他终端发送消息,例如:

mosquitto_pub -t myhouse/living/temperature -m {"t":25.6} mosquitto_pub -t myhouse/kitchen/temperature -m {"t":27.1}

在您订阅的终端中,您将看到以下所有消息:

ESP8266使用MQTT

发布数据

接收数据

保护Mosquitto安全

详情参阅http://viadean.com/build_config_esp8266_mqtt.html

最新回复(0)