浅谈Python之Mqtt

一、基本介绍

在Python中使用MQTT,通常会使用paho-mqtt这个库,它是一个广泛使用的MQTT客户端库,支持MQTT v3.1和v3.1.1协议。

二、基本步骤

安装paho-mqtt库

使用pip安装paho-mqtt库:

bash 复制代码
pip3 install paho-mqtt

创建MQTT连接

设置MQTT代理(Broker)的地址、端口和主题(topic),并生成一个随机的客户端ID。

python 复制代码
from paho.mqtt import client as mqtt_client
import random

broker = 'broker.emqx.io'  # MQTT代理地址
port = 1883                # MQTT代理端口
topic = "/python/mqtt"     # 订阅的主题
client_id = f'python-mqtt-{random.randint(0, 1000)}'  # 客户端ID

编写连接回调函数

当客户端成功连接到MQTT代理时,会调用on_connect回调函数。

python 复制代码
def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("Connected to MQTT Broker!")
    else:
        print("Failed to connect, return code %d\n", rc)

创建客户端并连接

创建一个MQTT客户端对象,并设置连接回调函数,然后连接到MQTT代理。

python 复制代码
client = mqtt_client.Client(client_id)
client.on_connect = on_connect
client.connect(broker, port)

发布消息

使用publish方法向指定的主题发布消息。

python 复制代码
def publish(client):
    msg_count = 0
    while True:
        msg = f"messages: {msg_count}"
        result = client.publish(topic, msg)
        if result[0] == 0:
            print(f"Send `{msg}` to topic `{topic}`")
        else:
            print(f"Failed to send message to topic {topic}")
        msg_count += 1
        time.sleep(1)

订阅消息

设置on_message回调函数来处理接收到的消息,并使用subscribe方法订阅主题。

python 复制代码
def on_message(client, userdata, msg):
    print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic")

def subscribe(client):
    client.subscribe(topic)
    client.on_message = on_message

启动网络循环

使用loop_foreverloop_start方法启动网络循环,以处理网络事件。

python 复制代码
client.loop_forever()  # 或者使用 client.loop_start() 在不同的线程中运行

三、完整代码示例

以下是一个完整的代码示例,展示了如何连接MQTT代理、发布消息和订阅消息。

python 复制代码
# python 3.6
import random
import time
from paho.mqtt import client as mqtt_client

broker = 'broker.emqx.io'
port = 1883
topic = "/python/mqtt"
client_id = f'python-mqtt-{random.randint(0, 1000)}'

def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("Connected to MQTT Broker!")
    else:
        print("Failed to connect, return code %d\n", rc)

def on_message(client, userdata, msg):
    print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic")

def publish(client):
    msg_count = 0
    while True:
        msg = f"messages: {msg_count}"
        result = client.publish(topic, msg)
        if result[0] == 0:
            print(f"Send `{msg}` to topic `{topic}`")
        else:
            print(f"Failed to send message to topic {topic}")
        msg_count += 1
        time.sleep(1)

def subscribe(client):
    client.subscribe(topic)
    client.on_message = on_message

def run():
    client = mqtt_client.Client(client_id)
    client.on_connect = on_connect
    client.on_message = on_message
    client.connect(broker, port)
    client.loop_start()
    publish(client)

if __name__ == '__main__':
    run()
相关推荐
我的xiaodoujiao20 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 44--将自动化测试结果自动推送至钉钉工作群聊
前端·python·测试工具·ui·pytest
沈浩(种子思维作者)20 小时前
铁的居里点(770度就不被磁铁吸了)道理是什么?能不能精确计算出来?
人工智能·python·flask·量子计算
yufuu9820 小时前
使用Scikit-learn进行机器学习模型评估
jvm·数据库·python
f狐0狸x20 小时前
【C++修炼之路】C++ list容器基本用法详解
开发语言·c++·list
zhengfei61120 小时前
AutoPentestX – Linux 自动化渗透测试和漏洞报告工具
linux·运维·自动化
我材不敲代码20 小时前
在Linux系统上安装MySQL
linux·运维·服务器
坚持就完事了20 小时前
Java的OOP
java·开发语言
计算机毕业编程指导师20 小时前
大数据可视化毕设:Hadoop+Spark交通分析系统从零到上线 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
大数据·hadoop·python·计算机·spark·毕业设计·城市交通
jllllyuz20 小时前
基于MATLAB的锂电池物理对象建模实现
开发语言·matlab
MyBFuture20 小时前
C#数组详解:一维二维与交错数组
开发语言·windows·c#·visual studio·vision pro