MQTT 报文结构与 Python 读取方法详解

MQTT 报文结构与 Python 读取方法详解

引言

在物联网(IoT)领域,MQTT(Message Queuing Telemetry Transport)协议因其轻量级和高效性而备受青睐。本文将详细解析 MQTT 报文的组成结构,并介绍如何使用 Python 读取 MQTT 报文内容。通过具体示例,帮助读者深入理解 MQTT 的工作原理及其在实际项目中的应用。
在这里插入图片描述

MQTT 报文结构

MQTT 报文由三部分组成:固定头部(Fixed Header)可变头部(Variable Header)有效载荷(Payload)。这种紧凑的设计使其非常适合低带宽、高延迟的网络环境。

1. 固定头部(Fixed Header)

  • 长度:固定头部始终存在,长度为 2 到 4 字节。
  • 组成
    • 控制字段(Control Field):1 字节。前 4 位表示消息类型(如 CONNECT0x10PUBLISH0x30),后 4 位为控制标志(如 DUP、QoS、RETAIN)。
    • 剩余长度(Remaining Length):1-4 字节。使用 7 位表示长度,第 8 位为延续标志,用于指示是否需要更多字节。
  • 特点:设计紧凑高效,适合资源受限的设备。

2. 可变头部(Variable Header)

  • 存在性:并非所有消息类型都有可变头部,内容因消息类型而异。
  • 示例
    • CONNECT 消息:包括协议名(如 “MQTT”)、协议版本、连接标志和保持活动时间。
    • PUBLISH 消息:包括主题名和包标识符(适用于 QoS 1 或 QoS 2)。

3. 有效载荷(Payload)

  • 存在性:并非所有消息类型都有有效载荷,内容为二进制数据,格式由应用定义。
  • 示例
    • CONNECT 消息:包含客户端 ID。
    • PUBLISH 消息:可以是传感器数据、文本消息等。

Python 读取 MQTT 报文

Python 可以通过 Paho MQTT 客户端库轻松连接 MQTT 代理,订阅主题并读取消息内容。

1. 安装 Paho MQTT 库

在终端运行以下命令安装:

pip install paho-mqtt

2. 连接到 MQTT 代理

可以使用公共 MQTT 代理,例如 broker.emqx.io,默认端口为 1883(TCP)。

3. 订阅主题和处理消息

  • 使用 client.subscribe("topic_name") 订阅指定主题。
  • 通过 on_message 回调函数处理接收到的消息,访问 msg.topic(主题)和 msg.payload.decode()(解码后的消息内容)。

具体示例

以下是一个简单的 Python 脚本,用于连接 MQTT 代理、订阅主题并打印接收到的消息:

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("已连接,结果代码:" + str(rc))
    client.subscribe("python/mqtt/test")

def on_message(client, userdata, msg):
    print(f"收到消息:'{msg.payload.decode()}',来自主题 '{msg.topic}',QoS {msg.qos}")

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.emqx.io", 1883, 60)
client.loop_forever()

运行此脚本后,它将连接到 broker.emqx.io,订阅主题 "python/mqtt/test",并在接收到消息时打印主题和内容。

最新版本的 Python 写法

在 Paho MQTT 的最新版本中,推荐使用 MQTT 5.0 支持的 API,创建客户端时添加 callback_api_version 参数,以确保未来兼容性:

client = mqtt.Client(callback_api_version=mqtt.CallbackAPIVersion.VERSION2)

只需将上述示例中的 client = mqtt.Client() 替换为这行代码即可支持 MQTT 5.0 的新特性。

结论

本文详细介绍了 MQTT 报文的结构及其在 Python 中的读取方法。MQTT 协议凭借其轻量级和高效性,在物联网领域具有广泛的应用前景。结合 Python 和 Paho MQTT 库,开发者可以快速实现 MQTT 客户端的功能。希望本文能为读者在实际项目中应用 MQTT 提供实用指导。

参考资料

  • Steve’s Internet Guide: MQTT Protocol Messages Overview
  • EMQ: How to Use MQTT in Python
  • MQTT V3.1.1 Specification PDF
  • Paho MQTT Migration Guide
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值