文獻(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)程無線環(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í)訪問,、系統(tǒng)維護(hù)方便等特點(diǎn),。系統(tǒng)采用B/S模式結(jié)構(gòu)[1-2]設(shè)計(jì),用戶只需要通過瀏覽器即可訪問監(jiān)測(cè)區(qū)域的環(huán)境情況,比傳統(tǒng)的實(shí)地觀察更加方便,具有較好的應(yīng)用前景,。
1 系統(tǒng)總體設(shè)計(jì)
系統(tǒng)以開源的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]表中,,以供用戶查詢??蛻魴C(jī)通過瀏覽器中的網(wǎng)頁(yè)即可接收從Web服務(wù)器發(fā)送過來的監(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開發(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ì)
從功能上來說,整個(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)用程序通過驅(qū)動(dòng)程序提供的接口來調(diào)用內(nèi)核空間的數(shù)據(jù)。
在底層,,需要完成溫濕度傳感器驅(qū)動(dòng),;在應(yīng)用層,需要調(diào)用溫濕度傳感器驅(qū)動(dòng)來完成溫濕度采集,,利用攝像頭驅(qū)動(dòng)完成視頻圖像的采集,并通過TCP/IP協(xié)議將采集到的視頻圖像和溫濕度數(shù)據(jù)發(fā)送到客戶端,。此外,還要完成對(duì)用戶輸入的用戶名和密碼的驗(yàn)證和溫濕度報(bào)警功能,。
3.1 溫濕度采集程序設(shè)計(jì)
溫濕度傳感器驅(qū)動(dòng)模塊加載成功后,,編寫溫濕度采集程序時(shí)就可以利用驅(qū)動(dòng)程序中提供的接口把“/dev/dht21”作為一個(gè)文件來訪問。除了要從DHT21獲取溫濕度數(shù)據(jù)之外,,溫濕度采集程序還要將溫濕度數(shù)據(jù)保存到SQLite數(shù)據(jù)庫(kù)表/home/boa/www/temandhum.db中,,同時(shí)還要將當(dāng)前采集到的溫濕度數(shù)據(jù)寫入到/home/boa/www/xml/temandhum.xml文件的<livedata>節(jié)點(diǎn)中,以方便運(yùn)行在客戶端的JavaScript讀取實(shí)時(shí)的溫濕度數(shù)據(jù),。另外,,溫濕度采集程序還要檢測(cè)溫濕度是否異常。若溫濕度超過預(yù)設(shè)范圍,則調(diào)用sendemail函數(shù)向用戶發(fā)送郵件,。溫濕度采集程序的流程圖如圖4所示,。
3.2 視頻圖像采集程序設(shè)計(jì)
使用V4L2標(biāo)準(zhǔn)進(jìn)行視頻采集的流程如圖5所示。
(1)打開視頻設(shè)備,。將USB攝像頭插到Tiny6410開發(fā)板的USB接口上后,,就會(huì)在/dev目錄下看到多出一個(gè)“video0”的設(shè)備文件,只需要使用fd = open("/dev/video0", O_RDWR, 0);語句來打開該設(shè)備文件,,即可像訪問文件一樣來訪問該設(shè)備,。open函數(shù)中的“O_RDWR”表示阻塞模式,它也可以換成“O_RDWR | O_NONBLOCK”,表示非阻塞模式,。以非阻塞模式打開視頻設(shè)備時(shí),不管設(shè)備打開成功與否,,驅(qū)動(dòng)都會(huì)把緩存中的數(shù)據(jù)返回給應(yīng)用程序,。
(2)獲取視頻設(shè)備的參數(shù)信息。成功打開視頻設(shè)備后,,可以使用語句ioctl(fd, VIDIOC_QUERYCAP, &capability)來獲取視頻設(shè)備的參數(shù)信息,,設(shè)備參數(shù)信息就保存在結(jié)構(gòu)體capability中的各成員變量中。
(3)初始化視頻設(shè)備配置,。例如設(shè)置視頻捕獲格式主要是通過設(shè)置v4l2_format數(shù)據(jù)結(jié)構(gòu)中的成員變量來實(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)程不能直接讀寫內(nèi)核空間,通過read( )函數(shù)來讀取設(shè)備比較慢,,但安全度較高,;通過使用mmap方式后能將同一文件映射到進(jìn)程的虛擬地址空間,從而達(dá)到直接讀取該內(nèi)存空間的目的,,讀取速度很快,,但相應(yīng)地安全度較低。此處采用mmap的方式來采集視頻,。使用“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ì)
本視頻圖像傳輸程序主要通過線程組來實(shí)現(xiàn),,涉及的線程主要有:cap_video、send_video和client_connect,。cap_video 負(fù)責(zé)采集視頻圖像,;client_connect線程用來等待客戶端的連接請(qǐng)求,當(dāng)有新的用戶連接請(qǐng)求時(shí),,它就會(huì)采用GET方法獲取用戶的請(qǐng)求信息,,然后再判斷是否建立連接,若請(qǐng)求信息有效則給該用戶開通一個(gè)新的連接用來發(fā)送連續(xù)的視頻流,,client_connect線程還要負(fù)責(zé)將無效的socket連接斷開,,以保證系統(tǒng)的高效運(yùn)行;send_video則是服務(wù)于已連接好的用戶,,主要用來將公共緩沖區(qū)中的視頻圖像通過socket發(fā)送出去,,send_video線程每發(fā)送一幀圖像后就會(huì)將公共緩沖區(qū)清空并進(jìn)行上鎖,直到公共緩沖區(qū)被寫入的數(shù)據(jù)大于或等于所設(shè)閾值時(shí)才執(zhí)行下一次發(fā)送任務(wù),。線程之間通過pthread_cond_
wait,、pthread_mutex_lock、pthread_mutex_unlock等函數(shù)來防止競(jìng)爭(zhēng),。視頻圖像傳輸程序流程如圖6所示,。
3.4 溫濕度實(shí)時(shí)曲線描繪程序設(shè)計(jì)
本程序能夠?qū)貪穸葦?shù)據(jù)通過JavaScript代碼描繪成曲線圖,用戶能夠直觀地感受到溫濕度數(shù)據(jù)實(shí)時(shí)的變化,。本程序使用開源的jqPlot庫(kù)進(jìn)行圖像描繪,。
jqPlot繪圖功能主要通過調(diào)用$.jqplot函數(shù)對(duì)所繪制的圖像進(jìn)行初始化設(shè)置來實(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)試
通過串口線和網(wǎng)線,,將開發(fā)板與PC連接好,然后啟動(dòng)開發(fā)板,。打開瀏覽器后,,在PC瀏覽器的地址欄中輸入開發(fā)板上所設(shè)Web服務(wù)器的IP地址即可看到登陸頁(yè)面,輸入用戶名和密碼,驗(yàn)證成功后即可進(jìn)入遠(yuǎn)程監(jiān)測(cè)的主控頁(yè)面,,默認(rèn)加載頁(yè)面為視頻監(jiān)控頁(yè)面,。用戶還可以通過點(diǎn)擊主控頁(yè)面中左邊樹形菜單中的“溫濕度監(jiān)測(cè)”加載溫濕度的實(shí)時(shí)曲線,。
本文設(shè)計(jì)了一種基于S3C6410嵌入式技術(shù)、B/S網(wǎng)絡(luò)模式的遠(yuǎn)程無線環(huán)境監(jiān)測(cè)系統(tǒng),,經(jīng)過測(cè)試,,該系統(tǒng)運(yùn)行穩(wěn)定,能夠進(jìn)行實(shí)時(shí)的溫濕度數(shù)據(jù)監(jiān)測(cè)和視頻監(jiān)控,。該系統(tǒng)具有支持多路同時(shí)訪問,、系統(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ù)在嵌入式程序開發(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ù)的圖書館統(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.