本示例需要MQTT服務(wù)端的,所以必須先安裝部署 MQTT 服務(wù)端
這次的例子,主要講述如何基于PYTHON的 MQTT 客戶端的使用方法
而在本示例中,將會使用paho-mqtt這個開源的Python庫。
Paho 項目的創(chuàng)建旨在為機器對機器 (M2M) 和物聯(lián)網(wǎng) (IoT) 提供開放和標(biāo)準(zhǔn)消息傳遞協(xié)議的可擴展的開源的應(yīng)用程序?qū)崿F(xiàn)。
Paho 官網(wǎng)https://www.eclipse.org/paho/
1,安裝Paho
最新的穩(wěn)定版本可在Python軟件包索引(PyPi)中找到,可以用以下方式安裝
如果是python2.7,請在命令行輸入:
pip install paho-mqtt
或者使用的是python3,請在命令行輸入:
pip3 install paho-mqtt
又或者是使用virtualenv虛擬環(huán)境中安裝
virtualenv paho-mqtt source paho-mqtt/bin/activate pip install paho-mqtt
通過git安裝
要獲得完整的代碼,包括例子和測試,你可以git clonePaho的倉庫
git clone https://github.com/eclipse/paho.mqtt.python
一旦你有了代碼,也可以從倉庫中安裝它。
cd paho.mqtt.python python setup.py install
2 訂閱主題(subscription topic)
首先我們創(chuàng)建一個用于訂閱主題的python程序文件,例如命名為:paho-subscription.py
該程序主要和服務(wù)器建立連接,并且訂閱指定的主題,例如是:"/lingshun/mqtt_message"
當(dāng)服務(wù)器發(fā)布/lingshun/mqtt_message主題的信息時,本程序就會收到并顯示該信息內(nèi)容。
完整代碼如下:
# 加載庫 import paho.mqtt.client as mqtt broker = "127.0.0.1" # 使用IP地址需要在服務(wù)器端已經(jīng)部署MQTT服務(wù)端,并設(shè)置允許遠(yuǎn)程訪問 port = 1883 # MQTT 默認(rèn)端口 keepalive = 60 # 連接保持時間 topic = "/lingshun/mqtt_message" # 需要訂閱的主題 # 當(dāng)客戶端收到服務(wù)器的CONNACK響應(yīng)時的回調(diào) def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) # 在on_connect()中訂閱意味著,如果我們失去連接并重新連接,那么訂閱將被更新。 client.subscribe(topic) # 當(dāng)從服務(wù)器收到PUBLISH消息時的回調(diào)。 def on_message(client, userdata, msg): print(msg.topic+" "+str(msg.payload)) client = mqtt.Client() # 創(chuàng)建客戶 client.on_connect = on_connect # 當(dāng) 發(fā)生連接時 回調(diào)的函數(shù) client.on_message = on_message # 當(dāng) 收到信息時 回調(diào)的函數(shù) client.connect(broker, port, keepalive) # 建立連接 # 阻斷調(diào)用,處理網(wǎng)絡(luò)流量,分配回調(diào)并處理重新連接的問題。 # 其他loop*()函數(shù)可以提供一個線程接口和一個手動接口。 client.loop_forever()
命令行運行該程序:
python3 paho-subscription.py
此時,程序正在等待著主題 /lingshun/mqtt_message發(fā)布新信息。
3 發(fā)布主題(publish topic)
現(xiàn)在,我們開始寫發(fā)布主題的程序,新建一個Python程序,例如文件名為:paho-publish.py
該程序,主要演示如何發(fā)布指定主題的信息。大概思路是建立mqtt連接并定義好主題 ,然后每隔1秒發(fā)送一次信息,不斷循環(huán)
完整代碼如下:
# 加載庫 import paho.mqtt.client as mqtt import time broker = "127.0.0.1" # 使用IP地址需要在服務(wù)器端已經(jīng)部署MQTT服務(wù)端,并設(shè)置允許遠(yuǎn)程訪問 port = 1883 # MQTT 默認(rèn)端口 keepalive = 60 # 連接保持時間 topic = "/lingshun/mqtt_message" # 需要發(fā)布的主題 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)中運行發(fā)布主題的程序paho-publish.py
在 命令行輸入:
python3 paho-publish.py
實現(xiàn)本地MQTT通信
對比兩個終端(Terminal)查看,可以看到mqtt在本地中實現(xiàn)了通信。
審核編輯:劉清
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2909文章
44634瀏覽量
373314 -
python
+關(guān)注
關(guān)注
56文章
4797瀏覽量
84682 -
Raspberry Pi
+關(guān)注
關(guān)注
2文章
559瀏覽量
22225 -
樹莓派
+關(guān)注
關(guān)注
116文章
1707瀏覽量
105629 -
MQTT
+關(guān)注
關(guān)注
5文章
651瀏覽量
22503
原文標(biāo)題:Raspberry Pi 樹莓派使用Python實現(xiàn) MQTT通信(Paho庫)
文章出處:【微信號:凌順實驗室,微信公眾號:凌順實驗室】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論