使用 Paho Python 连接到部署
本文主要介绍如何在 Python 项目中使用 paho-mqtt 客户端库 ,实现客户端与 MQTT 服务器的连接、订阅、取消订阅、收发消息等功能。
paho-mqtt 是目前 Python 中使用较多的 MQTT 客户端库, 它在 Python 2.7.9+ 或 3.6+ 上为客户端类提供了对 MQTT v5.0,v3.1 和 v3.1.1 的支持。它还提供了一些帮助程序功能,使将消息发布到 MQTT 服务器变得非常简单。
前置准备
获得 MQTT 服务器
-
使用 EMQX 提供的 免费公共 MQTT 服务器 (仅支持单向认证),该服务基于 EMQX 的 全托管的 MQTT 消息云服务 创建。服务器连接信息如下:
- 连接地址: broker.emqx.io
- TCP Port: 1883
- SSL/TLS Port: 8883
- WebSocket 端口: 8083
- WebSocket TLS/SSL 端口: 8084
-
您也可以自己 创建部署 ,在部署概览下可以查看到连接相关的信息,请确保部署状态为运行中。使用 TCP 端口或 SSL/TLS 端口 测试连接到 MQTT 服务器。如果您是自己创建部署,请设置 认证鉴权 ,在部署控制台
认证鉴权
>认证
中设置用户名和密码,用于连接验证。
检查 Python 版本
本项目使用 Python 3.8 进行开发测试,可用如下命令确认 Python 的版本。
安装 MQTT 客户端
- Pip 是 Python 包管理工具,该工具提供了对 Python 包的查找、下载、安装、卸载的功能,使用以下命令安装 paho-mqtt。
- 导入 Paho MQTT 客户端
通过 TCP 端口连接
请在控制台的部署概览找到相关的地址以及端口信息,需要注意如果是基础版,端口不是 1883 端口,请确认好端口
-
设置 MQTT Broker 连接地址,端口以及 topic,同时我们调用 Python
random.randint
函数随机生成 MQTT 客户端 id。
-
编写连接回调函数
on_connect
,该函数将在客户端连接后被调用,在该函数中可以依据rc
来判断客户端是否连接成功。
通过 SSL/TLS 端口连接
请在控制台的部署概览找到相关的地址以及端口信息,需要注意如果是基础版,端口不是 8883 端口,请确认好端口
本节介绍了如何通过 SSL/TLS 单向认证方式连接到部署。若您需使用双向认证方式,可以参考 这里 。
-
设置 MQTT Broker 连接地址,端口以及 topic,同时我们调用 Python
random.randint
函数随机生成 MQTT 客户端 id。
- 设置 CA 证书,如果您使用 Serverless 或者基础版部署,您可以在部署概览中下载 CA 证书文件。如果您使用专业版部署,请参考 专业版 TLS/SSL 配置 进行证书配置。
-
编写连接回调函数
on_connect
,该函数将在客户端连接后被调用,在该函数中可以依据rc
来判断客户端是否连接成功。
订阅和发布
本节主要介绍了如何在已连接到部署的情况下订阅主题并发布消息。
订阅主题
- 设置将要订阅的主题及对应 QoS 等级 。
-
编写消息回调函数
on_message
,该函数将在客户端从 MQTT Broker 收到消息后被调用,在该函数中我们将打印出订阅的 topic 名称以及接收到的消息内容。
取消订阅
通过以下代码取消订阅,此时应指定取消订阅的主题。
发布消息
- 发布消息时需要告知 MQTT Broker 目标主题及消息内容。
-
首先定义一个 while 循环语句,在循环中我们将设置每秒调用 MQTT 客户端
publish
函数向python/mqtt
主题发送消息。
接收消息
通过以下代码指定客户端对消息事件进行监听,并在收到消息后执行回调函数,将接收到的消息及其主题打印到控制台。
断开连接
如客户端希望主动断开连接,可以通过如下代码实现:
以上部分仅列出了一些关键代码,项目完整代码请见 这里 ,您可以进行下载并体验。
完整代码
消息发布代码
消息订阅代码