2025 最新 Python MQTT 終極攻略 | 解鎖 IOT 物聯網通信
在物聯網(IoT)快速發展的世界中,Python MQTT(Message Queuing Telemetry Transport)已成為最輕量級且高效的消息傳遞協議之一。無論你是構建智能家居設備、工業自動化系統還是即時數據管道,它都是設備間無縫通信的首選解決方案。我們將帶您從零開始,深入學習如何使用 Python 與最受歡迎的物聯網通信協議之一,建立強大的應用程式。

內容
什麼是 MQTT?
這種通信協議的設計目標是提供快速且輕量的訊息傳遞能力,特別適用於需要高效資料交換的環境。與傳統的請求-回應模型不同,它採用了發佈-訂閱(Publish-Subscribe)的架構,允許設備以非同步的方式傳送和接收訊息,這使其非常適合即時資料傳輸需求。
關鍵特性:
- 輕量級:最小的數據包開銷,適合低功耗設備。
- Broker(伺服器):負責管理訊息的分發(例如 Mosquitto)。
- Topic(主題): 用於組織和傳遞訊息的邏輯通道,類似於資料的分類標籤。
- 發佈-訂閱模型:解耦發布者(Publisher)和訂閱者(Subscriber)。
- 服務質量(QoS):確保消息在不同可靠性級別下的傳遞。
- 保留消息:為新的訂閱者存儲主題上的最後一條消息。
- 遺囑消息(LWT):在客戶端意外斷開連接時通知訂閱者。
設定 Python MQTT 開發環境
在開始撰寫程式碼之前,我們需要安裝必要的工具。我們將使用 Python 搭配專門的函式庫來處理所有通信相關的任務,這不僅簡化了開發過程,還提高了效率。
步驟 1:安裝必要的 Python 套件
要在 Python 中使用此通信協議,我們會使用 paho-mqtt
這個函式庫。它提供了簡單易用的 API,能輕鬆與 Broker 進行連接、傳送訊息及訂閱主題。
在終端機輸入以下指令來安裝:
pip install paho-mqtt
如果您使用的是 Python 3,可以執行:
pip3 install paho-mqtt
步驟 2:確認安裝是否成功
安裝完成後,使用以下指令確認套件已正確安裝:
pip list
預期的輸出結果:
Package Version
---------- -------
paho-mqtt 1.6.1
pip 22.3.1
setuptools 65.5.0
這表示 paho-mqtt
已成功安裝並可供使用。
連接到 Broker
我們將使用 Mosquitto 提供的免費 MQTT 公開測試伺服器:
- 密碼:
readwrite
- 伺服器(Broker):
test.mosquitto.org
- 連接埠(Port):
1884
- 使用者名稱:
rw
建立訂閱者(Subscriber)
接下來我們將撰寫一個簡單的訂閱者程式,來接收來自特定主題的訊息。
訂閱者程式碼範例 :
import paho.mqtt.client as mqtt
# Callback when connected to the broker
def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc))
client.subscribe("iot_topic/#") # Subscribe to the topic
# Callback when a message is received
def on_message(client, userdata, msg):
print(f"Message from {msg.topic}: {msg.payload.decode('utf-8')}")
# Initialize the client
client = mqtt.Client()
client.username_pw_set("rw", "readwrite")
# Assign callbacks
client.on_connect = on_connect
client.on_message = on_message
# Connect to the broker
client.connect("test.mosquitto.org", 1884, 60)
client.loop_forever()
程式碼說明 :
- on_connect(): 當客戶端成功連接到 Broker 時會觸發,並自動訂閱指定主題。
- on_message(): 當接收到訊息時會被呼叫,並顯示訊息內容。
- loop_forever(): 使客戶端持續運行,並自動處理重新連接及訊息接收。
建立發佈者(Publisher)
現在,我們來撰寫一個簡單的發佈者程式,將訊息傳送到剛剛訂閱的主題。
發佈者程式碼範例 :
import paho.mqtt.client as mqtt
import json
# Message to be sent
msg = "Hello, IoT World!"
# Initialize the client
client = mqtt.Client()
client.username_pw_set("rw", "readwrite")
# Connect to the server
client.connect("test.mosquitto.org", 1884, 60)
# Publish the message
client.publish("iot_topic", json.dumps(msg))
最後的輸出結果(訂閱者端)
在啟動訂閱者程式後,執行上述發佈者程式,您應該會在訂閱者端看到以下輸出:
Connected with result code 0
Message from iot_topic: "Hello, IoT World!"
進階功能
服務質量(QoS): 支援三種 QoS 級別。
- QoS 0:最多一次(無需確認)。
- QoS 1:至少一次(確保傳遞,但可能重複)。
- QoS 2:恰好一次(確保傳遞且不重複)。
示例:
client.publish(topic, message, qos=1)
保留消息 : 保留消息確保新訂閱者收到主題上的最後一條消息。
示例:
client.publish(topic, message, retain=True)
遺囑消息(LWT): 遺囑消息允許你指定在客戶端意外斷開連接時發送的消息。
示例:
client.will_set(topic, "Client disconnected unexpectedly", qos=1, retain=True)
結論
現在您已經學會如何使用 Python 建立即時通信系統,從基礎設定到進階的訊息發佈與訂閱,再到真實應用場景的探討。這種輕量級、高效率的通信架構不僅適用於物聯網,還能廣泛應用於各種即時數據處理的場景中。