如何在 Python 中使用 MQTT
Python是一种广泛使用的解释型、高级编程、通用型编程语言。Python的设计哲学强调代码的可读性和简洁的语法,使得开发者能够用更少的代码表达想法,不管是小型还是大型程序。本文将介绍如何在Python项目中使用paho-mqtt客户端库来实现与MQTT服务器的连接、订阅、取消订阅、消息发布和接收等功能。
项目初始化
首先,确保您的Python版本为3.6或更高版本。
python3 --version
选择MQTT客户端库
在Python中,paho-mqtt是一种常用的MQTT客户端库,它提供了对MQTT v3.1和v3.1.1的支持。您可以使用Pip来安装paho-mqtt。
pip3 install -i https://pypi.doubanio.com/simple paho-mqtt
Python MQTT 使用
连接MQTT服务器
本文将使用EMQX提供的免费公共MQTT服务器,服务器接入信息如下:
- Broker: iot.mqtt.cn
- TCP Port: 1883
- Websocket Port: 8083
首先,导入paho-mqtt客户端库:
from paho.mqtt import client as mqtt_client
然后,设置MQTT Broker连接参数:
broker = 'iot.mqtt.cn'
port = 1883
topic = "/python/mqtt"
client_id = f'python-mqtt-{random.randint(0, 1000)}'
接下来,编写连接MQTT Broker的函数:
def connect_mqtt():
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to MQTT Broker!")
else:
print(f"Failed to connect, return code {rc}\n")
client = mqtt_client.Client(client_id)
client.on_connect = on_connect
client.connect(broker, port)
return client
发布消息
您可以使用以下代码发布消息到指定主题:
def publish(client):
msg_count = 0
while True:
time.sleep(1)
msg = f"messages: {msg_count}"
result = client.publish(topic, msg)
status = result[0]
if status == 0:
print(f"Send `{msg}` to topic `{topic}`")
else:
print(f"Failed to send message to topic {topic}")
msg_count += 1
订阅消息
编写消息回调函数on_message
,在客户端从MQTT Broker收到消息后将被调用:
def subscribe(client: mqtt_client):
def on_message(client, userdata, msg):
print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic")
client.subscribe(topic)
client.on_message = on_message
完整代码
发布消息的代码:
# python 3.6
import random
import time
from paho.mqtt import client as mqtt_client
# ...(前面的代码)
def run():
client = connect_mqtt()
client.loop_start()
publish(client)
if __name__ == '__main__':
run()
订阅消息的代码:
# python3.6
import random
from paho.mqtt import client as mqtt_client
# ...(前面的代码)
def run():
client = connect_mqtt()
subscribe(client)
client.loop_forever()
if __name__ == '__main__':
run()
测试
发布消息:运行发布消息的代码,您将看到客户端成功连接并成功发布消息。
python3 pub.py
订阅消息:运行订阅消息的代码,您将看到客户端成功连接并成功接收到发布的消息。
python3 sub.py
总结
通过paho-mqtt客户端库,我们可以轻松地在Python项目中实现与MQTT服务器的连接、消息发布和订阅功能。Python在物联网领域的应用越来越广泛,其简洁的语法和高可读性使其成为设备侧业务逻辑实现的理想选择。希望本文能帮助您更好地理解如何在Python中使用MQTT。