使用 MQTT 是物联网开发中常用的一种通信协议,Python 通过 paho-mqtt 库提供了使用 MQTT 的接口。
安装 paho-mqtt 库
在使用 MQTT 前,需要先安装 paho-mqtt 库。安装方法如下:
pip install paho-mqtt
连接 MQTT 服务器
在使用 MQTT 前,需要连接 MQTT 服务器。连接代码示例如下:
import paho.mqtt.client as mqtt
# 连接参数
broker = "broker.mqtt-dashboard.com"
port = 1883
topic = "my/test/topic"
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe(topic)
def on_message(client, userdata, message):
print(message.topic+" "+str(message.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(broker, port, 60)
client.loop_forever()
上述代码连接一个名为 broker.mqtt-dashboard.com
的 MQTT 服务器,使用 1883 端口。当连接成功后,订阅主题为 my/test/topic
的 MQTT 消息。
发布 MQTT 消息
连接成功后,可以通过发布 MQTT 消息,来向主题中发送数据。下面是发送消息的示例代码:
import paho.mqtt.publish as publish
# 发送消息
publish.single(topic, payload="hello world", hostname=broker)
上述代码向主题为 my/test/topic
发送了一条内容为 "hello world" 的消息。
订阅 MQTT 消息
上述的连接示例代码中,已经定义了当连接成功后订阅主题的回调函数 on_connect
和收到 MQTT 消息的回调函数 on_message
。当接收到订阅的主题中的消息时,终端输出包含主题和消息内容的信息。
另外,可以在订阅的 MQTT 主题中添加通配符来实现对多个主题的订阅。如下面的代码订阅了以 my/topic/
开头的所有主题:
topic = "my/topic/#"
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe(topic)
def on_message(client, userdata, message):
print(message.topic+" "+str(message.payload))
其他使用注意事项
在使用 MQTT 时,需注意以下问题:
- MQTT 服务器的地址、端口和主题的设置需符合实际情况。
- 为客户端设置唯一的客户端 ID。
- 消息内容需转换为字符串,才能正确地发送。
- 连接后需保持活动状态,才能保证接收MQTT服务器发送的消息。
- 发布/订阅操作可基于 QoS(服务质量)这一概念,支持在应用层实现消息传输质量的约束。
示例1:使用paho-mqtt连接EMQ X MQTT Broker并发送消息
示例代码如下:
import paho.mqtt.client as mqtt
# 连接参数
host = "localhost"
port = 1883
username = "test"
password = "passwd"
topic = "test_topic"
client = mqtt.Client()
client.username_pw_set(username, password)
client.connect(host, port, 60)
# 发送消息
client.publish(topic, "Hello World!")
client.disconnect()
示例中连接了 EMQ X MQTT Broker,并向 test_topic
发布了一条内容为 "Hello World!" 的消息。
示例2:使用paho-mqtt订阅EMQ X MQTT Broker的消息
示例代码如下:
import paho.mqtt.client as mqtt
# 连接参数
host = "localhost"
port = 1883
username = "test"
password = "passwd"
topic = "test_topic"
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe(topic)
def on_message(client, userdata, message):
print(message.topic+" "+str(message.payload))
client = mqtt.Client()
client.username_pw_set(username, password)
client.on_connect = on_connect
client.on_message = on_message
client.connect(host, port, 60)
client.loop_forever()
示例中连接了 EMQ X MQTT Broker,并订阅了 test_topic
主题的消息。当有消息到达时,终端将打印包含主题和消息内容的信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在 Python 中使用 MQTT的方法 - Python技术站