Python MQTT教程:连接、发布和订阅

Python MQTT教程:连接、发布和订阅缩略图
本文目录
  1. 1. 项目初始化
  2. 2. 选择MQTT客户端库
  3. 3. Python MQTT 使用
  4. 4. 总结

如何在 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。

技术术语(共 7 个)—— 点击展开
MQTT轻量级物联网消息传输协议,基于发布/订阅模式,适合低带宽不稳定网络
BrokerMQTT 代理服务器,负责接收发布消息并分发给订阅者
EMQX开源 MQTT Broker,常用于物联网海量连接与集群场景
TopicMQTT 主题,消息路由的层级字符串,支持通配符 + 与 #
订阅客户端向 Broker 注册感兴趣的主题以接收消息
发布客户端向指定主题发送消息
WebSocket浏览器与 Broker 通过 ws/wss 传输 MQTT 的通道
来源/工具信息 —— 点击展开
来源 MQTT中文网(mqtt.cn) —— 国内领先的MQTT通信协议技术社区 分类 MQTT 编程 / 学习 字数 1999 字 · 阅读约 5 分钟 更新 2024-04-15 永久链接 https://www.mqtt.cn/585.html
推荐工具:MQTT调试助手 微信小程序
MQTT中文网官方推出的MQTT调试工具,支持 MQTT 3.1.1/5.0 实时连接调试、主题订阅、消息收发监控与报文分析。 无需安装,微信搜索「MQTT调试助手」即可使用。 电脑端入口:https://www.mqtt.cn/mqtttool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 mqtt.cn
📝 作者声明
本文由 MQTT中文网技术团队 原创撰写,内容基于实际项目案例与技术文档,力求为读者提供准确、实用的参考信息。
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

工程师会员

把这篇文章变成可执行的调试资料

开通后可使用高级报文解析、资料包下载、代码示例、工程案例和优先技术支持,适合真实项目交付。

高级工具不限次
资料包与代码包
完整工程案例库
优先技术支持入口