Arduino筆記(45):AM2320溫濕度值使用MQTT上傳樹莓派的Node-RED儀表板(上)

前幾篇文章實作 ESP8266將溫濕度的感測值送到 Gmail、Line,或是紀錄到SD卡,或上傳到 Thingspeak等,還可使用常見的 IoT通訊協定 MQTT來傳送資料,本篇就要實作將 AM2320 測得的溫濕度,使用MQTT 上傳到樹莓派的 Node-RED 儀表板。因為文章有點長,會分成兩部分:第一篇先實作樹莓派上 Node-RED的設定,第二篇則實作在 NodeMCU上,如何透過無線網路,將AM2320測得的溫濕度值,使用 MQTT協定,上傳到樹莓派的 Node-RED,並用儀表板呈現溫濕度的狀態。


有關安裝 Node-RED 及 Dashboard 儀表板,請參考:Raspberry Pi 筆記(52):安裝Node-RED及Dashboard儀表板。先前的實作也已完成如何在樹莓派上安裝 MQTT 及其代理程式,可參考:Raspberry Pi 筆記(48):IoT裝置間的通訊協定 MQTT,如要看一下安裝是否正常,可執行一下 MQTT 顯示的版本,來確認一下服務的狀態。
$ mosquitto -v
註:mosquitto 命令回應目前安裝的版本,由於 mosquitto 已經運行,上圖第四列出現 Erro的錯誤消息,請不要擔心 mosquitto 已正確安裝並運行。

[設定儀表板的 Layout]

使用瀏覽器進入 Node-RED畫面,右上方會有一個儀表板的圖示 。按下圖示建立儀表板 Layout,在這個例子中,使用一個按鈕來控制 ESP8266 輸出,使用圖表和儀表顯示 AM2320 傳感器的溫度和濕度值。選擇[儀表板]選項下方的[Layout]頁簽。按下[+tab]建立名為  Room 的選項,在Room選項內,按下[+tgroup]建立兩個群:Lamp 和  Sensor,如下圖:
建立流程(Flow),將以下節點(Node) 拖曳到圖面中央 ,如下圖:
  • Switch : 這將控制ESP8266輸出
  • mqtt Output : 根據開關狀態向 ESP8266 發布消息
  • mqtt input (2個) : 此節點將訂閱溫度和濕度的主題,以便從從 ESP 接收傳感器數據
  • Chart 圖表 : 將顯示溫度傳感器的值
  • gauge 儀表 : 將顯示濕度傳感器的值

要設定 Node-RED 和 MQTT Broker 連接,請雙點擊 mqtt output,會出現一個視窗如下圖:

選擇 [Add new mqtt-broker]右邊的編輯圖案,在服務器內輸入 localhost,其他就用預設值:

  • Switch:交換機會在開啟時發送一個 on 字串,當它關閉時,會發送一個 off 字串。此節點將在 room/lamp 主題上發布。然後您的 ESP 可訂閱此主題來接收消息。

  • mqtt output node:此 Node 連接到 mosquitto broker,它將在room/lamp主題中發布。

  • mqtt input node 1:此節點訂閱了房間/溫度主題,以接收來自 ESP8266 的溫度傳感器數據。ESP8266將在此主題上發布溫度讀數。


  • mqtt input node 2:此節點訂閱了房間/濕度主題,以接收來自 ESP8266 的濕度傳感器數據。ESP8266將在同一主題上發布濕度讀數。

  • chart:該圖表會顯示讀取來自 room/temperature主題的數據。

  • gauge:儀表將顯示在 room/humidity主題上收到的數據。

將節點連接起來,如下圖:


此時,Node-RED應用程序已準備就緒,點選右上角的  按鈕,進行部署作業。完成後,Node-RED的儀表板應用程序就已準備好,要查看儀表板外觀,可開啟連結:
http://192.168.1.128:1880/ui
出現如以下畫面,因尚未上傳值,儀表板上的圖還是空的。

現在,進入下一篇準備使用 Node-MCU連接 AM2320 感測器,並上傳程式到 Node-MCU,看看如何透過 MQTT 協定上傳資料到樹莓派的稍早建立的儀表板。

[參考資料]


Post a Comment

較新的 較舊