在 Pycom 使用 Python + Micropython + MQTT 進行物聯網編程
本教程將引導您使用 MicroPython 通過 MQTT 通過 subscribe/publish (發布/訂閱)方法進行通信。
這是使用 WiPy、LoPy、SiPy、或其他 MicroPython 板開始發送和接收數據的簡單方法。我們將使用 http://io.adafruit.com 作為 MQTT 代理來測試和顯示我們的數據。
步驟1:準備
什麼是 MQTT
MQTT 代表了 MQ Telemetry Transport。它是針對於受限設備和低帶寬,高延遲或不可靠網路設計的發布/訂閱,非常簡單和輕便的消息傳遞協議。其設計原則,盡量減少網路帶寬和設備資源需求,同時還要確保可靠性和一定程度的交付保證。這些原則,還可以使協議成為連接設備新興的「機器對機器」(M2M)或 「物聯網」 世界的理想選擇,以及帶寬和電池電量非常高的移動應用。
你需要什麼?
為了遵循本玩法,您需要以下內容:
- 一個支持 MicroPython 的設備(WiPy,LoPy,SiPy等)
- Adafruit IO 賬戶
- MQTT 庫:PyCom MQTT
步驟2:開始編程
假設您已經安裝了MicroPython設備(本教程中我們使用WiPy 2.0)並更新了最新的固件,然後就能開始了。如果你不知道 Pycom,你需要訪問 docs.pycom.io 了解 Pycom 設備的更多信息。你也可以從你的製造商的網站,了解到更多的詳細信息。
連接到您的設備,並訪問其文件存儲(FTP或Pymakr同步)。然後,找到lib文件夾(/flash/lib),並複製到本教程末尾引用的 mqtt.py 中。這個是我們將會使用的 MQTT 協議庫。
Main.py
現在我們可以開始編寫我們的 main.py 文件,來連接、發布和訂閱 MQTT。
打開一個新的文件,或者在 flash 下編輯 main.py。我們想在這個腳本中做一系列的事情:
- 連接到WiFi
- 連接到我們的MQTT代理
- 然後發布我們選擇的主題的消息
我們將編寫腳本並填寫空白,稍後我們將在 http://io.adafruit.com 中進行配置。
from network import WLAN from mqtt import MQTTClient import machine import time def sub_cb(topic, msg): print(msg) wlan = WLAN(mode=WLAN.STA) wlan.connect("yourwifinetwork", auth=(WLAN.WPA2, "wifipassword"),timeout=5000) while not wlan.isconnected(): machine.idle() print("Connected to Wifi
") client = MQTTClient("device_id", "io.adafruit.com",user="your_username",password="your_api_key", port=1883) client.set_callback(sub_cb) client.connect()client.subscribe(topic="youraccount/feeds/lights") while True: print("Sending ON") client.publish(topic="youraccount/feeds/lights", msg="ON") time.sleep(1) print("Sending OFF") client.publish(topic="youraccount/feeds/lights", msg="OFF") time.sleep(1)
我們剛寫的 main.py,它將向我們的 MQTT 代理髮布一個開/關燈的消息。雖然我們沒有將燈開,關連接到我們的設備,但我們可以模擬其行為。我們期待每秒鐘會在我們的 topic/feed 上顯示一條消息,其將在「ON」和「OFF」之間交替顯示。
步驟3:設置Adafruit IO
Adafruit IO 代理是想要嘗試 MQTT 和訂閱/發布消息的任何人的好地方!打開您的網路瀏覽器,並導航到 http://io.adafruit.com,註冊一個帳戶然後登錄。
現在點擊 feed 選項卡,並創建一個新的feed。你可以命名任何你喜歡的東西,但是在本教程中,我們稱之為 「lights」,與我們在main.py 文件中使用的一樣。
這是我們將監聽的消息的主題。我們現在需要一些東西來顯示我們的傳入數據。Adafruit IO 有一個很好的功能,稱為「儀錶板(Dashboards)」,可用於顯示 feed 上發生的任何事情。我們將使用一個簡單的開/關開關來顯示 WiPy 的變化輸入。
創建一個新的儀錶板,然後點擊它的名稱打開它。從這裡,我們可以添加能與我們的數據交互的各種顯示,切換和視圖。選擇一個切換塊,然後選擇「lights」源作為數據源。
你可以思考一下,我們已經建立的發布、訂閱方式。我們的 WiPy 正在發布關於燈條件(ON 或 OFF)的數據,Adafruit IO 作為我們的中間件(或代理)和作為訂閱者的儀錶板。
您現在應該使用 Adafruit IO 用戶名和密碼——在 Adafruit IO 設置選項卡下生成並稱為 AI O密鑰,來替換 main.py 文件中的如下代碼:
client = MQTTClient(client_id="example_client", server="io.adafruit.com", user="Adafruit IO Username", password="Adafruit IO Key", port=1883)
假設一切都正確設置,那麼您應該每秒鐘看到 「ON」和「OFF」 之間的開關切換!
步驟4:Finished!
就是這麼簡單!
現在,你擁有有一個能工作的 MQTT 發布者、代理和訂閱者,讓您可以利用這種低帶寬消息。 您可以以任何您想要的方式,擴展 main.py 腳本:比如你想監控一個房間的溫度或跟蹤你的門打開的次數!
MQTT 是允許設備節省電力、數據,以及支持大量流量的好方法。要知道 Facebook 甚至在他們的 Messenger 平台使用 MQTT!
原文鏈接:https://www.wandianshenme.com/play/mqtt-pycom-micropython-build-iot-with-python/
推薦閱讀:
※Python 字元編碼的二三事
※乾貨|Scikit-Learn的五種機器學習方法使用案例(python代碼)
※文獻引文分析利器 HistCite 詳細使用教程(精簡易用免安裝版本 HistCite Pro 首發頁面)
※OnlineJudge 2.0發布
※爬蟲帶你逛知乎(下篇)