天天看點

MicroPython和MQTT雲端迷你氣象站

背景知識視訊教程

  • 使用NodeMCU(由ESP8266支援),MicroPython和PyCharm進行物聯網
  • 使用MicroPython的微控制器和EPS32的Python權威指南
  • 适用于使用ESP32 / ESP8266的所有人的MicroPython(入門)

我們将實施簡化的氣象站物聯網解決方案。 我們将使用分線闆上的小型傳感器記錄溫度,大氣壓力和濕度。 雖然這三個資料點并非完全是一個完整的,專業的(業餘愛好者較少)等級的天氣解決方案,但它可以準确地向您顯示從傳感器向雲發送資料的難易程度。

我們将使用MQTT将資料發送到雲來釋出資料。 我們還将使用預訂來監視連接配接到交換機的另一個資料元素(稱為提要)。在這些項目中,我們使用網頁上的按鈕觸發事件。 在這種情況下,我們将使用開關和對資料的訂閱來打開和關閉傳感器,如果打開則表示沒有資料釋出。 從這個意義上講,我們的MicroPython解決方案成為一個傳感器節點。

該項目的使用者界面将使用MQTT服務的功能來建構,該功能允許您建立一個站點,該站點使用各種子產品化元件(稱為圖塊)(例如圖形和刻度盤)顯示資料。 如您所見,建立使用者界面比我們在先前項目中編寫的HTML容易得多。但它有一個局限性–僅顯示自啟動以來儲存的資料。

MQTT介紹

至少在理論和概念上,釋出/訂閱模型已經存在了一段時間。 也有實作角色的程式設計構造。 釋出者将資料釋出到允許訂閱者擷取資料的位置(伺服器,資料庫或結構化資料的存儲庫)。 是以,釋出者是作家,訂閱者是讀者。

對于物聯網項目和傳感器網絡,我們有一個或多個傳感器節點或資料提供者将資料發送到存儲庫。 我們可以使用消息隊列來記錄包含資料的消息,而不是使用SQL這樣的結構化存儲機制。 訂戶訂閱資料時,他們将按接收順序獲得消息并解析消息以擷取資料。 是以,他們不必像在資料庫伺服器上那樣添加資料抽象層。 在這種情況下,您隻需要MQTT協定。

MQTT是一種簡單且非常輕量級的協定(意味着它不需要龐大的庫即可使用複雜的步驟集),可與MicroPython(和其他微控制器平台)一起使用。 由于MQTT基于消息隊列,是以該協定非常容忍不可靠的資料傳遞。 而且由于不需要大量記憶體,是以可以在小型裝置上使用。 這意味着MQTT是確定您的小型IOT裝置可以在合理保證物聯網MicroPython的情況下将資料發送到伺服器(稱為代理)的一種方法。

MQTT工作原理

MQTT基本服務包含三個元件:生成包含資料的消息的傳感器節點或釋出者,讀取消息的用戶端或訂戶以及存儲将消息分發給訂戶的代理或伺服器。 下圖示了這三個元件如何工作的概念。

請注意,左側有可以釋出資料的傳感器節點(用實線表示),右側有可以訂閱消息的用戶端(用虛線表示),以及代理提供的可視化元件(用虛線表示)。 還請注意,存在可以釋出和訂閱的傳感器節點,以及可以可視化資料和訂閱消息的用戶端。 實際上,您可以具有釋出和訂閱的任意組合。 我們将看到如何釋出和訂閱MicroPython項目中的消息。

用戶端

MQTT用戶端隻是具有MQTT庫的裝置(或計算機),您可以使用該庫對您的裝置進行程式設計以向代理發送消息(釋出)或從代理讀取消息(訂閱)。

代理

您可以使用幾種代理,包括基于雲的代理以及可以在自己的伺服器上使用的代理。 大多數代理都有自己的MQTT用戶端實作(有些需要特定的驅動程式或庫),并且可能在特定的平台上運作或需要其他元件。 無論如何,它們從傳感器節點和用戶端支援相同的MQTT協定。 是以,您可以選擇在MQTT代理上使用,以後再移至另一個代理,而不必從頭開始重寫代碼。

對于物聯網項目,您将需要選擇基于雲的代理,以便可以将您的開發闆連接配接到雲并從任何地方通路資料。 該項目的首選代理是Adafruit IO(io.adafruit.com)。

開始Adafruit IO

Adafruit IO(io.adafruit.com)是一個基于雲的資料可視化系統,易于使用,隻需很少的程式設計知識即可使用。 這通過支援代表性狀态傳輸(REST)和MQTT API來完成。 我們将為此項目使用MQTT API。

REST是許多基于雲的服務使用的協定,例如Amazon Web Services(AWS)提供的服務以及許多基于雲的商業解決方案。 最著名的是通過HTML操作與基于Web的解決方案一起使用。

Adafruit IO的目标是消除目前資料記錄器和基于雲的資料服務解決方案的所有複雜性,并使其易于使用,而Adafruit的表現非常出色。 簡而言之,我們使用MQTT用戶端驅動程式(庫),編寫代碼以連接配接,預訂資料或釋出資料。 可視化部分發生在Adafruit IO伺服器本身上,我們在其中建立自己的使用界面來檢視資料。 Adafruit IO入門有四個步驟。

  1. 建立賬戶
  2. 設定資料的提要(消息隊列)
  3. 設定儀表闆以可視化資料
  4. 連接配接裝置并開始釋出和訂閱

使用Adafruit IO所需要做的隻是一個使用者帳戶。 要為Adafruit IO建立帳戶,隻需轉到https://io.adafruit.com/。 如果您已經在Adafruit的伺服器上擁有一個帳戶,則可以使用該帳戶。隻需注冊即可通路Adafruit IO。 該過程簡單易行。 登入後,您将看到管理界面,您可以在其中建立提要和儀表闆。

提要是Adafruit IO的核心元件。 提要是您以來自裝置的消息形式放置資料的地方。 提要可以存儲資料(通過釋出),而裝置(用戶端)可以通過訂閱提要來讀取資料。 您可以有多個供稿,每個供稿都由其名稱定義,并通過您的使用者ID進行引用。

儀表闆是提要中資料的視圖。 Adafruit IO提供了一個拖放界面,可使用預定義的稱為“塊”的使用者界面控件快速建構資料的簡單視圖。 每個儀表闆可以具有一個或多個子產品,可以将其連接配接到提要。 然後,資料顯示在塊中,當新資料到達時自動更新

設定好提要和儀表闆之後,就可以編寫代碼以使用MQTT庫并發送(或接收)資料。 然後,我們可以傳回儀表闆并檢視資料。

所需硬體

設定硬體

該項目的簡單之處在于,我們使用的是一個傳感器和I2C接口,是以不需要太多連接配接。 下圖顯示了WiPy的接線圖。

配置Adafruit IO

現在我們準備配置Adafruit IO。我們的項目将從BME280傳感器讀取三種類型的資料:溫度,濕度和大氣壓力。 是以,我們将為每個建立一個提要。 我們還将使用第四個提要,以便我們可以通過儀表闆控制MicroPython開發闆。 儀表闆将具有幾個塊,以顯示每個提要。 讓我們看看如何為我們的項目建立提要和資訊中心。

設定提要

設定儀表闆

您可以建立任意數量的儀表闆,以檢視提要中的資料。 實際上,您可以為每個提要建立一個儀表闆,也可以将多個儀表闆連接配接到一個或多個提要。 對于此項目,我們将建立一個儀表闆,該儀表闆可連接配接所有四個提要。

要設定儀表闆,請從螢幕左側的連結清單中選擇Dashboards,然後單擊Actions下拉清單并選擇Create a New Dashboard,如下圖所示。

本項目,我們将添加以下塊:

  • 線圖:每個連接配接一個溫度,濕度和壓力提要塊
  • 切換按鈕:連接配接傳感器提要
  • 流:連接配接所有四個提要

要添加塊,請單擊儀表闆編輯螢幕右上角的加号圖示,如下圖所示。

單擊加号時,将顯示可用塊的清單。 上表中列出的塊如下圖所示,從左上角開始依次列出。 要将您選擇的塊添加到儀表闆,請單擊該塊。

選擇塊時,必須選擇塊的提要。 下圖顯示了為溫度提要的折線圖選擇提要的示例。 如您所見,您可以選擇任意數量的提要。 但是,在對多個提要使用折線圖之前,請務必考慮每個資料的比例。 在此項目中,我們對三種類型的資料具有不同的比例。 如果我們使用一個折線圖,則範圍最小的提要将出現在圖的底部,并且可能會掩蓋資料随時間的變化(它可能顯示為一條平線)。

繼續為濕度和壓力饋送建立兩個折線圖。 您可以用類似的方式命名這些塊,但對于濕度使用範圍[0,100],對壓力使用範圍[80000,120000]。 如果地理位置的高低不同,導緻範圍可能略有不同,則可能需要進行調整。

接下來,我們添加一個用于記錄所有資料的塊。 為此,我們将使用Stream塊。 添加Stream塊并選擇所有四個提要。 您可以随意命名,預設設定為OK。下 圖顯示了我使用的設定。 在設定新的儀表闆時,此塊是一個很好的塊,因為它使您可以看到到達每個字段的資料。

完成儀表盤的編輯後,單擊“完成編輯”。 如果要更改其中一個塊的比例或四處移動塊,則以後總是可以編輯儀表闆。 要編輯已添加的塊,請在儀表闆編輯螢幕上單擊要編輯的塊的小齒輪圖示。

程式設計

詳情參閱http://viadean.com/mp_mqtt_cloud.html

繼續閱讀