在Python应用中使用 MQTT

MQTT 是物联网产品中广泛应用的通讯协议,适合于在低功耗的设备上运行。在很多编程语言中都有实现库,使用起来非常方便。本文演示如何在 Python 中使用。

搭建 MQTT Broker

在 MQTT 的架构中,消息是通过 MQTT Broker 进行传输的。消息的生产者和消费者都连接到 MQTT Broker。

在本例中,为了简化 MQTT Broker 的安装和配置,我们直接使用 Eclipse Mosquitto 官方提供的 Docker 镜像来运行。

执行以下命令启动 MQTT Broker:

1
docker run -d -p 1883:1883 -p 9001:9001 --name mqtt-server eclipse-mosquitto

如果你还不熟悉 Docker 的基本操作,可以参考 Docker课堂实验手册(一) 系列文章。

建立实验项目

本实验简单的模拟物联网中的两个设备: 灯和控制器,灯接收由控制器发出的开、关命令。

首先,安装 paho-mqtt 客户的库

1
pip install paho-mqtt

然后在建立模拟灯的程序,新建名为: light.py 的文件,加入以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import paho.mqtt.client as mqtt
broker="localhost"
port=1883
timelive=60

def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("/action")
def on_message(client, userdata, msg):
print(msg.payload.decode())

client = mqtt.Client()
client.connect(broker,port,timelive)
client.on_connect = on_connect
client.on_message = on_message

client.loop_forever()

最后,新建名为: control.py 的控制器程序文件,并加入如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import paho.mqtt.client as paho
import time
import random

broker="localhost"
port=1883

client= paho.Client("admin")
client.connect(broker,port)
for i in range(5):
d=random.randint(1,2)
message="turn on/off: " + str(d)
time.sleep(d)
ret= client.publish("/action", message)
print("publish message to client: ", message)

print("Completed...")

运行程序

先运行设备程序,打开一个命令行窗口,运行:

1
python light.py

再打开另外一个命令行窗口,运行:

1
python control.py

然后就可以看到控制器随机的产生开(1),关(2)的命令发送给设备。

本文标题:在Python应用中使用 MQTT

文章作者:Morning Star

发布时间:2019年11月16日 - 08:11

最后更新:2021年04月16日 - 15:04

原始链接:https://www.mls-tech.info/python/python-mqtt-client/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。