之所以想要制作這樣一個系統,是因為平時做實驗都是用自己開發的測量裝置,之前一般都是將數據存在SD卡或外部Flash中,每次都要收取數據(把SD卡拔出或者從Flash中讀取數據)。重復的插拔SD卡和讀取Flash會比較麻煩,如果能開發一個自動上傳並存儲數據的系統,坐在電腦前就可以直接查看實驗變化、下載數據,感覺會方便很多(嗯,對,就是懶)。
按照需求,實現這個系統的步驟很簡單,上傳數據—>存儲數據—>顯示數據,結合自己目前了解的一些技術,打算采用ESP8266WiFi模塊上傳數據,用樹莓派作為一個存儲數據的服務器,最后用Splunk在web端可視化存儲的數據。
OK,直接上完成的實物圖和效果圖:

ESP8266是一款樂鑫的WiFi MCU,從網上買的ESP-01S模塊可以配置成AP、STA或者AP+STA模式。將ESP-01S直接配置成STA模式連接到局域網下,用AT指令可以配置要連接的WiFi賬號及密碼,或者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)。

總體的實現過程大概就是這樣,只是初步實現了基本功能,還有很多要改進的地方哈,后面有空會繼續補充。
