謝作如 林淼焱
在本欄目上一期的文章中,我們利用SIoT軟件建立了物聯網(MQTT)服務器,結合開源硬件掌控板實時采集溫濕度的數據,然后對采集到的數據進行相關分析。但是,這些不斷變換的實時數據,在普通人眼里看起來可能枯燥無味,很難吸引學生的注意力。
要讓物聯網數據有趣一些,就自然要研究數據可視化技術。數據可視化的主要目的是通過圖形化手段進行生動形象的信息傳遞。數據可視化將數據設計成炫目華麗的畫面并不是僅僅為了追求“美”,而是為了有效地傳達信息。不同方式呈現的數據,往往會給用戶帶來完全不同的感知體驗。因而常常有人說,我們現在已經進入了一個“讀圖”的時代,用“圖”來呈現“數”,是很有價值的研究。
● 物聯網數據可視化的幾種方式
數據可視化與信息圖形、信息可視化、科學可視化和統計圖形有密切的關系。數據形象化呈現的方式多種多樣,工具也很多,用Excel畫出圖表就是其中最常見的一種。但物聯網數據是動態變化的,用Excel做的圖表則是靜態不變的,肯定不合適。為此,我們研究了多種方式來做物聯網數據的可視化。
1.利用物聯網平臺的自帶圖表功能
絕大多數的物聯網平臺都提供了簡單的圖表功能,能將服務器上的數據顯示在圖表中,可以根據時間查詢具體時段的數據,以折線圖的方式顯示在網頁上(如圖1)。SIoT軟件雖然功能很簡潔,也提供了類似的圖表來呈現動態數據,但是這種方法只能為用戶提供最基礎的功能,不能對數據進行個性化呈現。
2.用編程的方式繪制動態圖表
Python有一個專門用于圖像繪制的庫叫做Matplotlib,能夠完成常見的繪圖功能(如圖2)。結合MQTT庫,用Python代碼可以畫出實時變化的圖表。以繪畫為特色的編程語言Processing,也有團隊為其提供了相應的庫文件,二者結合可以畫出特別酷炫的可視化效果。但是,編程畫圖表的方式對沒有代碼基礎的初學者來說門檻較高。
3.利用Node-RED繪制個性化圖表
使用Node-RED軟件獲取MQTT服務器的數據,然后結合圖形化模塊Dashboard對數據進行可視化呈現(如圖3)。Node-RED具備簡單的圖形化編程和豐富的功能節點,不僅能夠完成數據可視化,還能夠實時對數據進行相應的處理。相對來說,Node-RED的門檻較低。
● Node-RED軟件簡介和安裝
Node-RED是IBM開發的一個開源項目,本來是為了滿足工程師快速連接硬件和設備到Web服務和其他軟件的需求。Node-RED因為編程簡單、流程清晰得到好評,并很快發展成為一種通用的物聯網編程工具。它與Scratch的編程思想相近,通過節點塊(Node)完成基礎代碼的編寫,而節點間數據的傳遞則通過連線來創建數據流(Flows)。
Node-RED提供了一系列支持服務器及物聯網的接口,能在傳感器、服務器、路由器等設備間建模大量應用程序功能,簡化了整體項目的開發。只需要簡單修改節點中的參數,就能夠讓學生搭建出一個小有規模的客戶端。
1.Node-RED的安裝
Node-RED是基于Node開發的,所以要先安裝Node環境,再通過命令安裝Node-RED。詳細的安裝過程可以參考一些網絡教程,或者“虛谷物聯”項目的官方文檔(地址:https://github.com/vvlink/SIoT)。
Node-RED安裝成功后,在CMD窗口中輸入node-red即可啟動服務器(如圖4)。在瀏覽器中輸入“http://127.0.0.1:1880/”,就能進入編程環境。
需要強調的是,在使用Node-RED的過程中不能關閉命令窗口。可以通過IP地址加端口號的形式,通過其他的計算機瀏覽器來訪問Node-RED,如“http:// 192.168.102.101:1880”。
2.用Node-RED連接MQTT服務器
Node-RED的主界面共有三個部分,從左到右分別為擁有各種功能的節點欄、放置各種編程節點的流程欄、用于提供節點幫助和調試信息的信息欄(如圖5)。
在Node-RED中簡單地輸出一串字符,需要用到左側的inject節點和debug節點,按住鼠標左鍵將節點拖至流程圖中,發現節點的名字發生了改變,這是由于節點被實例化,代表了某個具體的數值。我們可以通過修改節點的名稱屬性來改變其在流程圖中的名字,并不影響整個流程中的其他數據。
MQTT是物聯網應用的核心協議,EasyIoT、SIoT都是一個典型的MQTT服務器。在Node-RED中,我們只需要將MQTT輸入節點拖出,雙擊修改其中參數(如圖6),設置好IP地址、用戶名密碼和Topic等信息,就可以接收到從MQTT服務器傳來的數據了。
完成節點的拖動與信息的修改后,點擊右上方的“部署”,就可以在右側的調試窗口中看到信息了(如上頁圖7)。
● 利用Dashboard模塊呈現MQTT數據
在Node-RED中,有許多的第三方控件可以供我們使用。如果需要圖表功能,則要使用Dashboard控件。通過右上角設置菜單的“節點管理”,輸入Dashboard即可安裝。成功安裝后會看到左側的列表中出現了新的節點。
將已經設置好參數的MQTT輸入與折線圖控件連接起來,點擊右上角的部署,保存當前節點,在瀏覽器中輸入地址http://localhost:1880/u,或點擊圖中右上角框選部分(如上頁圖8),就能得到一張圖表(如圖9)。
想要完成圖表的個性化顯示也十分簡單,當我們想要顯示圖表中每個系列的對應名稱,或修改其線條顏色時,只需要設置節點中的Legend參數,以及選擇相應的色塊即可修改(如圖10)。
在整個程序中,儀表盤的布局主要取決于Tab和Group參數。每個Tab都是獨立的區域,可以供用戶自行切換。當我們要在頁面中添加多個圖表時,可以調整每張圖表的大小,其思路類似于Html語言中div的放置——提供一個大的方框(Tab),再根據其中方塊(group)的大小進行排列,最后在每個方塊中放置不同大小的圖表。
我們在學校創客空間外面,利用掌控板和SIoT搭建了一個溫濕度采集系統。通過上述的操作,很快就設計出一個數據可視化的頁面(如圖11)。用各種儀表盤顯示溫度和濕度,加上實時更新的折線圖,是不是比單一的數據要生動得多?
● Node-RED的拓展應用
當然,用Dashboard呈現物聯網數據,僅僅是Node-RED的眾多功能之一。作為物聯網的一種粘合劑,Node-RED能夠完成很多工作。例如,可以利用Node-RED監控物聯網數據的傳輸情況,當傳感器出現故障或者某個傳感器數據達到閾值后,發送郵件提醒用戶;可以使用簡單的代碼,按照既定的條件篩選比較數據,收集每日的溫濕度峰值等;也可以根據數據的閾值,實時給某個Topic發送信息,實現物聯網控制的功能。簡而言之,Node-RED是一款值得學習的物聯網工具,入門簡單而功能強大,期待和更多的老師一起研究。