文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)05-0143-04
現(xiàn)代工業(yè)的飛速發(fā)展和人類的不合理活動(dòng)對(duì)環(huán)境造成了嚴(yán)重的破壞,使得全球生態(tài)環(huán)境惡化愈演愈烈。惡劣的環(huán)境容易引起人體的發(fā)病、動(dòng)植物的死亡等不良后果,環(huán)境異常還會(huì)引起火災(zāi)或其他災(zāi)害。而環(huán)境監(jiān)測(cè)則可以提供環(huán)境的狀況信息,保證生活和生產(chǎn)的正常進(jìn)行。環(huán)境監(jiān)測(cè)技術(shù)已廣泛地用于軍事、工農(nóng)業(yè)、通信等多個(gè)領(lǐng)域。
目前,環(huán)境監(jiān)測(cè)尚存在一些不足。傳統(tǒng)的環(huán)境監(jiān)測(cè)以人工采樣和實(shí)驗(yàn)室分析為主,操作比較繁瑣;監(jiān)測(cè)系統(tǒng)監(jiān)測(cè)領(lǐng)域較窄,不能對(duì)環(huán)境進(jìn)行全面的評(píng)估;設(shè)備功能單一,不能滿足人們較高的環(huán)境監(jiān)測(cè)需求。
本文從實(shí)際出發(fā),設(shè)計(jì)了一種基于嵌入式技術(shù)的遠(yuǎn)程無(wú)線環(huán)境監(jiān)測(cè)系統(tǒng)。該系統(tǒng)基于ARM11和嵌入式Linux,并與USB攝像頭、溫濕度傳感器模塊相結(jié)合,具有較為豐富的功能。使用該系統(tǒng)能夠?qū)崿F(xiàn)對(duì)監(jiān)測(cè)區(qū)域的實(shí)時(shí)視頻監(jiān)控和溫濕度數(shù)據(jù)監(jiān)測(cè),具有成本低、支持多臺(tái)客戶機(jī)同時(shí)訪問(wèn)、系統(tǒng)維護(hù)方便等特點(diǎn)。系統(tǒng)采用B/S模式結(jié)構(gòu)[1-2]設(shè)計(jì),用戶只需要通過(guò)瀏覽器即可訪問(wèn)監(jiān)測(cè)區(qū)域的環(huán)境情況,比傳統(tǒng)的實(shí)地觀察更加方便,具有較好的應(yīng)用前景。
1 系統(tǒng)總體設(shè)計(jì)
系統(tǒng)以開(kāi)源的Linux為操作系統(tǒng)平臺(tái),采用B/S模式結(jié)構(gòu),以S3C6410[3]控制器為嵌入式服務(wù)器。系統(tǒng)將從USB攝像頭采集到的視頻圖像進(jìn)行壓縮,然后基于TCP/IP協(xié)議[4]將壓縮后的視頻圖像發(fā)送到客戶端。同時(shí),系統(tǒng)間隔性地采集溫濕度數(shù)據(jù), 并將數(shù)據(jù)保存在SQLite數(shù)據(jù)庫(kù)[5]表中,以供用戶查詢。客戶機(jī)通過(guò)瀏覽器中的網(wǎng)頁(yè)即可接收從Web服務(wù)器發(fā)送過(guò)來(lái)的監(jiān)測(cè)區(qū)域的環(huán)境數(shù)據(jù)。當(dāng)監(jiān)測(cè)區(qū)域的環(huán)境情況發(fā)生異常時(shí),客戶端就會(huì)發(fā)出報(bào)警聲,同時(shí)系統(tǒng)會(huì)向用戶的郵箱發(fā)送郵件[6]。系統(tǒng)的總體實(shí)現(xiàn)方案如圖1所示。
本系統(tǒng)主要有監(jiān)測(cè)前端和監(jiān)測(cè)終端兩部分。監(jiān)測(cè)前端主要由S3C6410處理器、USB攝像頭和溫濕度傳感器組成;監(jiān)測(cè)終端主要是PC、手機(jī)等。當(dāng)有用戶請(qǐng)求時(shí),客戶端網(wǎng)頁(yè)瀏覽器主動(dòng)與服務(wù)器建立網(wǎng)絡(luò)連接??蛻魴C(jī)與Web服務(wù)器之間利用Ajax技術(shù)[7]進(jìn)行異步通信,保證了安全可靠的Web應(yīng)用交互。用戶信息、每個(gè)用戶的登陸信息和溫濕度信息都保存在SQLite數(shù)據(jù)庫(kù)表中。當(dāng)有用戶登陸時(shí),后臺(tái)的CGI驗(yàn)證程序就會(huì)查詢存有用戶信息的數(shù)據(jù)庫(kù)表,如果驗(yàn)證成功就會(huì)返回登陸的主控頁(yè)面,否則返回帶錯(cuò)誤提示的登陸頁(yè)面。
2 系統(tǒng)硬件設(shè)計(jì)
本系統(tǒng)的硬件總體結(jié)構(gòu)圖如圖2所示。
主控平臺(tái)選用友善之臂的Tiny6410開(kāi)發(fā)平臺(tái),主要包括S3C6410控制器、2 GB Nand Flash、256 MB SDRAM和外圍接口。在Nand Flash中保存有U-Boot、Linux內(nèi)核、UBIFS文件系統(tǒng)、驅(qū)動(dòng)程序、與Web服務(wù)相關(guān)的程序以及其他應(yīng)用程序。主控平臺(tái)的功能主要是控制采集視頻圖像、對(duì)采集的視頻圖像進(jìn)行壓縮、網(wǎng)絡(luò)傳輸視頻圖像、控制采集和保存溫濕度數(shù)據(jù)、為客戶機(jī)提供Web服務(wù)。
USB攝像頭選用羅技的C270攝像頭,其主要功能是完成視頻監(jiān)控圖像的采集,為S3C6410提供原始視頻圖像。溫濕度傳感器選用含有己校準(zhǔn)數(shù)字信號(hào)輸出的DHT21[8],其功能為采集溫濕度數(shù)據(jù)。
3 系統(tǒng)軟件設(shè)計(jì)
從功能上來(lái)說(shuō),整個(gè)系統(tǒng)需要完成溫濕度傳感器和攝像頭的驅(qū)動(dòng),溫濕度數(shù)據(jù)的采集、存儲(chǔ)和傳輸,視頻圖像的采集與傳輸。
如圖3所示,整個(gè)系統(tǒng)的軟件分為底層和應(yīng)用層。底層主要包括U-Boot、Linux內(nèi)核、UBIFS文件系統(tǒng)和驅(qū)動(dòng)程序;應(yīng)用層則包括視頻圖像采集和發(fā)送程序、溫濕度采集程序、Web服務(wù)器、后臺(tái)CGI程序以及Web服務(wù)器上的網(wǎng)頁(yè)相關(guān)腳本程序。應(yīng)用程序通過(guò)驅(qū)動(dòng)程序提供的接口來(lái)調(diào)用內(nèi)核空間的數(shù)據(jù)。
在底層,需要完成溫濕度傳感器驅(qū)動(dòng);在應(yīng)用層,需要調(diào)用溫濕度傳感器驅(qū)動(dòng)來(lái)完成溫濕度采集,利用攝像頭驅(qū)動(dòng)完成視頻圖像的采集,并通過(guò)TCP/IP協(xié)議將采集到的視頻圖像和溫濕度數(shù)據(jù)發(fā)送到客戶端。此外,還要完成對(duì)用戶輸入的用戶名和密碼的驗(yàn)證和溫濕度報(bào)警功能。
3.1 溫濕度采集程序設(shè)計(jì)
溫濕度傳感器驅(qū)動(dòng)模塊加載成功后,編寫(xiě)溫濕度采集程序時(shí)就可以利用驅(qū)動(dòng)程序中提供的接口把“/dev/dht21”作為一個(gè)文件來(lái)訪問(wèn)。除了要從DHT21獲取溫濕度數(shù)據(jù)之外,溫濕度采集程序還要將溫濕度數(shù)據(jù)保存到SQLite數(shù)據(jù)庫(kù)表/home/boa/www/temandhum.db中,同時(shí)還要將當(dāng)前采集到的溫濕度數(shù)據(jù)寫(xiě)入到/home/boa/www/xml/temandhum.xml文件的<livedata>節(jié)點(diǎn)中,以方便運(yùn)行在客戶端的JavaScript讀取實(shí)時(shí)的溫濕度數(shù)據(jù)。另外,溫濕度采集程序還要檢測(cè)溫濕度是否異常。若溫濕度超過(guò)預(yù)設(shè)范圍,則調(diào)用sendemail函數(shù)向用戶發(fā)送郵件。溫濕度采集程序的流程圖如圖4所示。
3.2 視頻圖像采集程序設(shè)計(jì)
使用V4L2標(biāo)準(zhǔn)進(jìn)行視頻采集的流程如圖5所示。
(1)打開(kāi)視頻設(shè)備。將USB攝像頭插到Tiny6410開(kāi)發(fā)板的USB接口上后,就會(huì)在/dev目錄下看到多出一個(gè)“video0”的設(shè)備文件,只需要使用fd = open("/dev/video0", O_RDWR, 0);語(yǔ)句來(lái)打開(kāi)該設(shè)備文件,即可像訪問(wèn)文件一樣來(lái)訪問(wèn)該設(shè)備。open函數(shù)中的“O_RDWR”表示阻塞模式,它也可以換成“O_RDWR | O_NONBLOCK”,表示非阻塞模式。以非阻塞模式打開(kāi)視頻設(shè)備時(shí),不管設(shè)備打開(kāi)成功與否,驅(qū)動(dòng)都會(huì)把緩存中的數(shù)據(jù)返回給應(yīng)用程序。
(2)獲取視頻設(shè)備的參數(shù)信息。成功打開(kāi)視頻設(shè)備后,可以使用語(yǔ)句ioctl(fd, VIDIOC_QUERYCAP, &capability)來(lái)獲取視頻設(shè)備的參數(shù)信息,設(shè)備參數(shù)信息就保存在結(jié)構(gòu)體capability中的各成員變量中。
(3)初始化視頻設(shè)備配置。例如設(shè)置視頻捕獲格式主要是通過(guò)設(shè)置v4l2_format數(shù)據(jù)結(jié)構(gòu)中的成員變量來(lái)實(shí)現(xiàn)。一般設(shè)置的圖像大小為640×480或320×240兩種。
(4)采集視頻圖像。獲取采集到的視頻圖像的方式有兩種:(1)使用read( )函數(shù)直接讀取設(shè)備; (2)使用mmap( )函數(shù)共享內(nèi)存。
在Linux操作系統(tǒng)中,內(nèi)存空間被分為用戶空間和內(nèi)核空間。進(jìn)程不能直接讀寫(xiě)內(nèi)核空間,通過(guò)read( )函數(shù)來(lái)讀取設(shè)備比較慢,但安全度較高;通過(guò)使用mmap方式后能將同一文件映射到進(jìn)程的虛擬地址空間,從而達(dá)到直接讀取該內(nèi)存空間的目的,讀取速度很快,但相應(yīng)地安全度較低。此處采用mmap的方式來(lái)采集視頻。使用“framebuf[1].length = buf.length;”設(shè)置framebuf的大小,然后使用“framebuf[1].start=(char *) mmap(0, buf.length,PROT_READ|PROT_WRITE,MAP_SHARED, fd,buf.m.offset);”進(jìn)行內(nèi)存映射,這樣就可以用“ret = ioctl(fd , VIDIOC_QBUF, &buf);”獲取視頻圖像。判斷視頻圖像是否采集完畢需要使用“ioctl(fd,VIDIOCSYNC, &buf);”。
(5)關(guān)閉視頻設(shè)備。使用“close(fd);”實(shí)現(xiàn)。
3.3 視頻圖像傳輸程序設(shè)計(jì)
本視頻圖像傳輸程序主要通過(guò)線程組來(lái)實(shí)現(xiàn),涉及的線程主要有:cap_video、send_video和client_connect。cap_video 負(fù)責(zé)采集視頻圖像;client_connect線程用來(lái)等待客戶端的連接請(qǐng)求,當(dāng)有新的用戶連接請(qǐng)求時(shí),它就會(huì)采用GET方法獲取用戶的請(qǐng)求信息,然后再判斷是否建立連接,若請(qǐng)求信息有效則給該用戶開(kāi)通一個(gè)新的連接用來(lái)發(fā)送連續(xù)的視頻流,client_connect線程還要負(fù)責(zé)將無(wú)效的socket連接斷開(kāi),以保證系統(tǒng)的高效運(yùn)行;send_video則是服務(wù)于已連接好的用戶,主要用來(lái)將公共緩沖區(qū)中的視頻圖像通過(guò)socket發(fā)送出去,send_video線程每發(fā)送一幀圖像后就會(huì)將公共緩沖區(qū)清空并進(jìn)行上鎖,直到公共緩沖區(qū)被寫(xiě)入的數(shù)據(jù)大于或等于所設(shè)閾值時(shí)才執(zhí)行下一次發(fā)送任務(wù)。線程之間通過(guò)pthread_cond_
wait、pthread_mutex_lock、pthread_mutex_unlock等函數(shù)來(lái)防止競(jìng)爭(zhēng)。視頻圖像傳輸程序流程如圖6所示。
3.4 溫濕度實(shí)時(shí)曲線描繪程序設(shè)計(jì)
本程序能夠?qū)貪穸葦?shù)據(jù)通過(guò)JavaScript代碼描繪成曲線圖,用戶能夠直觀地感受到溫濕度數(shù)據(jù)實(shí)時(shí)的變化。本程序使用開(kāi)源的jqPlot庫(kù)進(jìn)行圖像描繪。
jqPlot繪圖功能主要通過(guò)調(diào)用$.jqplot函數(shù)對(duì)所繪制的圖像進(jìn)行初始化設(shè)置來(lái)實(shí)現(xiàn)。jqPlot的配置格式為:
$.jqplot('target', data, options);
其中target表示在HTML中的位置;data為顯示的數(shù)據(jù);options為與圖像顯示相關(guān)的配置。
本文中用到的主要options的對(duì)象有title和axes。axesDefaults中的配置參數(shù)與axes中的一樣,axesDefaults中的參數(shù)是默認(rèn)配置,而axes中的參數(shù)是非默認(rèn)配置。
4 系統(tǒng)調(diào)試
通過(guò)串口線和網(wǎng)線,將開(kāi)發(fā)板與PC連接好,然后啟動(dòng)開(kāi)發(fā)板。打開(kāi)瀏覽器后,在PC瀏覽器的地址欄中輸入開(kāi)發(fā)板上所設(shè)Web服務(wù)器的IP地址即可看到登陸頁(yè)面,輸入用戶名和密碼,驗(yàn)證成功后即可進(jìn)入遠(yuǎn)程監(jiān)測(cè)的主控頁(yè)面,默認(rèn)加載頁(yè)面為視頻監(jiān)控頁(yè)面。用戶還可以通過(guò)點(diǎn)擊主控頁(yè)面中左邊樹(shù)形菜單中的“溫濕度監(jiān)測(cè)”加載溫濕度的實(shí)時(shí)曲線。
本文設(shè)計(jì)了一種基于S3C6410嵌入式技術(shù)、B/S網(wǎng)絡(luò)模式的遠(yuǎn)程無(wú)線環(huán)境監(jiān)測(cè)系統(tǒng),經(jīng)過(guò)測(cè)試,該系統(tǒng)運(yùn)行穩(wěn)定,能夠進(jìn)行實(shí)時(shí)的溫濕度數(shù)據(jù)監(jiān)測(cè)和視頻監(jiān)控。該系統(tǒng)具有支持多路同時(shí)訪問(wèn)、系統(tǒng)負(fù)荷能力強(qiáng)、界面友好等特點(diǎn),在環(huán)保行業(yè)、制造行業(yè)、交通行業(yè)的環(huán)境監(jiān)測(cè)方面具有一定的推廣應(yīng)用價(jià)值。
參考文獻(xiàn)
[1] He Hujun, Yan Yumei,Li Wanling, et al. Design and implementation of mine-map management information system based on B/S model[J].Applied Mechanics and Materials,2012,241-244(12):2616-2619.
[2] 張國(guó)軍, 鄭麗媛, 張俊.基于物聯(lián)網(wǎng)的瓦斯監(jiān)控系統(tǒng)[J]. 傳感器與微系統(tǒng),2013,32(1):125-127,130.
[3] 陳建明,沈東方.基于S3C6410的智能泵組控制器設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2012,38(12):14-16.
[4] 楊嬌娟.淺談TCP/IP協(xié)議[J].數(shù)字技術(shù)與應(yīng)用,2012(3):220.
[5] 韓善鋒,曹鳳海,易昌華. SQLite數(shù)據(jù)庫(kù)在嵌入式程序開(kāi)發(fā)中的應(yīng)用[J].物探裝備, 2011,21(3):170-173,178.
[6] 毛云貴.支持SMTP認(rèn)證的E-MAIL發(fā)送程序的設(shè)計(jì)[J].南京工程學(xué)院學(xué)報(bào)(自然科學(xué)版),2006,4(1):66-72.
[7] 呂弘, 黃偉納. 基于AJAX技術(shù)的圖書(shū)館統(tǒng)計(jì)平臺(tái)的設(shè)計(jì)[J].中國(guó)科技信息,2012(1):75-76.
[8] 胡敏,施云波,修德斌,等.氯氣檢測(cè)報(bào)警器的設(shè)計(jì)[J].儀表技術(shù)與傳感器,2010(12):66-67,70.