电子说
本示例需要MQTT服务端的,所以必须先安装部署 MQTT 服务端
这次的例子,主要讲述如何基于PYTHON的 MQTT 客户端的使用方法
而在本示例中,将会使用paho-mqtt这个开源的Python库。
Paho 项目的创建旨在为机器对机器 (M2M) 和物联网 (IoT) 提供开放和标准消息传递协议的可扩展的开源的应用程序实现。
Paho 官网 https://www.eclipse.org/paho/
1,安装Paho
最新的稳定版本可在Python软件包索引(PyPi)中找到,可以用以下方式安装
如果是python2.7,请在命令行输入:
pip install paho-mqtt
或者使用的是python3,请在命令行输入:
pip3 install paho-mqtt
又或者是使用virtualenv虚拟环境中安装
virtualenv paho-mqtt source paho-mqtt/bin/activate pip install paho-mqtt
通过git安装
要获得完整的代码,包括例子和测试,你可以git clone Paho的仓库
git clone https://github.com/eclipse/paho.mqtt.python
一旦你有了代码,也可以从仓库中安装它。
cd paho.mqtt.python python setup.py install
2 订阅主题(subscription topic)
首先我们创建一个用于订阅主题的python程序文件,例如命名为:paho-subscription.py
该程序主要和服务器建立连接,并且订阅指定的主题,例如是:"/lingshun/mqtt_message"
当服务器发布/lingshun/mqtt_message 主题的信息时,本程序就会收到并显示该信息内容。
完整代码如下:
# 加载库 import paho.mqtt.client as mqtt broker = "127.0.0.1" # 使用IP地址需要在服务器端已经部署MQTT服务端,并设置允许远程访问 port = 1883 # MQTT 默认端口 keepalive = 60 # 连接保持时间 topic = "/lingshun/mqtt_message" # 需要订阅的主题 # 当客户端收到服务器的CONNACK响应时的回调 def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) # 在on_connect()中订阅意味着,如果我们失去连接并重新连接,那么订阅将被更新。 client.subscribe(topic) # 当从服务器收到PUBLISH消息时的回调。 def on_message(client, userdata, msg): print(msg.topic+" "+str(msg.payload)) client = mqtt.Client() # 创建客户 client.on_connect = on_connect # 当 发生连接时 回调的函数 client.on_message = on_message # 当 收到信息时 回调的函数 client.connect(broker, port, keepalive) # 建立连接 # 阻断调用,处理网络流量,分配回调并处理重新连接的问题。 # 其他loop*()函数可以提供一个线程接口和一个手动接口。 client.loop_forever()
命令行运行该程序:
python3 paho-subscription.py
此时,程序正在等待着主题 /lingshun/mqtt_message 发布新信息。
3 发布主题(publish topic)
现在,我们开始写发布主题的程序,新建一个Python程序,例如文件名为:paho-publish.py
该程序,主要演示如何发布指定主题的信息。大概思路是建立mqtt连接并定义好主题 ,然后每隔1秒发送一次信息,不断循环
完整代码如下:
# 加载库 import paho.mqtt.client as mqtt import time broker = "127.0.0.1" # 使用IP地址需要在服务器端已经部署MQTT服务端,并设置允许远程访问 port = 1883 # MQTT 默认端口 keepalive = 60 # 连接保持时间 topic = "/lingshun/mqtt_message" # 需要发布的主题 client = mqtt.Client() client.connect(broker, port) send_count = 0 while 1: msg = f"This is the {send_count} message." 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}") send_count += 1 time.sleep(1)
在另一个终端(Terminal)中运行发布主题的程序paho-publish.py
在 命令行输入:
python3 paho-publish.py
实现本地MQTT通信
对比两个终端(Terminal)查看,可以看到mqtt在本地中实现了通信。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !