使用 Python 订阅 MQTT 多个 Topic 的入门指南

引言

MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,非常适合物联网(IoT)设备之间的通信。作为一名初学者,了解如何在 Python 中使用 MQTT 订阅多个主题(topic)将非常有帮助。在本文中,我们将通过一个详细的步骤指南和代码示例来帮助你实现这一目标。

流程概览

在实施之前,我们先来明确一下整个流程。在下表中,我们概述了所需的主要步骤及其说明。

步骤 描述
1 安装必要的库
2 导入库
3 连接到 MQTT 代理
4 订阅多个主题
5 定义消息处理回调函数
6 进入循环,保持连接
gantt
    title Python 订阅 MQTT 多个 Topic 的流程
    dateFormat  YYYY-MM-DD
    section 步骤
    安装库                 :done,    des1, 2023-01-01, 1d
    导入库                 :done,    des2, 2023-01-02, 1d
    连接到 MQTT 代理      :done,    des3, 2023-01-03, 1d
    订阅多个 Topic         :done,    des4, 2023-01-04, 1d
    定义消息处理函数      :done,    des5, 2023-01-05, 1d
    保持连接              :active,  des6, 2023-01-06, 3d

步骤详解

步骤 1:安装必要的库

在 Python 中使用 MQTT,我们通常使用 paho-mqtt 这个库。要安装这个库,可以使用以下命令:

pip install paho-mqtt
  • 这行命令将从 PyPI 下载并安装 paho-mqtt 库,供我们在 Python 中使用。

步骤 2:导入库

在你的 Python 脚本中,我们需要导入刚才安装的库:

import paho.mqtt.client as mqtt
  • 这行代码导入了 paho-mqtt 库,并将其命名为 mqtt,方便后续使用。

步骤 3:连接到 MQTT 代理

接下来,我们需要定义一个用于连接 MQTT 代理的函数:

def on_connect(client, userdata, flags, rc):
    print("已连接,返回码: " + str(rc))
  • on_connect 是一个回调函数,它在客户端成功连接到 MQTT 代理时执行。
  • rc 是返回码,0 表示连接成功。

然后,我们实例化客户端并连接到代理:

client = mqtt.Client()

# 绑定连接回调函数
client.on_connect = on_connect

# 连接到 MQTT Broker(替换为你的 Broker 地址及端口)
client.connect("MQTT_BROKER_ADDRESS", MQTT_BROKER_PORT, 60)
  • 这段代码初始化了一个 MQTT 客户端,绑定了连接回调函数,并指定 MQTT Broker 的地址与端口。

步骤 4:订阅多个主题

现在我们可以订阅多个主题了,请看下面的代码示例:

# 订阅多个主题,可以使用列表定义
topics = [("topic1", 0), ("topic2", 0), ("topic3", 0)]

client.subscribe(topics)
  • topics 是一个列表,里面包含了多个主题及其 QoS(服务质量)等级。这里的 0 表示最基本的服务质量等级。

步骤 5:定义消息处理回调函数

当你订阅的主题接收到消息时,我们需要定义一个回调函数来处理这些消息:

def on_message(client, userdata, msg):
    print(f"主题: {msg.topic} 消息: {msg.payload.decode()}")
  • on_message 是一个回调函数,它在收到新消息时执行。
  • msg.topic 是接收到的消息的主题,msg.payload.decode() 将消息的负载进行解码并以字符串形式返回。

我们将这个回调函数绑定到客户端:

client.on_message = on_message

步骤 6:进入循环,保持连接

最后,我们需要调用一个循环,使客户端持续运行并监听消息:

client.loop_forever()
  • 这行代码会使客户端进入一个无限循环,直到手动中止。

完整代码

以下是上述所有步骤结合的完整代码示例:

import paho.mqtt.client as mqtt

# 连接回调
def on_connect(client, userdata, flags, rc):
    print("已连接,返回码: " + str(rc))

# 消息处理回调
def on_message(client, userdata, msg):
    print(f"主题: {msg.topic} 消息: {msg.payload.decode()}")

# 初始化客户机
client = mqtt.Client()

# 绑定回调函数
client.on_connect = on_connect
client.on_message = on_message

# 连接到 MQTT Broker
client.connect("MQTT_BROKER_ADDRESS", MQTT_BROKER_PORT, 60)

# 订阅多个主题
topics = [("topic1", 0), ("topic2", 0), ("topic3", 0)]
client.subscribe(topics)

# 进入循环
client.loop_forever()

结尾

通过上述的步骤和代码,你现在应该能够在 Python 中使用 paho-mqtt 订阅多个 MQTT 主题。记得替换 MQTT_BROKER_ADDRESSMQTT_BROKER_PORT 为你实际使用的代理地址与端口!希望这篇文章对你有所帮助,祝你在学习 MQTT 和 Python 开发的旅程中取得更大的进展!如果你还有关于 MQTT 的其他问题,欢迎随时询问。