4.2 USB 攝像頭程序
在Linux kernel 源碼目錄中driver/usb/usb-skeleton.c 提供了一個基礎(chǔ)的USB 驅(qū)動程序。通過它僅需要修改極少的部分,就可以完成一個USB 設(shè)備的驅(qū)動。重新編譯內(nèi)核生成攝像頭驅(qū)動文件,然后執(zhí)行insmod 加載USB 攝像頭驅(qū)動,Linux 系統(tǒng)就在/dev 目錄下注冊了USB 視頻設(shè)備/dev/video0。
攝像頭驅(qū)動程序安裝好后為了進行視頻采集必須加入Video4Linux 模塊,Video4Linux 是Linux 中關(guān)于視頻設(shè)備的內(nèi)核驅(qū)動,它為針對視頻設(shè)備的應(yīng)用程序提供一系列接口函數(shù)。對于USB 口攝像頭, 其驅(qū)動程序中需要提供基本的I/O 操作接口函數(shù)open、close、read、write 等的實現(xiàn)。對中斷的處理實現(xiàn),內(nèi)存映射功能以及I/O 通道的控制接口函數(shù)ioctl 的實現(xiàn)等, 并把它們定義在struct file_operations 中。這樣當(dāng)應(yīng)用程序?qū)υO(shè)備文件進行諸如open、close、read、write 等系統(tǒng)調(diào)用函數(shù)時,Linux 內(nèi)核將通過file_operations 結(jié)構(gòu)體訪問驅(qū)動程序提供的函數(shù)。
4.3 ZigBee 協(xié)調(diào)器和設(shè)備節(jié)點程序
ZigBee 家庭無線網(wǎng)絡(luò)主要負責(zé)對現(xiàn)場各種信息的監(jiān)控以及數(shù)據(jù)的采集, 并將內(nèi)部處理過的數(shù)據(jù)經(jīng)家庭網(wǎng)關(guān)傳送到外部網(wǎng)絡(luò)。本系統(tǒng)中ZigBee 協(xié)調(diào)器主要用于建立無線網(wǎng)絡(luò),分配地址,向終端節(jié)點發(fā)送控制命令和接收終端節(jié)點的工作狀態(tài),并將接收到的狀態(tài)數(shù)據(jù)全部上傳至Web 服務(wù)器, 最后通過Internet傳送到遠端的用戶端。終端設(shè)備節(jié)點主要有加入網(wǎng)絡(luò),接收控制命令,以及發(fā)送狀態(tài)信息給協(xié)調(diào)器等。協(xié)調(diào)器主程序流程如圖2所示。
?
4.4 Web 服務(wù)器
Web 服務(wù)器的作用是監(jiān)聽用戶的服務(wù)請求, 并根據(jù)用戶的請求給出相應(yīng)的服務(wù)。服務(wù)器和客戶端瀏覽器之間的通信協(xié)議是超文本傳輸協(xié)議HTTP。HTTP 協(xié)議規(guī)定了發(fā)送和請求的標(biāo)準(zhǔn)方式, 瀏覽器和服務(wù)器之間傳輸?shù)南⒏袷郊案鞣N控制信息。Linux 支持boa、httpd、thttpd 等幾種Web 服務(wù)器, 其中boa 是一款單任務(wù)的Web 服務(wù)器軟件,源代碼開放,速度快,性能優(yōu)秀,支持能夠?qū)崿F(xiàn)動態(tài)Web 技術(shù)的CGI(Common Gateway Interface)技術(shù),特別適合應(yīng)用在嵌入式系統(tǒng)中。
CGI 提供了一個Web 服務(wù)器的外部程序通道,運行在服務(wù)器上,由瀏覽器輸入觸發(fā),是Web 服務(wù)器和系統(tǒng)中其他程序連接的通道。CGI 程序就是符合這種接口的程序。服務(wù)器接收到用戶的請求,并將數(shù)據(jù)送給CGI 程序,CGI 程序接收到數(shù)據(jù)后,啟動編寫好的應(yīng)用程序,并按照用戶提供的數(shù)據(jù)執(zhí)行。應(yīng)用程序執(zhí)行完成后,返回執(zhí)行結(jié)果,并通過Web 服務(wù)器傳送給用戶瀏覽器顯示。
本系統(tǒng)采用了CGI 來實現(xiàn)動態(tài)Web 技術(shù),CGI 規(guī)定了Web服務(wù)器調(diào)用其他可執(zhí)行程序(CGI 程序)的接口協(xié)議標(biāo)準(zhǔn)。Web服務(wù)器通過CGI 程序?qū)崿F(xiàn)和瀏覽器的交互,也就是CGI 程序接受瀏覽器發(fā)送給Web 服務(wù)器的信息進行處理,將響應(yīng)結(jié)果再回送給Web 服務(wù)器及瀏覽器。CGI 程序可以用多種程序設(shè)計語言編寫, 本系統(tǒng)選用C 語言編寫的CGI 程序。嵌入式Web 服務(wù)器工作流程如圖3 所示。
?
5 系統(tǒng)測試
將服務(wù)器用網(wǎng)線和電腦主機相連, 服務(wù)器的地址設(shè)為192.168.1.6,電腦主機地址為192.168.1.8(只要主機IP 和服務(wù)器IP 處在同一個網(wǎng)段就可以)。
系統(tǒng)的網(wǎng)頁包括家電系統(tǒng)、安防系統(tǒng)和視頻畫面三個頁面,這三個畫面可以相互切換, 在瀏覽器輸入服務(wù)器IP 對系統(tǒng)進行測試,并選擇攝像頭遠程控制畫面,攝像頭采集的視頻畫面截圖如圖4 所示。
6 結(jié)論
本文設(shè)計的智能家居綜合控制系統(tǒng),采用ZigBee 技術(shù)組建家庭內(nèi)部無線網(wǎng)絡(luò), 用USB 攝像頭實時采集家庭視頻信息,在S3C2440A 為控制核心的硬件平臺移植嵌入式Linux 操作系統(tǒng)和Web 服務(wù)器完成家庭網(wǎng)關(guān)的設(shè)計,經(jīng)過實際測試,本系統(tǒng)達到了家庭信息網(wǎng)絡(luò)化的目的,實現(xiàn)了對家庭設(shè)備遠程監(jiān)控的愿望。系統(tǒng)的功能強大,功耗低,實現(xiàn)簡單,具有廣闊的應(yīng)用前景。
本文的創(chuàng)新點:(1)采用ZigBee 技術(shù)避免了傳統(tǒng)家庭監(jiān)控系統(tǒng)的布線難問題。(2)USB 攝像頭的使用讓我們不但可以查看設(shè)備的數(shù)字信息,還可以直觀的看到動態(tài)畫面。(3)Web 服務(wù)器和CGI 技術(shù)的使用, 可以實現(xiàn)利用遠端PC 機操控家庭的設(shè)備,達到了遠程監(jiān)控的目的。
評論