范鵬程 陳鐘榮
摘要:研究了一種新的基于WebSocket技術(shù)的溫濕度監(jiān)控系統(tǒng),介紹了系統(tǒng)的總體設(shè)計(jì),包含數(shù)據(jù)采集和數(shù)據(jù)傳輸兩大模塊,系統(tǒng)采用了W5500網(wǎng)絡(luò)芯片以及AM2302數(shù)字溫濕度傳感器,在HTTP協(xié)議的基礎(chǔ)上進(jìn)行了應(yīng)用開發(fā)。結(jié)果表明,基于WebSocket技術(shù)的溫濕度監(jiān)控系統(tǒng)具有成本低、數(shù)據(jù)傳輸靈活實(shí)時(shí)等優(yōu)點(diǎn),并可廣泛應(yīng)用于需要溫濕度監(jiān)控的場(chǎng)所。
關(guān)鍵詞:W5500網(wǎng)絡(luò)芯片;HTTP協(xié)議;溫濕度監(jiān)控;系統(tǒng)
中圖分類號(hào):P412.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):0439-8114(2016)06-1558-04
DOI:10.14088/j.cnki.issn0439-8114.2016.06.050
溫度和濕度是衡量環(huán)境的重要指標(biāo)。在農(nóng)業(yè)生產(chǎn)、工業(yè)控制、倉(cāng)庫存儲(chǔ)等領(lǐng)域里,溫濕度監(jiān)控設(shè)備成為研究的重點(diǎn),并正在走向大規(guī)模的實(shí)施階段。傳統(tǒng)的溫濕度監(jiān)測(cè)設(shè)備大多數(shù)采用有線方式,其優(yōu)點(diǎn)是可靠穩(wěn)定,而缺點(diǎn)是布線困難、可移動(dòng)性差。針對(duì)這些問題與不足,本研究以高性能ARM芯片STM32為核心的溫濕度監(jiān)控系統(tǒng),采用最新的WebSocket技術(shù),實(shí)現(xiàn)了遠(yuǎn)程溫濕度的實(shí)時(shí)監(jiān)測(cè)。
1 系統(tǒng)總體結(jié)構(gòu)
溫濕度監(jiān)控系統(tǒng)主要由數(shù)據(jù)采集模塊、主控制模塊、以太網(wǎng)模塊等模塊組成。數(shù)據(jù)采集模塊是傳感器在主控制器的驅(qū)動(dòng)下完成對(duì)溫濕度數(shù)據(jù)的采集,主控制模塊使用的是高性能Cortex-M3內(nèi)核的STM32處理器,可以完成對(duì)數(shù)據(jù)采集模塊的控制以及對(duì)采集數(shù)據(jù)的數(shù)據(jù)處理工作,處理完成的數(shù)據(jù)通過以太網(wǎng)模塊W5500發(fā)送至客戶端。
2 系統(tǒng)硬件設(shè)計(jì)
2.1 溫濕度傳感器模塊
溫濕度數(shù)據(jù)采集使用AM2302濕敏電容數(shù)字溫濕度模塊,它是一款含有己校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器,應(yīng)用溫濕度傳感技術(shù)和數(shù)字模塊采集技術(shù),具有極高的可靠性和長(zhǎng)期的穩(wěn)定性[1,2],傳感器引腳名稱描述如表1所示。
該傳感器采用單線制串行接口,與單片機(jī)之間僅僅需要一個(gè)I/O口就能夠采集到本地的溫度和濕度,其與單片機(jī)的典型連接如圖1所示。
2.2 以太網(wǎng)模塊
以太網(wǎng)模塊使用WIZnet公司生產(chǎn)的W5500芯片,該芯片直接采用硬件協(xié)議棧實(shí)現(xiàn)網(wǎng)絡(luò)連接,主要應(yīng)用在性能高和成本低的嵌入式系統(tǒng)中,具有設(shè)計(jì)簡(jiǎn)單方便、應(yīng)用快捷靈活等特點(diǎn)。W5500芯片內(nèi)部集成全硬件TCP/IP協(xié)議棧、10/100M以太網(wǎng)介質(zhì)傳輸層MAC和物理層PHY,支持TCP、ARP、IGMP等協(xié)議,同時(shí)W5500內(nèi)部還集成有32 Kb存儲(chǔ)器用作TX/RX緩存以供以太網(wǎng)包處理,使用W5500芯片僅需要一些簡(jiǎn)單的Socket編程就能實(shí)現(xiàn)以太網(wǎng)的應(yīng)用,這樣可以為嵌入式的設(shè)計(jì)開發(fā)提供硬件參考。
W5500芯片提供了SPI接口,容易與STM32處理器進(jìn)行通信,而且W5500芯片使用了新的高效SPI協(xié)議,支持80 MHz速率,能夠更好地實(shí)現(xiàn)高速網(wǎng)絡(luò)通信。如圖2所示,本設(shè)計(jì)采用SPI接口將STM32處理器和以太網(wǎng)模塊連接構(gòu)成以太網(wǎng)接口電路[3,4],其中RJ-45接口作為以太網(wǎng)通信接口是實(shí)現(xiàn)Internet接入的樞紐,網(wǎng)絡(luò)傳輸狀態(tài)指示燈指示網(wǎng)絡(luò)的工作狀態(tài)是否正常。
3 系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)的硬件設(shè)計(jì)相對(duì)比較簡(jiǎn)單,軟件設(shè)計(jì)是核心工作,軟件設(shè)計(jì)工作主要包括HTTP協(xié)議處理流程和WebSocket處理函數(shù)流程。本設(shè)計(jì)中使用W5500芯片的2個(gè)Socket資源,一個(gè)用來創(chuàng)建HTTP服務(wù)器,在客戶端瀏覽器中輸入配置的IP地址就能遠(yuǎn)程訪問硬件系統(tǒng);另一個(gè)用來創(chuàng)建WebSocket服務(wù)器,與網(wǎng)頁端建立通信來傳輸溫濕度數(shù)據(jù)。軟件設(shè)計(jì)的總體流程如圖3所示。
3.1 HTTP協(xié)議及處理流程
HTTP(超文本傳輸協(xié)議)是因特網(wǎng)中在Web服務(wù)器和客戶瀏覽器之間傳輸數(shù)據(jù)使用的協(xié)議。首先,HTTP協(xié)議是TCP/IP模型中應(yīng)用層一個(gè)面向?qū)ο蟮膮f(xié)議,在HTTP工作開始前,瀏覽器與服務(wù)器之間要建立TCP連接,然后瀏覽器向服務(wù)器發(fā)送請(qǐng)求信息,服務(wù)器接受到請(qǐng)求信息之后返回響應(yīng)信息,瀏覽器接收到服務(wù)器的響應(yīng)信息后,對(duì)數(shù)據(jù)進(jìn)行處理執(zhí)行。如圖4所示,即HTTP協(xié)議傳輸數(shù)據(jù)的基本過程。
在STM32處理器和W5500芯片搭建的硬件平臺(tái)上,要實(shí)現(xiàn)HTTP服務(wù)器的通信過程,分為以下幾個(gè)步驟:
1)初始化服務(wù)器。完成Web服務(wù)器的初始化,W5500芯片作為Web服務(wù)器,首先分配Socket去監(jiān)聽HTTP請(qǐng)求。
2)接受并解析客戶端請(qǐng)求。當(dāng)Socket連接建立完成后,W5500芯片接收來自客戶端的HTTP請(qǐng)求并進(jìn)行分析。
3)回應(yīng)響應(yīng)消息。如果請(qǐng)求方法為GET,則先返回響應(yīng)首部,再將客戶端請(qǐng)求的URL目標(biāo)文件從內(nèi)存中讀出,作為HTTP應(yīng)答發(fā)送給客戶端[5]。
4)關(guān)閉。HTTP 響應(yīng)消息完成后,關(guān)閉與客戶端的連接。
由于Web服務(wù)器和瀏覽器在通信時(shí)使用TCP協(xié)議工作,根據(jù)SOCK_HTTP之間狀態(tài)的不同,執(zhí)行不同的操作。http( )函數(shù)就實(shí)現(xiàn)了Web服務(wù)器接受請(qǐng)求和回復(fù)響應(yīng)的全過程。以下是對(duì)http( )函數(shù)部分重點(diǎn)語句的詳細(xì)解釋以及HTTP服務(wù)器實(shí)現(xiàn)的具體流程[6],如圖5所示。
void do_http( )
{
uint8 ch=SOCK_HTTP; //定義了HTTP通信的Socket端口變量
…………
switch(getSn_SR(ch)) //獲取Socket的狀態(tài)
{
case SOCK_INIT: //Socket狀態(tài)初始化
listen(ch); //Web服務(wù)器的監(jiān)聽
break;
case SOCK_LISTEN: //Socket監(jiān)聽狀態(tài)
break;
case SOCK_ESTABLISHED: //Socket建立連接成功
…………
len = recv(ch, (uint8*)http_request, len); //接收來自客戶端的請(qǐng)求
proc_http(ch, (uint8*)http_request);//解析HTTP請(qǐng)求,并發(fā)送HTTP Response
disconnect(ch); //斷開TCP連接
break;
case SOCK_CLOSE_WAIT: //Socket等待關(guān)閉狀態(tài)
…………
disconnect(ch); // 斷開TCP連接
break;
case SOCK_CLOSED: // Socket 關(guān)閉狀態(tài)
Socket(ch, Sn_MR_TCP, 80, 0x20)//重新初始化Socket端口,等待下一次連接
break;
}
}
3.2 WebSocket處理流程
WebSocket是HTML5規(guī)范中的一個(gè)重要組成部分,是下一代客戶端服務(wù)器的異步通信方法。WebSocket協(xié)議是一種雙向通信協(xié)議,建立在TCP基礎(chǔ)之上,同http一樣通過TCP來傳輸數(shù)據(jù)[7]。
當(dāng)在客戶端瀏覽器上訪問硬件的IP地址,會(huì)向W5500芯片發(fā)送http請(qǐng)求,W5500芯片在收到請(qǐng)求后將網(wǎng)頁信息發(fā)送給瀏覽器,瀏覽器就能顯示溫濕度檢測(cè)系統(tǒng)的主界面。在網(wǎng)頁的代碼中,瀏覽器會(huì)主動(dòng)連接W5500芯片的WebSocket,在完成握手操作后數(shù)據(jù)通信通道即可建立。這樣硬件就可以將溫濕度數(shù)據(jù)發(fā)送給瀏覽器端,瀏覽器在收到溫濕度數(shù)據(jù)后,使用畫布功能,在指定位置畫出溫濕度示數(shù)的點(diǎn)和曲線。WebSocket處理函數(shù)具體流程如圖6所示。
WebSocket服務(wù)器和客戶端之間交互過程大致分為以下4個(gè)步驟并且給出了函數(shù)原型:
1)為了創(chuàng)建一個(gè)WebSocket連接,需要?jiǎng)?chuàng)建一個(gè)WebSocket接口傳入Web服務(wù)URL地址,sensorWebSocket會(huì)試圖連接監(jiān)聽于相應(yīng)的URL服務(wù)。
varwsUri=‘ws:192.168.3.171:1818′;
sensorWebSocket=newWebSocket(wsUri);
2)注冊(cè)事件并為事件鏈接相應(yīng)處理函數(shù),例如,當(dāng)瀏覽器頁面收到來自服務(wù)器端的數(shù)據(jù)后,觸發(fā)onmessage事件,進(jìn)而調(diào)用onMessage函數(shù)。
sensorWebSocket.onmessage=function(evt){onMessage(evt)};
代碼中還注冊(cè)了onopen、onclose和onerror 3個(gè)事件,onopen表示W(wǎng)ebSocket建立連接完成,onclose表示W(wǎng)ebSocket連接被關(guān)閉或無法建立連接,onerror表示W(wǎng)ebSocket發(fā)生錯(cuò)誤。
3)消息處理函數(shù),在硬件上將采集來的溫濕度數(shù)據(jù)用‘.號(hào)連接,在瀏覽器端接收到數(shù)據(jù)后,使用字符串分割函數(shù)將溫度和濕度數(shù)據(jù)分割,存儲(chǔ)在一個(gè)數(shù)組對(duì)象里,之后將數(shù)據(jù)轉(zhuǎn)化成坐標(biāo)值在畫布上顯示出來。
functiononMessage(evt)
{
vararrayTH=new Array(2);
arrayTH=evt.data.split(‘.);
……
}
4)主動(dòng)關(guān)閉WebSocket連接
sensorWebSocket.close();
有了WebSocket這個(gè)功能就可以與遠(yuǎn)程服務(wù)器連接并接受和發(fā)送消息,該功能在雙向通信方面十分有用,特別是在服務(wù)器需要主動(dòng)向?yàn)g覽器頁面發(fā)送消息時(shí)。
4 客戶端的數(shù)據(jù)監(jiān)測(cè)
程序中設(shè)定Web服務(wù)器的IP地址為192.168.3.171,客戶端PC機(jī)也位于同一網(wǎng)段,設(shè)定IP地址為192.168.3.18。在PC機(jī)瀏覽器地址欄輸入嵌入式Web服務(wù)器的IP地址192.168.3.171,運(yùn)行結(jié)果如圖7所示,在測(cè)試期間可以使用加濕器來增加空氣中濕度。
5 小結(jié)
隨著信息化的推進(jìn)與網(wǎng)絡(luò)技術(shù)的發(fā)展,嵌入式系統(tǒng)設(shè)備實(shí)現(xiàn)網(wǎng)絡(luò)連接成為了一大趨勢(shì)。本研究設(shè)計(jì)了一種基于WebScoket的溫濕度監(jiān)測(cè)系統(tǒng)方案,實(shí)現(xiàn)實(shí)時(shí)更新,降低數(shù)據(jù)流量和網(wǎng)絡(luò)延遲,減輕服務(wù)器負(fù)擔(dān)。W5500芯片的使用,比其嵌入式以太網(wǎng)方案更加快捷、方便實(shí)現(xiàn)溫濕度監(jiān)測(cè),可用于農(nóng)業(yè)生產(chǎn)、工業(yè)控制、倉(cāng)庫儲(chǔ)存等多個(gè)領(lǐng)域。
參考文獻(xiàn):
[1] 王東濤,鞠鳳船.農(nóng)業(yè)大棚溫濕度監(jiān)控系統(tǒng)設(shè)計(jì)[J].安徽農(nóng)業(yè)科學(xué),2010,38(35):20446-20447.
[2] 劉繼忠,邱于兵,黃 翔.基于ARM的遠(yuǎn)程溫濕度監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)[J].儀表技術(shù)與傳感器,2012(8):90-92.
[3] 于春雪.W5100在遠(yuǎn)程電力質(zhì)量監(jiān)測(cè)設(shè)備中的應(yīng)用[J].電力系統(tǒng)通信,2011,32(9):59-64.
[4] 陳 實(shí),王 琪,張鐵軍,等.一種基于W5100的數(shù)據(jù)傳輸系統(tǒng)[J].電子技術(shù)應(yīng)用,2013,39(9):54-56.
[5] 高 嵩.基于HTTP協(xié)議的嵌入式遠(yuǎn)程監(jiān)控系統(tǒng)的研究[D].北京:北京工業(yè)大學(xué),2009.
[6] 林笑君.基于Cortex-M3的嵌入式WEB服務(wù)器監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].太原:太原理工大學(xué),2013.
[7] 鄭 玲,鄭曉天.基于WebSocket的電力系統(tǒng)實(shí)時(shí)數(shù)據(jù)更新研究[J].計(jì)算機(jī)與現(xiàn)代化,2013(1):85-87.