王欣蕾 劉念
摘 要:傳感器數據的采集在物聯網系統,智慧城市等多種信息產業中扮演著最基礎的,最根本的角色。但在數據采集完成后,將數據傳輸到服務器中卻是一件有著多樣化解決方案的事務。在眾多方式當中,使用wifi通信模塊ESP8266相對功耗較低,適用場景靈活,成本低廉,逐漸成為多數工程人員的首選方案。
關鍵詞:ESP8266;服務器;數據采集
1 系統硬件組成
本系統主要由三部分組成,數據采集模塊,通信模塊和服務器。數據采集模塊可以是任意的單片機芯片,如51單片機,AVR單片機,stm32芯片等等。通信模塊采用樂鑫公司出品的ESP8266物聯網的芯片。鑒于ESP8266的可編程性和擴展性,對于采集的數據只有數字量的系統來說,甚至可以使用ESP8266代替數據采集模塊,使其同時扮演兩個角色。服務器可以是騰訊云,阿里云等云服務器,亦可以是局域網內的本地服務器,主要負責接收處理和存儲最終的傳感器數據。
1.1 單片機
單片機(Microcontrollers)是一種集成電路芯片,是采用超大規模集成電路技術把具有數據處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計數器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊硅片上構成的一個小而完善的微型計算機系統,在工業控制領域廣泛應用。從上世紀80年代,由當時的4位、8位單片機,發展到現在的300M的高速單片機。
1.2 ESP8266無線通信模塊
ESP8266是一款WIFI通信的芯片,使用了3.3V的直流電源,體積小,功耗低,支持透傳,丟包現象不嚴重。ESP8266可以配置成station(即client模式)、AP(即wifi熱點模式)、station+AP三種模式,就是說模塊可以當成一個設備(client)連接局域網內的路由,也可以設置成是一個路由(sever),也可以既作為局域網里面的client同時又是其他client的sever。同時該模塊支持tcp傳輸,既可以配置為tcp server也可以配置為tcp client。參考ESP8266的SDK文檔我們發現,ESP8266支持三種開發方式,一種是常用的AT指令,通過RX,TX串口向ESP8266發送指令。如AT+RST,AT等等。然而遺憾的是,通過AT指令的方式并不能有效的實現我們預期的功能,如果直接使用ESP8266作為MCU去完成相關的功能設計是并不理想(上位機發送指令常常會出現不可預料的錯誤,)。第二類開發方式是通過NodeMCU的代碼方式燒寫,NodeMCU采用Arduino語言將ESP8266的SDK文檔中C語言代碼高度封裝,使用方式與Arduino類似。相比于AT指令,NodeMCU支持對ESP8266所有GPIO引腳接口的控制,提高了可閱讀性卻不失強大的功能。第三種方式是利用Lua語言腳本的為ESP8266編寫控制程序,目前市面上的集成AVR芯片大都采用這種方式。第四種方式即采用官方的SDK進行開發。本系統采用NodeMCU的方式設計相關功能實現。
1.3 服務器
服務器:server表示軟件程序,這種程序向外提供各種服務,有ftp服務,網頁服務,數據庫服務等。或者server表示硬件,就是主機。
2 系統架構設計
本系統上電之后,數據采集模塊并非會一直采集數據向通信模塊發送,因為這樣大大增加了數據采集模塊MPU的負擔。本系統采用問答的方式,通信模塊每隔固定時間間隔就會像數據采集模塊發送數據請求,發送請求之后會原地進行等待,直到收到數據。數據采集模塊收到請求之后才會執行數據的采集,隨后發送給通信模塊,數據發送后則會等待下一次數據請求。當通信模塊接收完成數據之后,便可以通過wifi連接采用TCP或UDP協議將數據發送給指定的服務器,完成一次數據的采集。
3 服務器相關配置
本系統的服務器可以才采用TOMCAT8.0版本,利用MYSQL,Servlet,JSP,HTML,CSS3,JAVASCRIPT等技術搭建服務器的前端和后臺。通過編寫不同的Servlet去完成,響應不同的功能,達到數據展示需要的目的。如果單純為了數據簡單顯示,也可以進設置一個socket應用程序去實現相應功能。