吳輝,侯思祖
(華北電力大學(xué) 電氣與電子工程學(xué)院,保定071003)
隨著物聯(lián)網(wǎng)和移動互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,進(jìn)一步推動了嵌入式系統(tǒng)網(wǎng)絡(luò)化進(jìn)程,使得嵌入式系統(tǒng)變得越來越智能。由于芯片制造工藝的顯著提高,各種高性能的處理器相繼推出,使用嵌入式系統(tǒng)接入Internet成為一種趨勢[1]。把 Web技術(shù)用于遠(yuǎn)程監(jiān)控或其他嵌入式系統(tǒng)中,用戶通過瀏覽器就可以對遠(yuǎn)程設(shè)備進(jìn)行控制和監(jiān)測,使得用戶能夠?qū)崟r地了解設(shè)備的運(yùn)行情況。
嵌入式系統(tǒng)是一種專用的計算機(jī)系統(tǒng),是為某種應(yīng)用而定制的計算機(jī)系統(tǒng)。嵌入式Internet是指設(shè)備通過嵌入式模塊接入Internet,以Internet作為傳輸介質(zhì)實(shí)現(xiàn)信息的交互與訪問。一個帶有微處理器并且能夠連接Internet的設(shè)備就是一個嵌入式Internet系統(tǒng)。可以通過Web進(jìn)行信息交互的嵌入式Internet系統(tǒng)被稱作嵌入式Web服務(wù)器。嵌入式Web服務(wù)器具有體積小、成本低、功能簡單等特點(diǎn)。
嵌入式Web服務(wù)器以LM3S8962為核心,LM3S8962集成豐富的片上資源:含有256KB單周期Flash、64KB單周期訪問的SRAM、4個通用定時模塊、1個10/100M以太網(wǎng)控制器、三個可編程UART接口等。LM3S8962以太網(wǎng)控制器遵循IEEE802.3規(guī)范,完全支持10BASE-T和100BASE-TX標(biāo)準(zhǔn),含有100BASE-TX擾碼器、解碼器,支持全功能的自協(xié)商協(xié)議,支持全雙工、半雙工和掉電模式,而且具有可編程MAC地址。采用LM3S8962可省略網(wǎng)絡(luò)控制芯片。溫度采集主要由LM3S8962內(nèi)部溫度傳感器實(shí)現(xiàn),采樣率可達(dá)500 000sps。光強(qiáng)采集由小塊的太陽能電板代替光傳感器,太陽能電板根據(jù)光強(qiáng)的變化改變輸出電壓。通過A/D轉(zhuǎn)換器檢測電壓的變化來判斷光強(qiáng)的變化。LED亮度通過調(diào)節(jié)輸出PWM的占空比來改變。嵌入式Web交互式框圖如圖1所示。
圖1 嵌入式Web交互式框圖
Web通信是基于TCP協(xié)議進(jìn)行的,但它與一般的TCP協(xié)議不同的是,在TCP通信的基礎(chǔ)之上經(jīng)過HTTP協(xié)議傳輸??蛻舳送ㄟ^Web頁面請求數(shù)據(jù),嵌入式Web服務(wù)器收到客戶端發(fā)送的HTTP請求時,作出對應(yīng)的響應(yīng),從而完成客戶端與嵌入式Web服務(wù)器之間數(shù)據(jù)的動態(tài)交互。
CGI(Common Gateway Interface)是一段程序,運(yùn)行在嵌入式Web服務(wù)器上,提供與瀏覽器HTML頁面的接口。簡單地說就是用戶在客戶端(瀏覽器)中輸入信息,瀏覽器把這些信息傳輸?shù)角度胧絎eb服務(wù)器CGI目錄下對應(yīng)的CGI程序中,于是CGI程序在嵌入式Web服務(wù)器上按照預(yù)定的方法進(jìn)行處理。然后,CGI程序給客戶端發(fā)送一個信息,表示請求的任務(wù)已經(jīng)結(jié)束。
SSI(Server Side Include,服務(wù)器端包含)是一種類似于ASP的基于服務(wù)器的網(wǎng)頁制作技術(shù)。在將內(nèi)容發(fā)送到瀏覽器之前,可以使用“服務(wù)器端包含 (SSI)”指令將文本、圖形或應(yīng)用程序信息包含到網(wǎng)頁中。服務(wù)器接收到一個請求后,會在網(wǎng)頁數(shù)據(jù)中搜索<!--#tag-->格式標(biāo)記,并記錄這些tag標(biāo)志,在嵌入式Web服務(wù)器處理完請求后需要返回給用戶數(shù)據(jù)時,找出系統(tǒng)已經(jīng)注冊的tag,并在相應(yīng)的tag-->后添加所需要的數(shù)據(jù)。最后,把更新的數(shù)據(jù)發(fā)送給用戶,從而實(shí)現(xiàn)了用戶與嵌入式Web服務(wù)器之間的動態(tài)交互過程。
XMLHTTPRequest是由一組方法和屬性組成的對象,是AJAX技術(shù)的核心,所謂的異步交互和局部刷新都是建立在XMLHTTPRequest基礎(chǔ)之上的。XMLHTTPRequest可以在提供不重新加載頁面的情況下更新網(wǎng)頁,XMLHTTPRequest對象提供了對HTTP協(xié)議的完全的訪問,包括做出POST和HEAD請求以及普通的GET請求的能力。利用JavaScript來創(chuàng)建XMLHTTPRequest對象,當(dāng)對象成功創(chuàng)建以后,調(diào)用open方法來指定請求的服務(wù)網(wǎng)頁以及請求方式,然后通過send方法將請求發(fā)送出去,最后就可以在客戶端接收服務(wù)器端返回的數(shù)據(jù)。
嵌入式Web服務(wù)器監(jiān)聽用戶的請求,根據(jù)用戶遞交的請求提供與之對應(yīng)的服務(wù),嵌入式Web服務(wù)器端收到用戶請求后,把存儲在嵌入式Web服務(wù)器中對應(yīng)的數(shù)據(jù)或網(wǎng)頁發(fā)送給瀏覽器,完成數(shù)據(jù)的動態(tài)交互。嵌入式Web數(shù)據(jù)交互式可以通過CGI/SSI和XMLHTTPRequest方式實(shí)現(xiàn)。
CGI是基于標(biāo)準(zhǔn)HTML表單遞交數(shù)據(jù),嵌入式Web服務(wù)器上對應(yīng)的CGI函數(shù)響應(yīng)客戶端的請求,CGI方式數(shù)據(jù)交互將導(dǎo)致整個頁面重新加載。HTML中表單格式如下:
CGI交互式過程如圖2所示。用戶通過Internet向嵌入式Web服務(wù)器請求一個HTML文檔。嵌入式Web服務(wù)器向用戶發(fā)送一個表單頁面。用戶填入對應(yīng)的數(shù)據(jù)信息并提交給嵌入式Web服務(wù)器。服務(wù)器接收用戶請求,交給嵌入式Web服務(wù)器上CGI程序處理。嵌入式Web服務(wù)器將更新的HTML文檔發(fā)送給用戶。
圖2 瀏覽器與嵌入式Web通過CGI交互
當(dāng)用戶向嵌入式Web服務(wù)器提交數(shù)據(jù)時,采用的是GET方式。輸入的信息以字符串的形式附加action所給定義的URL后面,中間用“?”隔開,各個變量之間用“&”分開,變量與其對應(yīng)的值之間用“=”連接,空格用“+”代替,特殊意義的字符用“&”表示。在嵌入式 Web服務(wù)器端對URL進(jìn)行解碼,當(dāng)遇到字符“+”時,將它轉(zhuǎn)換成空格;當(dāng)遇到字符“&”時,表示下一個變量開始;當(dāng)遇到“=”時表示變量名部分結(jié)束[2]。由于GET請求的內(nèi)容附加在URL后面,而URL的長度是有限制的,所以一次請求的內(nèi)容不能太多,而嵌入式系統(tǒng)由于其本身就是資源受限系統(tǒng),數(shù)據(jù)的交互不可能太多,所以GET方法用于此是合適的。
CGI處理函數(shù)運(yùn)行于嵌入式Web服務(wù)器端,當(dāng)嵌入式Web服務(wù)器收到客戶端請求的URL之后,解析URL中的參數(shù),提交給對應(yīng)的CGI處理函數(shù)。字符文本提交的CGI函數(shù)如下:
當(dāng)在Web頁面中遇到格式為<?。?tag-->的SSI標(biāo)簽時,調(diào)用SSI處理函數(shù),將SSI標(biāo)簽轉(zhuǎn)換成對應(yīng)的文本在網(wǎng)頁中顯示。SSI函數(shù)通過Switch選擇語句,解析Web頁面中的SSI標(biāo)簽。然后針對不同的標(biāo)簽內(nèi)容作出對應(yīng)的響應(yīng)。CGI/SSI數(shù)據(jù)交互流程如圖3所示。
圖3 CGI/SSI數(shù)據(jù)交互流程
XMLHTTPRequest方式通過嵌入在HTML文檔中的JavaScript來實(shí)現(xiàn)網(wǎng)頁的交互過程。客戶端通過運(yùn)行HTML文檔中的JavaScript程序發(fā)送HTTP請求。它是一種特殊的URL,嵌入式Web服務(wù)器去文件系統(tǒng)中查找URL中對應(yīng)的文件。如果查找到對應(yīng)的文件,嵌入式Web服務(wù)器提供相應(yīng)的響應(yīng),然后將嵌入式Web響應(yīng)返回到客戶端瀏覽器中,返回的狀態(tài)插入到對應(yīng)的<Div>標(biāo)簽中。XMLHTTPRequest方式只需要更新部分文本,而不需要刷新整個頁面,縮短了網(wǎng)絡(luò)延時,提高了網(wǎng)絡(luò)效率。瀏覽器與嵌入式Web通過XMLHTTPRequest方式交互,如圖4所示。
圖4 瀏覽器與嵌入式Web通過HTTPRequest方式交互
JavaScript可以將Web服務(wù)器端的任務(wù)部分轉(zhuǎn)移到客戶端,使客戶端實(shí)現(xiàn)處理任務(wù)的功能。XMLHTTPRequest能實(shí)現(xiàn)嵌入式Web與瀏覽器之間的異步交互。JavaScript內(nèi)嵌到網(wǎng)頁中,使其成為HTML文件的一部分,并通過JavaScript解釋器完成解釋執(zhí)行。瀏覽器中溫度數(shù)據(jù)請求JavaScript函數(shù)如下:
上述代碼中,Temperature.readyState為HTTP請求的狀態(tài),當(dāng)XMLHttpRequest創(chuàng)建時,其屬性為0。它一共有5個狀態(tài):Uninitialized(0)、Open(1)、Send(2)、Receiving(3)、Loaded(4)。當(dāng)屬性為4時,表明已經(jīng)接收到完整的HTTP響應(yīng)。Temperature.responseText從服務(wù)器接收的響應(yīng)的溫度信息,當(dāng)Temperature.readyState小于3時,其屬性為空字符串;當(dāng)Temperature.readyState為4時,其中保存了完整的溫度信息,Temperature.status為服務(wù)器返回的狀態(tài)碼,200表示成功,404表示"Not Found"。Temperature.onreadystatechange為調(diào)用的事件句柄函數(shù),每次Temperature.readyState屬性改變時被調(diào)用。Temperature.open()為初始化 HTTP請求參數(shù),send()發(fā)送HTTP請求。
服務(wù)器端解析對應(yīng)文件名“/cgi-bin/Temperature-Get”,如果存在對應(yīng)的文件,則返回一個消息,客戶端接收到這個消息并且存儲溫度信息到對應(yīng)請求的響應(yīng)文本Temperature.response Text中,使用文本插入方法“document.getElementById("Temperaturestate").innerHTML= "<div>"+ TemperaturestateresponseText+ "</div>";”把消息在網(wǎng)頁中對應(yīng)的DIV位置處顯示。
系統(tǒng)測試分本機(jī)測試與局域網(wǎng)測試兩種方式。本機(jī)測試就是嵌入式Web服務(wù)器通過網(wǎng)線直接連接到PC,局域網(wǎng)測試則是將嵌入式Web服務(wù)器連接到局域網(wǎng)中的路由器上。復(fù)位嵌入式Web服務(wù)器,查看其IP地址,同時修改客戶端的IP,使其與嵌入式Web服務(wù)器處于同一網(wǎng)段中。在客戶端通過“ping 169.254.117.2”(嵌入式 Wb IP)查看網(wǎng)絡(luò)連接狀態(tài)。成功連接后,在客戶端瀏覽器中輸入“http://169.254.117.2”地址后,瀏覽器中會顯示嵌入式Web交互式頁面,如圖5所示。通過點(diǎn)擊對應(yīng)的按鈕,可以在瀏覽器中獲得各種請求數(shù)據(jù)。在文本框中輸入文本,將數(shù)據(jù)存入嵌入式Web服務(wù)器中,同時存入信息會在嵌入式Web的LCD上顯示出來。通過本地和局域網(wǎng)測試,系統(tǒng)性能良好,可應(yīng)用性強(qiáng)。
利用嵌入式系統(tǒng)及Internet技術(shù)可以實(shí)現(xiàn)Web動態(tài)數(shù)據(jù)交互,通過CGI和XMLHTTPRequest方式,成功地在基于LM3S8962平臺上完成局域網(wǎng)內(nèi)Web頁面數(shù)據(jù)動態(tài)交互,實(shí)現(xiàn)了一個簡易的嵌入式Web服務(wù)器的功能。嵌入式Web動態(tài)交互技術(shù)在工業(yè)生產(chǎn)的過程控制、機(jī)房環(huán)境參數(shù)的監(jiān)測以及遠(yuǎn)程數(shù)據(jù)采集等方面都有廣泛的應(yīng)用需求。
圖5 瀏覽器端驗(yàn)證測試
[1]牛利兵.遠(yuǎn)程監(jiān)控嵌入式Web服務(wù)器的設(shè)計[D].山西:太原理工大學(xué),2011.
[2]李勇.CGI在嵌入式 WEB服務(wù)器中的應(yīng)用和實(shí)現(xiàn)[J].微計算機(jī)信息,2008,24(10):110-112.
[3]彭偉.XMLHttp對象在嵌入式 Web實(shí)時系統(tǒng)中的應(yīng)用[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2011(11):29-32.
[4]Texas Instruments.Stellaris LM3S8962Microcontroller DataSheet[EB/OL].[2013-01-06].http://www.ti.com/cn/litv/pdf/spms001h.