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