摘要:探討了基于Linux的嵌入式Web Server系統(tǒng)在溫室設(shè)備監(jiān)控系統(tǒng)中的應(yīng)用,。提出一種基于嵌入式和Web技術(shù)的溫室設(shè)備監(jiān)控系統(tǒng)方案,使管理者可以通過(guò)Intemet利用Web瀏覽器完成對(duì)遠(yuǎn)程設(shè)備的訪問(wèn),、監(jiān)控和維護(hù)等操作,,無(wú)需安裝特定軟件,具有跨平臺(tái)性,,有效解決利用有限資源實(shí)現(xiàn)設(shè)備的網(wǎng)絡(luò)接入問(wèn)題,。實(shí)際運(yùn)行效果表明該系統(tǒng)具有良好的穩(wěn)定性與實(shí)時(shí)性,具有實(shí)際應(yīng)用和推廣價(jià)值,。
關(guān)鍵詞:嵌入式Web,;智能溫室;監(jiān)控系統(tǒng),;CGI
智能溫室監(jiān)控系統(tǒng)是近年來(lái)發(fā)展起來(lái)的節(jié)約型設(shè)施農(nóng)業(yè)技術(shù),,通過(guò)計(jì)算機(jī)綜合控制,在充分利用自然資源的基礎(chǔ)上,,調(diào)節(jié)溫度,、濕度、光照強(qiáng)度等環(huán)境因素來(lái)獲得作物生長(zhǎng)的最佳條件,,從而達(dá)到提高作物產(chǎn)量,、改善品質(zhì)、增加經(jīng)濟(jì)效益的目的,。嵌入式系統(tǒng)與Intemet技術(shù)的結(jié)合是當(dāng)今發(fā)展的趨勢(shì),,如何將嵌入式產(chǎn)品與Internet連接起來(lái)實(shí)現(xiàn)室內(nèi)設(shè)備的統(tǒng)一監(jiān)控與管理,通過(guò)Internet實(shí)現(xiàn)對(duì)設(shè)備行為的訪問(wèn)與交互是目前研究的熱點(diǎn),。本文提出一種基于嵌入式Web技術(shù)的智能溫室監(jiān)控系統(tǒng)設(shè)計(jì)方案,,系統(tǒng)以嵌入式處理器作為上位機(jī),通過(guò)構(gòu)建嵌入式Web服務(wù)器,,借助CGI(Common Gateway Interface)技術(shù)控制中心與嵌入式Web服務(wù)器端之間的動(dòng)態(tài)數(shù)據(jù)交互,,來(lái)滿足嵌入式設(shè)備直接與Internet聯(lián)網(wǎng)的要求,使管理者可以不受空間限制,,通過(guò)Internet利用Web瀏覽器完成對(duì)設(shè)備的遠(yuǎn)程訪問(wèn),、監(jiān)控和維護(hù)等操作。
1 系統(tǒng)總體設(shè)計(jì)
本設(shè)計(jì)基于ARM9開(kāi)發(fā)平臺(tái),,構(gòu)建嵌入式開(kāi)發(fā)環(huán)境,,裁剪移植Linux操作系統(tǒng)。系統(tǒng)采用嵌入式Web服務(wù)器對(duì)設(shè)備進(jìn)行功能配置,,利用溫度,、濕度、光照強(qiáng)度傳感器采集數(shù)據(jù),采用嵌入式數(shù)據(jù)庫(kù)對(duì)監(jiān)測(cè)數(shù)據(jù)進(jìn)行分析和存儲(chǔ),。系統(tǒng)通過(guò)控制程序協(xié)調(diào)溫室參數(shù),,并對(duì)控制參數(shù)進(jìn)行監(jiān)測(cè),從而為溫室中的作物提供最佳的生長(zhǎng)環(huán)境,。
嵌入式網(wǎng)絡(luò)監(jiān)控系統(tǒng)分客戶端主機(jī)和現(xiàn)場(chǎng)嵌入Web服務(wù)器智能監(jiān)控設(shè)備兩部分,,監(jiān)控系統(tǒng)的結(jié)構(gòu)如圖1所示。
客戶端主機(jī)通過(guò)瀏覽器與Web服務(wù)器交互式處理數(shù)據(jù),,從而實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)智能設(shè)備的遠(yuǎn)程監(jiān)控,。其中嵌入式Web服務(wù)器和監(jiān)控端位于溫室現(xiàn)場(chǎng),監(jiān)控端完成對(duì)溫室環(huán)境參數(shù)(溫度,、濕度,、等數(shù)據(jù))的采集,并將采集結(jié)果存入數(shù)據(jù)庫(kù),,通過(guò)CGI技術(shù),,管理人員通過(guò)網(wǎng)絡(luò)便可了解溫室內(nèi)環(huán)境情況。系統(tǒng)采用Boa作為嵌入式Web服務(wù)器,,負(fù)責(zé)監(jiān)控,、接收和分析用戶請(qǐng)求,傳送靜態(tài)頁(yè)面和調(diào)用后臺(tái)CGI(Common Gate Interface)程序,。
2 系統(tǒng)硬件設(shè)計(jì)
為了保證系統(tǒng)的實(shí)用性和可擴(kuò)展性,,系統(tǒng)選用Samsung公司的S3C2440A作為CPU處理器,S3C2440A帶有豐富的外圍接口,,是一款高性價(jià)比的ARM核SoC芯片,,工作頻率最高可達(dá)400 MHz。系統(tǒng)硬件結(jié)構(gòu)如圖2所示,。
系統(tǒng)配置有內(nèi)存大小為64 M的SDRAM和128 M的Nand Flash,。外接320x240的LCD觸摸屏,實(shí)現(xiàn)本地用戶人機(jī)接口,,進(jìn)行設(shè)備管理,,通過(guò)USB接口連接攝像頭,完成溫室環(huán)境的圖像采集,;通過(guò)DM9000外擴(kuò)以太網(wǎng)接口實(shí)現(xiàn)與無(wú)線局域網(wǎng)設(shè)備的連接和Interact的連接,。另外,系統(tǒng)還擴(kuò)展有RS485接口,,可用于系統(tǒng)的擴(kuò)展,,通過(guò)布線連接相應(yīng)的設(shè)備。
3 系統(tǒng)軟件設(shè)計(jì)
整個(gè)系統(tǒng)軟件結(jié)構(gòu)如圖3所示,,數(shù)據(jù)采集程序通過(guò)數(shù)據(jù)采集設(shè)備(傳感器,、攝像頭等)按照用戶預(yù)先設(shè)定的參數(shù)周期性的下發(fā)查詢命令,將采集到的結(jié)果寫入SQLite數(shù)據(jù)庫(kù),,監(jiān)控人員使用瀏覽器通過(guò)Web服務(wù)器(Boa)管理和維護(hù)系統(tǒng),。
網(wǎng)絡(luò)服務(wù)程序由嵌入式Web服務(wù)器和CGI腳本程序兩部分組成:服務(wù)器通過(guò)監(jiān)聽(tīng)80端口,監(jiān)聽(tīng)來(lái)自網(wǎng)絡(luò)的用戶請(qǐng)求,,如有用戶請(qǐng)求,,則啟動(dòng)相應(yīng)的CGI腳本程序,將請(qǐng)求信息轉(zhuǎn)化為服務(wù)器可以識(shí)別的數(shù)據(jù)格式,,從SQLite數(shù)據(jù)庫(kù)中讀出所需的信息,,再由CGI程序?qū)⑿畔⑥D(zhuǎn)化為Web瀏覽器能夠識(shí)別的格式,作為HTTP應(yīng)答消息回送客戶端顯示,。CGI腳本程序完成的功能主要包括:配置,、查詢?cè)O(shè)備相關(guān)信息及查詢?cè)O(shè)備告警信息等。
3.1 嵌入式Linux操作系統(tǒng)
用于嵌入式系統(tǒng)中的操作系統(tǒng)很多,,如Linux,,Vxworks,Windows CE等,。相比而言,,Linux兼容POSIX1003.1標(biāo)準(zhǔn),支持多線程,、多任務(wù)系統(tǒng)且具有源碼公開(kāi),、完全免費(fèi)和廣泛的移植性等特點(diǎn),使用更加靈活,。同時(shí)具有強(qiáng)大而穩(wěn)定的網(wǎng)絡(luò)功能和完善的開(kāi)發(fā)工具,,支持TCP/IP協(xié)議棧,可提供FTP,、TELNET等服務(wù),,同時(shí)還可以通過(guò)應(yīng)用程序向其他系統(tǒng)提供服務(wù)。因此,,選擇Linux 2.6.32作為嵌入式操作系統(tǒng),。
3.2 交叉編譯Boa
本系統(tǒng)采用盡可能簡(jiǎn)單的嵌入式Web服務(wù)器,即Boa,,能夠?qū)崿F(xiàn)HTTP1.1協(xié)議的基本內(nèi)容,,支持CGI,支持認(rèn)證,,是一個(gè)單任務(wù)的HTTP服務(wù)器,,Boa體積小,只有幾十kB,。交叉編譯工具使用的是arm-linux-gcc4.3.2,。
1)下載Boa源碼包boa-0.94.13targz,解壓后,,在boa-0.94.13\src目錄下運(yùn)行#/configure命令生成Makefile文件。
2)修改Makefile文件,,其中:CROSS_COMPILE=/usr/local/arm/4.3.2/bin/arm-linux-,。
3)運(yùn)行#make命令,生成可執(zhí)行程序boa,,運(yùn)行#/usr/loeal/arm/4.3. 2/bin/arm-linux-strip boa命令刪除調(diào)試信息,。
3.3 嵌入式數(shù)據(jù)庫(kù)的移植
Sqlite數(shù)據(jù)庫(kù)對(duì)嵌入式來(lái)說(shuō)是一個(gè)很好的數(shù)據(jù)庫(kù)引擎,可有力地減小應(yīng)用程序管理數(shù)據(jù)的開(kāi)銷,。具體的移植過(guò)程:
1)在Sqlite的官網(wǎng)下載linux版本的Sqlite3.6.23,,解壓sqiite-amalgamation-3.6.23.tar.gz并進(jìn)入sqlite-3.6.23目錄。
2)mkdir build在sqlite3.6.23目錄內(nèi)建立編譯文件夾并進(jìn)入,,Sqlite的編譯就在這個(gè)文件夾內(nèi)進(jìn)行,。
3)../configure--host=srm-linux--prefix=/usr/local/sqlite3選定編譯器為arm-linux-gcc,并指定安裝目錄為/usr/local/sqlite3,,這個(gè)路徑是可以根據(jù)自己的需要進(jìn)行修改,。
4)make &&make install安裝成后在sqfie3目錄下生成bin、include,、lib三個(gè)文件夾,,分別為可執(zhí)行文件,頭文件與庫(kù)文件,,由于采用動(dòng)態(tài)編譯,,所以生成的庫(kù)是動(dòng)態(tài)庫(kù),將它們復(fù)制到系統(tǒng)的相應(yīng)文件夾下,。此時(shí),,就可以在目標(biāo)板上運(yùn)行sqlite3。
3.4 CGI程序的設(shè)計(jì)
CGI定義Web服務(wù)器與用戶之間訪問(wèn)與執(zhí)行程序的標(biāo)準(zhǔn)接口,,它使瀏覽器和Web服務(wù)器之間具有交互性,。圖4表明了本系統(tǒng)中瀏覽器、Web服務(wù)器和CGI程序之間的關(guān)系,。
當(dāng)客戶通過(guò)瀏覽器訪問(wèn)Web服務(wù)器時(shí),,瀏覽器與Web服務(wù)器建立TCP連接并發(fā)送HTTP請(qǐng)求,Web服務(wù)器收到HTTP請(qǐng)求后,,分析請(qǐng)求內(nèi)容,,如果為靜態(tài)文檔請(qǐng)求,則直接返回該請(qǐng)求的結(jié)果,,如果是CGI請(qǐng)求,,則Web服務(wù)器把該請(qǐng)求通過(guò)環(huán)境變量、命令行參數(shù)或標(biāo)準(zhǔn)輸入的方式傳給指定的CGI程序,,同時(shí)接管這個(gè)CGI程序的標(biāo)準(zhǔn)輸出,,CGI程序進(jìn)行相應(yīng)的信息處理后,,將處理結(jié)果以HTML形式的文件送到標(biāo)準(zhǔn)輸出,Web服務(wù)器在CGI程序輸出的內(nèi)容上附加一些頭標(biāo)信息和狀態(tài)行,,然后把結(jié)果送回瀏覽器,。
3.5 系統(tǒng)軟件流程圖
用戶通過(guò)HTML頁(yè)面監(jiān)控遠(yuǎn)程設(shè)備包含2個(gè)流程:1)客戶端到服務(wù)器的數(shù)據(jù)通信??蛻舳藢⒂脩舻牟僮鱾魉徒oWEB服務(wù)器,服務(wù)器再調(diào)用相應(yīng)的CGI應(yīng)用程序控制底層設(shè)備,,實(shí)現(xiàn)設(shè)備監(jiān)控,;2)服務(wù)器到客戶端的數(shù)據(jù)通信。即服務(wù)器把CGI程序?qū)Φ讓釉O(shè)備監(jiān)控的結(jié)果反饋給客戶端,,供用戶瀏覽,。
一個(gè)CGI應(yīng)用程序首先通過(guò)環(huán)境變量REQUEST-METHOD判斷客戶端發(fā)送的是哪一種數(shù)據(jù)請(qǐng)求。若是GET請(qǐng)求,,則通過(guò)環(huán)境變量QUERY-STRING獲取數(shù)據(jù),。若是POST請(qǐng)求,則通過(guò)標(biāo)準(zhǔn)輸入(stdin)獲取客戶端傳送的數(shù)據(jù),。使用CET方法發(fā)送HTML表單數(shù)據(jù)時(shí),,表單數(shù)據(jù)將作為查詢字符串傳送給CGI應(yīng)用程序,而用POST方法發(fā)送表單數(shù)據(jù)時(shí),,表單數(shù)據(jù)通過(guò)C語(yǔ)言標(biāo)準(zhǔn)輸入(stdin)直接傳給CGI應(yīng)用程序,。CGI應(yīng)用程序完成了相關(guān)的運(yùn)算和對(duì)底層設(shè)備的操作之后,還應(yīng)該將相應(yīng)的執(zhí)行結(jié)果反饋給用戶,。
CGI應(yīng)用程序通過(guò)WEB服務(wù)器將結(jié)果傳送給客戶端瀏覽器,,使用戶直觀的看到操作的執(zhí)行結(jié)果。使用標(biāo)準(zhǔn)輸出(Printf)就可以實(shí)現(xiàn)數(shù)據(jù)發(fā)送,,WEB服務(wù)器得到這些輸出信息,,以HTML網(wǎng)頁(yè)的形式反饋給客戶端瀏覽器。具體的操作流程如圖5所示,。
4 案例實(shí)現(xiàn)
目前Web技術(shù)中生成動(dòng)態(tài)頁(yè)面的方法有CGI,、PHP和服務(wù)器腳本(如JSP和ASP等),但后兩者需要Web服務(wù)器具有這些腳本的運(yùn)行支持模塊,。在嵌入式Web服務(wù)器中,,考慮到資源限制問(wèn)題,一般都只提供CGl支持,,因此在嵌入式設(shè)備中Web應(yīng)用開(kāi)發(fā)實(shí)際上就是基于CGI的程序開(kāi)發(fā),。使用C語(yǔ)言編寫CGI程序,內(nèi)嵌Html腳本,,這樣當(dāng)執(zhí)行CGI程序時(shí),,即可完成對(duì)硬件的操作,,又可將操作結(jié)果顯示在網(wǎng)頁(yè)。CGI程序用getchar()等函數(shù)獲得用戶提交的數(shù)據(jù),。用pantf()函數(shù)負(fù)責(zé)輸出,。執(zhí)行結(jié)果要以完整的Html文件格式輸出,比如一個(gè)CGI文件中的輸出語(yǔ)句如下:
打開(kāi)Web瀏覽器,,在地址欄輸入Web服務(wù)器IP地址,,先是身份驗(yàn)證網(wǎng)頁(yè),驗(yàn)證后,,顯示的監(jiān)控信息網(wǎng)頁(yè)如圖6所示,。
5 結(jié)論
在嵌入式監(jiān)控系統(tǒng)中,基于嵌入式Linux平臺(tái),,利用嵌入式Web服務(wù)器和嵌入式數(shù)據(jù)庫(kù)對(duì)遠(yuǎn)程設(shè)備進(jìn)行操作和管理是嵌入式監(jiān)控系統(tǒng)的發(fā)展方向,。本文在嵌入式Linux平臺(tái)下使用Boa作為Web服務(wù)器,應(yīng)用CGI技術(shù)實(shí)現(xiàn)的動(dòng)態(tài)WebServer通用性強(qiáng),,可以穩(wěn)定,、高效地在目標(biāo)系統(tǒng)中運(yùn)行,為網(wǎng)絡(luò)化遠(yuǎn)程實(shí)時(shí)監(jiān)控系統(tǒng)的實(shí)施提供了技術(shù)保障,。其不僅可以運(yùn)用于溫室信息監(jiān)測(cè),,還可運(yùn)用于其他環(huán)境監(jiān)測(cè),能滿足信息采集擴(kuò)展性,、分布性,、實(shí)時(shí)性的要求。