梁國壯 安在秋 田涵雷 李睿
摘? 要: 目前多路數(shù)據(jù)無線傳輸技術(shù),普遍受傳輸距離限制,無法實現(xiàn)穩(wěn)定的遠程通信;此外,需租用公網(wǎng)IP的遠程傳輸,使得運行成本大大增加?;诖?,設計一種以STM32嵌入式處理器為控制核心,將網(wǎng)絡協(xié)議與無線模塊ESP8266相結(jié)合的多路數(shù)據(jù)采集與遠程無線傳輸系統(tǒng)。該系統(tǒng)采用Java進行基于TCP/IP的通信協(xié)議編程,來避免租用公網(wǎng)IP。另外,無線模塊與上位機通過所編寫的通信協(xié)議相連接,來實現(xiàn)數(shù)據(jù)的遠程通信。最后,通過實際測試驗證了所提系統(tǒng)設計的可行性。
關(guān)鍵詞: 無線數(shù)據(jù)傳輸; 遠程通信; 網(wǎng)絡協(xié)議; 系統(tǒng)設計; 系統(tǒng)測試; 數(shù)據(jù)分析
中圖分類號: TN919?34? ? ? ? ? ? ? ? ? ? ? ? ? ? 文獻標識碼: A? ? ? ? ? ? ? ? ? ? ? ?文章編號: 1004?373X(2020)06?0023?04
Design of wireless remote data transmission system based on network protocol
LIANG Guozhuang, AN Zaiqiu, TIAN Hanlei, LI Rui
(School of Electrical Engineering, Hebei University of Science and Technology, Shijiazhuang 050018, China)
Abstract: At present, the multi?channel data wireless transmission technology cannot achieve stable long?distance communication because it is generally limited by the transmission distance. That′s why it needs to rent the remote transmission of public network IP, which greatly increases its operational costs. Based on this, a multi?channel data acquisition and remote wireless transmission system combining the network protocol with wireless module ESP8266 is designed, which takes STM32 embedded processor as its control core. In the proposed system, Java is used for the communication protocol programing based on TCP/IP, so as to avoid renting the public network IP. The wireless module is connected with the upper computer through the programmed communication protocol to realize the remote communication of data. The feasibility of the proposed system design is verified by means of the actual test.
Keywords: wireless data transmission; remote communication; network protocol; system design; system test; data analysis
0? 引? 言
目前,隨著物聯(lián)網(wǎng)、大數(shù)據(jù)等新興技術(shù)的快速普及,WiFi覆蓋面積越來越廣,無線通信技術(shù)發(fā)展越來越快,監(jiān)測系統(tǒng)也正趨向于對數(shù)據(jù)的無線傳輸[1]。室內(nèi)環(huán)境數(shù)據(jù)對于建筑安全意義重大,如今對于大范圍建筑室內(nèi)數(shù)據(jù)的采集與傳輸,也越來越多地選擇無線方式,但遠程通信穩(wěn)定性較差,且租用公網(wǎng)IP成本高。
大范圍建筑的特點是各建筑之間距離較遠,使得其室內(nèi)環(huán)境數(shù)據(jù)的采集測試點較多,距離較遠,若使用傳統(tǒng)有線方式傳輸數(shù)據(jù),則會大大增加成本。文獻[2]提出利用ZigBee無線傳感器網(wǎng)絡進行環(huán)境數(shù)據(jù)采集與傳輸,該技術(shù)功耗低,應用廣泛,但缺點是其構(gòu)建的網(wǎng)絡為封閉式網(wǎng)絡,并不能與Internet直接集成,所以傳輸距離受到一定限制。而文獻[3]提出通過無線模塊nRF905以無線載波的形式,將采集到的數(shù)據(jù)傳輸給上位機,相較于文獻[2],雖在傳輸距離上得到了優(yōu)化,但系統(tǒng)開放性較大,容易受到干擾。另外,文獻[4]提出GPRS無線傳輸方案,雖然傳輸距離較遠,但目前該網(wǎng)絡并沒有固定IP進行數(shù)據(jù)傳輸,只能持續(xù)租用公網(wǎng)。
基于以上所述,本文設計一種基于網(wǎng)絡協(xié)議+無線模塊的多路數(shù)據(jù)采集與遠程無線傳輸系統(tǒng)。本系統(tǒng)基于TCP/IP協(xié)議,采用Socket技術(shù)進行通信協(xié)議編程。上位機與已連接WiFi的無線模塊,通過該通信協(xié)議的連接來實現(xiàn)數(shù)據(jù)的遠程通信,解決了接收端和發(fā)送端IP地址不固定的問題。為保證系統(tǒng)不受干擾,提高其穩(wěn)定性,每個測試點都有唯一的ID。
1? 系統(tǒng)總體結(jié)構(gòu)設計
基于網(wǎng)絡協(xié)議+無線模塊的多路溫濕度數(shù)據(jù)遠程傳輸系統(tǒng)總體結(jié)構(gòu)如圖1所示。
系統(tǒng)硬件架構(gòu)主要由微處理器模塊、數(shù)據(jù)采集模塊、數(shù)據(jù)傳輸模塊、顯示模塊、存儲模塊等組成。即以STM32嵌入式處理器為控制核心,負責對相應數(shù)據(jù)進行處理。WiFi模塊作為無線通信單元,將采集到的數(shù)據(jù)發(fā)送至服務器端;溫濕度傳感器作為數(shù)據(jù)檢測單元,采集室內(nèi)環(huán)境的監(jiān)測數(shù)據(jù);TFTLCD顯示屏顯示數(shù)據(jù)信息??紤]軟件時,系統(tǒng)基于TCP/IP協(xié)議,采用Java并利用Socket技術(shù)進行網(wǎng)絡通信協(xié)議編程,實現(xiàn)上位機與通信模塊的數(shù)據(jù)通信。多路測試節(jié)點將采集到的數(shù)據(jù)通過ARM經(jīng)由WiFi模塊發(fā)送到編寫的網(wǎng)絡服務器,遠程接收端通過連接通信協(xié)議來實現(xiàn)對各個測試點數(shù)據(jù)的獲取與發(fā)送。
2? 系統(tǒng)硬件設計
2.1? 微處理器選型
基于高性能、低功耗、成本低等因素考慮,本次設計選用了STM32F130ZET6芯片作為系統(tǒng)核心處理器。該芯片是STM32系列微處理器中的一款大容量芯片,主頻可達72 MHz,內(nèi)置64 KB的SRAM和512 KB的閃存,可工作在-40~85 ℃的溫度范圍。芯片內(nèi)部集成了多個外圍設備接口,包括RTC,I2C及SPI等。為保證系統(tǒng)的低功耗性,該處理器共有待機、睡眠和停機三種模式。
2.2? 溫濕度傳感器的選型
系統(tǒng)采集多個室內(nèi)溫濕度數(shù)據(jù)實現(xiàn)無線遠程數(shù)據(jù)傳輸。選擇DHT11作為系統(tǒng)的溫濕度傳感器,該傳感器內(nèi)部包含有一個電阻式感濕元件和一個NTC測溫元件。DHT11濕度測量范圍為20%RH~90%RH,溫度測量范圍為0~50 ℃,分辨率為濕度1%RH,溫度1 ℃,平均電流為0.5 mA,工作電壓范圍在3~5.5 V,功耗非常低。綜上考慮,DHT11在功能、性能、低功耗等方面,都符合設計要求。
2.3? 無線通信模塊的選型
系統(tǒng)中WiFi通信功能由ESP8266模塊實現(xiàn)。ESP8266是一個完整且自成體系的WiFi網(wǎng)絡解決方案,只需通過SPI/SDIO接口就可以加入微處理器相關(guān)設計中,操作簡單方便,并且可工作在-40~125 ℃的環(huán)境中,性價比較高。該模塊支持AP模式、STA模式和AP+STA模式,可以靈活實現(xiàn)網(wǎng)絡拓撲。
3? 系統(tǒng)軟件設計
3.1? 應用程序設計
根據(jù)系統(tǒng)需求,首先應對硬件進行初始化,在硬件初始化完成之后,即可開始對各個模塊功能進行設計。對于無線模塊ESP8266,本次設計通過AT指令集配置模塊的網(wǎng)絡參數(shù),并選用STA作為TCP客戶端的模式。具體配置如下:
1) AT+CWMODE=1;? ? ? ? ? ? ? ? ? ? ?//設置模塊為STA模式
2) AT+RST;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //重啟生效
3) AT+CWJAP;? ? ? ? ? ? ? ?//連接對象路由器的賬號及密碼
4) AT+CIPSTART;
//模塊連接到網(wǎng)絡調(diào)試助手的TCP Server模式
5) AT+CIPMODE=1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //開啟透傳模式
6) AT+CIPSEND;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //開始透傳
此時,監(jiān)測到的溫濕度數(shù)據(jù)就可以通過WiFi模塊進行傳輸,發(fā)送結(jié)束標志“+++”來停止數(shù)據(jù)的傳輸。
3.2? 網(wǎng)絡協(xié)議概述
TCP/IP協(xié)議共分為Internet層、傳輸層以及應用層,分別對應IP協(xié)議、TCP/UDP傳輸協(xié)議和應用層協(xié)議。IP協(xié)議和TCP/UDP協(xié)議是基礎,而應用層協(xié)議則基于前者并可針對不同項目進行定制。本文根據(jù)所設計的內(nèi)容,采用異步通信的方法來定制應用層協(xié)議;同時由于測試點與上位機IP會發(fā)生變化,所以將兩端都設置為TCP客戶端。
3.3? 應用層協(xié)議的工作流程
應用層協(xié)議的報文段主要由用戶密碼、同步和異步數(shù)據(jù)類型選擇位、客戶ID和數(shù)據(jù)內(nèi)容4部分組成。該協(xié)議工作流程如圖2所示,TCP客戶端在接入后,開啟線程并驗證密碼,若密碼正確,則打開TCP連接。隨后應用層協(xié)議會判斷接收數(shù)據(jù)和發(fā)送數(shù)據(jù),若為接收數(shù)據(jù),協(xié)議會提取用戶ID并判斷同步還是異步數(shù)據(jù)。當為異步數(shù)據(jù)時,則會判斷該數(shù)據(jù)是需要存儲還是發(fā)送。當數(shù)據(jù)長度和設定的數(shù)據(jù)長度相同時,協(xié)議會將該數(shù)據(jù)存儲在對應客戶ID下并等待提取;當數(shù)據(jù)內(nèi)容為空時,則會將存儲的數(shù)據(jù)進行發(fā)送,最后關(guān)閉TCP連接。
3.4? 基于Socket的Java編程
本文在Java中通過調(diào)用java.net包來進行網(wǎng)絡編程。系統(tǒng)設計的通信協(xié)議主要應用的類為ServerSocket和Socket:在ServerSocket類中,構(gòu)造方法為ServerSocket(int port);Socket類則主要用來發(fā)送和接收數(shù)據(jù)。此外,由于設定服務區(qū)端口為8086,所以創(chuàng)建端口的語句則為:ServerSocketssocket = new ServerSocket(8086)。
發(fā)送和接收數(shù)據(jù)主要用到Socket類中的getInputStream( )方法和getOutputStream( )方法。發(fā)送數(shù)據(jù)的語句為:
PrintStream printstream = new PrintStream(SOCKET.getOutputStream());
printstream.println(ARRAY_DATA);
//(ARRAY_DATA)為將要發(fā)送的數(shù)據(jù)
printstream.close();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//關(guān)閉TCP連接
接收數(shù)據(jù)時,程序語句為:
Socket input = SOCKET.getInputStream();
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(input));? ? ? ? ? ? ? ? ? ? ?//接收數(shù)據(jù)打包成流
String MESSAGE = bufferedreader.readline();
//將打包成流的數(shù)據(jù)存儲
4? 系統(tǒng)測試與數(shù)據(jù)分析
系統(tǒng)硬件與軟件設計完成后,制作樣機進行試驗測試,驗證系統(tǒng)的可行性與可靠性。
本文在石家莊地區(qū)進行實際應用測驗,將監(jiān)測終端分別分布在石家莊站、河北省博物館以及石家莊市萬達廣場,三地相互距離為5 km以上。為監(jiān)測終端系統(tǒng)上電后,選擇無線模塊為STA模式,通過無線網(wǎng)絡接入Internet,選擇工作模式為TCP客戶端,輸入編寫的通信協(xié)議IP地址47.94.164.217,目標端口設置為8086。當顯示連接成功后,測試端就可以在TFTLCD顯示屏實時顯示溫濕度數(shù)據(jù),并將其發(fā)送給網(wǎng)絡服務器。其中,發(fā)送溫濕度測量值實現(xiàn)算法如下:
T_H[0] = (temperature/10);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //溫度
T_H[1] = temperature%10;
T_H[2] = (humidity/10);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //濕度
T_H[3] = (humidity%10);
設置發(fā)送數(shù)據(jù)長度為37,發(fā)送數(shù)據(jù)的報文段格式為testAM000x。其中,test為設定密碼,AM代表異步通信,000x為監(jiān)測點ID(x=1,2,…),監(jiān)測點編號按順序依次為河北省圖書館、石家莊站以及石家莊市萬達廣場。圖3為溫濕度監(jiān)測點1數(shù)據(jù)的顯示。
監(jiān)測端通過登錄網(wǎng)絡協(xié)議并打開網(wǎng)絡調(diào)試助手,選擇協(xié)議類型同樣為TCP客戶端,服務器IP地址為47.94.164.217,端口設置為8086。連接建立好后,ARM處理器會每隔5 s向服務器端發(fā)送數(shù)據(jù),網(wǎng)絡調(diào)試助手會接收到存儲在服務器中的數(shù)據(jù),接收數(shù)據(jù)的報文段格式為testAM000x+37位數(shù)據(jù)。監(jiān)測點ARM處理器不斷向服務器發(fā)送數(shù)據(jù),若想調(diào)取監(jiān)測點數(shù)據(jù),則需發(fā)送測試點相應ID的報文段。圖4為發(fā)送相應報文段后調(diào)取并接收到的3個測試點部分溫濕度數(shù)據(jù)。其中,接收到的數(shù)據(jù)格式為測試點編號+日期+時間+溫度+濕度。
以2019年3月12日為例,在10:00—18:00期間,每隔15 min采集各監(jiān)測點溫濕度數(shù)據(jù)一次,共33組,并將監(jiān)測到的數(shù)據(jù)與溫濕度實際標準值做對比,來驗證系統(tǒng)監(jiān)測的準確性。圖5分別為監(jiān)測點1,2,3監(jiān)測數(shù)據(jù)與實際標準值的對比。其中,誤差值已做出標記。
測試誤差結(jié)果如表1所示。
從誤差數(shù)據(jù)可以看出,本系統(tǒng)在實際測量中誤差個數(shù)少,誤差范圍低,準確率高;在無線傳輸過程中運行穩(wěn)定,沒有丟失數(shù)據(jù)的情況,且不受傳輸距離的限制,能實時準確地監(jiān)測多點溫濕度。
5? 結(jié)? 論
本文設計一種基于網(wǎng)絡協(xié)議+無線模塊的多路溫濕度數(shù)據(jù)采集與遠程無線傳輸系統(tǒng)。通過運用Java進行網(wǎng)絡通信協(xié)議編程,解決了目前遠程無線數(shù)據(jù)傳輸?shù)木嚯x受限問題與租用公網(wǎng)的成本問題;監(jiān)測終端組成簡單,穩(wěn)定性高,可擴展監(jiān)測多種室內(nèi)環(huán)境數(shù)據(jù),且各模塊成本低;可在三棟建筑內(nèi)放置更多監(jiān)測點以及更多建筑內(nèi)放入監(jiān)測終端。實驗結(jié)果證明,本文系統(tǒng)具有性能穩(wěn)定、傳輸距離遠、準確度高、可擴展能力強和成本較低等特點,使得消防系統(tǒng)可準確掌握各建筑內(nèi)各點環(huán)境數(shù)據(jù),以及時響應現(xiàn)場聯(lián)動控制,適用于樓宇消防環(huán)境監(jiān)測,具有很好的應用價值。
參考文獻
[1] KUO Y W, LI C L, JHANG J H, et al. Design of a wireless sensor network?based IoT platform for wide area and heterogeneous applications [J]. IEEE sensors journal, 2018, 18(12): 5187?5197.