本示例需要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 clonePaho的倉庫
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在本地中實現了通信。
審核編輯:劉清
-
物聯網
+關注
關注
2913文章
44923瀏覽量
376991 -
python
+關注
關注
56文章
4807瀏覽量
85037 -
Raspberry Pi
+關注
關注
2文章
559瀏覽量
22342 -
樹莓派
+關注
關注
117文章
1710瀏覽量
105874 -
MQTT
+關注
關注
5文章
653瀏覽量
22691
原文標題:Raspberry Pi 樹莓派使用Python實現 MQTT通信(Paho庫)
文章出處:【微信號:凌順實驗室,微信公眾號:凌順實驗室】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論