ESP8266+樹莓派+Splunk製作一個數據採集並可視化的系統
之所以想要製作這樣一個系統,是因為平時做實驗都是用自己開發的測量裝置,之前一般都是將資料存在SD卡或外部Flash中,每次都要收取資料(把SD卡拔出或者從Flash中讀取資料)。重複的插拔SD卡和讀取Flash會比較麻煩,如果能開發一個自動上傳並存儲資料的系統,坐在電腦前就可以直接檢視實驗變化、下載資料,感覺會方便很多(嗯,對,就是懶)。
按照需求,實現這個系統的步驟很簡單,上傳資料—>儲存資料—>顯示資料,結合自己目前瞭解的一些技術,打算採用ESP8266WIFI模組上傳資料,用樹莓派作為一個儲存資料的伺服器,最後用Splunk在web端視覺化儲存的資料。
OK,直接上完成的實物圖和效果圖:
ESP8266是一款樂鑫的WiFi MCU,從網上買的ESP-01S模組可以配置成AP、STA或者AP+STA模式。將ESP-01S直接配置成STA模式連線到區域網下,可以用AT指令設定要連線的網路賬號密碼,或者AP+STA模式下連線電腦通過網頁也可以直接配置(需要韌體支援)。在ESP-01S連入區域網的狀態下,通過串列埠發AT指令將ESP-01S配置為Client就可以與Server通訊啦,單連線模式下是可以支援透傳的。下面是用AT指令配置ESP-01S進行TCP透傳的例子:
ESP-01S的配置成功意味著上傳資料的功能已經實現啦,接下來就是用樹莓派儲存上傳的資料了。樹莓派儲存資料其實需要兩步,第一步接收,第二步儲存。接收的話我是用Python寫了一個實時執行的指令碼來處理收到的資料,儲存資料的話在樹莓派上裝一個數據庫就可以了。資料庫裝的是MariaDB,MariaDB是MySQL的一個分支,由社群開發維護,完全相容MySQL。樹莓派上直接sudo apt-get install mariadb-server 即可安裝。由於和MySQL相容,在windows上用MySQL Workbentch遠端登入管理資料庫會比較方便一點(注:想要遠端登入MariaDB,User Accounts的`host`要改為'%',預設的localhost只能本地訪問)。
樹莓派的系統裡一般自帶python(這裡用的Python3),沒有的話需要先裝一下。Python用socket類可以訪問底層作業系統Socket介面,從而實現簡單網路通訊,另外還需要安裝mysql-connector來連線操縱資料庫,直接pip install mysql-connector即可。Pyhon指令碼寫了三個檔案,Database.py用來建立資料庫(主要按照自己的資料格式建立表格),Server.py用來接收資料並將資料上傳到MariaDB,LogOutput.py將執行錯誤資訊輸出日誌,方便出問題檢視。
以上兩部分完成後就可以測試一下上傳和儲存的功能了,通過Workbentch可以看到實時上傳的資料都是OK的。
最後一步,用Splunk將資料視覺化。Splunk是機器資料的引擎,具有強大的資料搜尋分析能力,這裡主要是使用了其中Search&Reporting中的DashBoards的視覺化功能。
首先要下載Splunk Enterprise,登入本地web介面(預設埠8000)。在Apps中安裝Splunk DB Connect進行相應的配置,由於用的是Java資料庫連線(JDBC),要有Java和對應資料庫的驅動。配置好就可以建立訪問資料庫的Identity和Connection,進而通過Splunk接入我的MariaDB資料庫。
進入Search&Reporting的DashBoards即可建立儀表盤,通過點選Add Panel和And Input可以新增各種輸入的控制元件和各種型別的圖表,從而構建自己的UI,然後Source 中會有對應的可擴充套件標記語言(XML)的描述,可以在UI中設定物件的屬性或者在Source 中直接編輯XML實現自己的功能。要實現資料的連線、搜尋、過濾等功能需要熟悉Splunk的搜尋處理語言(SPL),官方有專門的中文參考手冊(https://docs.splunk.com/Documentation/Splunk/8.2.0/Translated/SimplifiedChinesemanuals)。
總體的實現過程大概就是這樣,只是初步實現了基本功能,還有很多要改進的地方哈,後面有空會繼續補充。