MQTT基础

MQTT 是一种开放且简单的客户端服务器发布/订阅消息传输协议,专为高延迟和低网络带宽环境下不同设备之间的机器对机器通信而设计。

让我们进入一个使用Mosquitto MQTT 代理和 Python MQTT 客户端库Paho-MQTT的示例实现。

HiveMQ云代理和Python客户端

此示例项目涵盖了与 HiveMQ 云交互的 MQTT 客户端的核心功能。 要安全地将 MQTT 客户端与 HiveMQ Cloud 连接,您需要启用 TLS。 使用您的用户名和密码在 HiveMQ Cloud 上验证您的 MQTT 客户端。 要连接客户端,请使用安全 MQTT 通信的标准端口 8883。

# enable TLS
client.tls_set(tls_version=mqtt.client.ssl.PROTOCOL_TLS)
# set username and password
client.username_pw_set("<your_username>", "<your_password>")
# connect to HiveMQ Cloud on port 8883
client.connect("<your_host>", 8883)

代码首先订阅主题过滤器“encyclopedia/#”。

这意味着 MQTT 客户端接收发布到此主题过滤器的所有消息。 主题过滤器中所谓的通配符(“#”)包括所有以“encyclopedia/”开头的主题。 on_subscribe 回调作为订阅工作的保证。 然后代码发布一条消息,并在收到消息时将其打印到终端。 由于 on_message 回调,它会打印消息,当消息进入时会触发该消息。

# subscribe to all topics of encyclopedia by using the wildcard "#"
client.subscribe("encyclopedia/#", qos=1)

# a single publish, this can also be done in loops, etc.
client.publish("encyclopedia/temperature", payload="hot", qos=1)

Mosquitto云代理和Python客户端

在此示例中,我使用免费的在线 MQTT 代理 Mosquitto,您可以使用 MQTT 客户端轻松连接(发布和/或订阅)。

发布一个主题

我们将使用上图中的示例编写两个 Python 应用程序,将信息发布到温度主题。第一个应用程序将发布有关此主题的内部温度。

如果您在控制台中运行脚本,它将如下所示。

Just published 20.152963374957682 to topic TEMPERATURE 
Just published 20.161864524496735 to topic TEMPERATURE 
Just published 20.832600714734365 to topic TEMPERATURE 
Just published 20.139163091102564 to topic TEMPERATURE 
Just published 20.596117184032405 to topic TEMPERATURE 
Just published 20.050333160761117 to topic TEMPERATURE 
Just published 20.25035838170374 to topic TEMPERATURE 
Just published 20.76368639769279 to topic TEMPERATURE

订阅一个主题

源代码