Python快速上手paho-mqtt物联网

本文提供了一份Python MQTT客户端的完整代码,包括连接、订阅、发布消息及错误处理等功能,并指出可以与阿里云物联网平台的aliyun-iot-linkkit结合使用,以实现更便捷的物联网设备通信。此外,文章鼓励读者结合实际操作来学习和交流。
摘要由CSDN通过智能技术生成


前言

在我另一篇[Python快速实现MQTT双向订阅发布](https://blog.csdn.net/m0_47958289/article/details/115004791) ,已经详细介绍了相关概念,环境的搭建,代码方面不够完善,下面是完善后的代码。后面还会更新阿里云aliyun-iot-linkkit,这是阿里云物联网官方封装paho-mqtt后的,结合阿里云物联网平台使用更加方便,同时也可以将阿里云aliyun-iot-linkkit相关属性解析后,继续使用paho-mqtt。

提示:以下是本篇文章正文内容,下面案例可供参考

一、示例代码

如果代码看不懂,建议结合Python paho-mqtt 模块使用,解析和实战相结合。学习,也欢迎留言私信交流

import json
import sys


# 引入mqtt包
import paho.mqtt.client as mqtt
# 使用独立线程运行
from threading import Thread


# 建立mqtt连接
def on_connect(client, userdata, flag, rc):
    if rc == 0:
        # 连接成功
        print("Connection successful")
    elif rc == 1:
        # 协议版本错误
        print("Protocol version error")
    elif rc == 2:
        # 无效的客户端标识
        print("Invalid client identity")
    elif rc == 3:
        # 服务器无法使用
        print("server unavailable")
    elif rc == 4:
        # 错误的用户名或密码
        print("Wrong user name or password")
    elif rc == 5:
        # 未经授权
        print("unaccredited")
    print("Connect with the result code " + str(rc))
    # 订阅频道
    # client.subscribe('31765425213673472', qos=2)


# 当与代理断开连接时调用
def on_disconnect(client, userdata, rc):
    #  rc == 0回调被调用以响应disconnect()调用
    # 如果以任何其他值断开连接是意外的,例如可能出现网络错误。
    if rc != 0:
        print("Unexpected disconnection %s" % rc)


# 当收到关于客户订阅的主题的消息时调用。
def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))
    json_msg = json.loads(msg.payload.decode('utf-8'))
    # 加入个人逻辑
    pass


# 当使用使用publish()发送的消息已经传输到代理时被调用。
def on_publish(client, obj, mid):
    print("on_Publish, mid: " + str(mid))


# 当代理响应订阅请求时被调用
def on_subscribe(client, userdata, mid, granted_qos):
    print("on_Subscribed: " + str(mid) + " " + str(granted_qos))


# 当代理响应取消订阅请求时调用。
def on_unsubscribe(client, userdata, mid):
    print("on_unsubscribe, mid: " + str(mid))


# 当客户端有日志信息时调用
def on_log(client, obj, level, string):
    print("on_Log:" + string)


# mqtt订阅启动函数
def mqtt_subscribe():
    global client
    client.loop_forever()


# mqtt发布启动函数
def mqtt_publish(sensor_data, topic='xxxxxxxx', qos=2):
    global client
    try:
        client.publish(topic=topic, payload=sensor_data, qos=qos)
    except KeyboardInterrupt:
        print("EXIT")
        # 这是网络循环的阻塞形式,直到客户端调用disconnect()时才会返回。它会自动处理重新连接。
        client.disconnect()
        sys.exit(0)


client = mqtt.Client()


# 启动函数
def mqtt_run():
    # 账号密码验证放到最前面
    client.username_pw_set('user', 'user')
    # client = mqtt.Client()
    # 建立mqtt连接
    client.on_connect = on_connect
    client.on_subscribe = on_subscribe
    client.on_message = on_message
    # 当与代理断开连接时调用
    client.on_disconnect = on_disconnect
    client.on_log = on_log

    # 绑定 MQTT 服务器地址
    broker_ip = ''
    # MQTT服务器的端口号
    # client.connect(host=broker_ip, port=1883, keepalive=6000)
    client.connect(host=broker_ip, port=1883)
    client.reconnect_delay_set(min_delay=1, max_delay=2000)
    client.subscribe('xxxxxxxx', qos=0)
    # 创建线程去持续接收订阅信息
    subscribe_thread = Thread(target=mqtt_subscribe)
    subscribe_thread.start()


if __name__ == "__main__":
    mqtt_run()

总结

欢迎各位交流,如有错误,欢迎指正,Figting!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值