基于嵌入式Web服務(wù)器的智能家居主控制系統
HTTP協(xié)議工作原理:數據包經(jīng)過(guò)網(wǎng)絡(luò )傳送到DM9000AEP的以太網(wǎng)控制器后,經(jīng)系統內部控制器的TCP/IP堆棧對數據包進(jìn)行解析,然后對其打包或解包,但這些數據包還必須經(jīng)Web服務(wù)器處理。
3.2 Web服務(wù)器設計
HTTPD服務(wù)器的工作流程如圖5所示。系統采用HTTPD多線(xiàn)程并發(fā)服務(wù)器結構的設計思想,其工作特點(diǎn)是為每個(gè)客戶(hù)機請求分配一個(gè)線(xiàn)程,即服務(wù)器在同時(shí)處理多人請求。由每個(gè)線(xiàn)程處理客戶(hù)機的請求。在請求處理完畢后,子線(xiàn)程退出。服務(wù)器接收子線(xiàn)程的退出信號為其他的客戶(hù)機請求分配資源。本文引用地址:http://dyxdggzs.com/article/152404.htm
圖5中,HTTPD服務(wù)器由main()函數開(kāi)始,首先配置文件,設置用戶(hù)ID函數和組ID函數,通過(guò)getopt(argc,argv,s:f:p:u:g:)函數獲取配置選項,讀取配置。其中:s為standalone服務(wù)器運行方式;f為config_fie即配置文件;p為端口號,HTTPD默認端口號為80;u為用戶(hù)ID即uid;g為組ID,即gid。
然后判斷是否工作在standalone.服務(wù)器運行方式上,如果是則運行standalone_main()函數,如果不是則訪(fǎng)問(wèn)process request()函數。
如果服務(wù)器工作在standalone模式中,依據圖5的工作流程,首先客戶(hù)端與服務(wù)器建立鏈接,建立socket套接字。監聽(tīng)鏈接,設置uid和gid,如果服務(wù)器沒(méi)接收到請求信息,繼續監聽(tīng);如果接收到請求信息,則創(chuàng )建子線(xiàn)程。子線(xiàn)程調用process_request()處理客戶(hù)端請求,服務(wù)器繼續監聽(tīng)鏈接,如果客戶(hù)端請求信息,再創(chuàng )建子線(xiàn)程,調用process_request()處理客戶(hù)端請求,如此多線(xiàn)程并發(fā)處理客戶(hù)端請求。
在process_request()函數中,首先初始化當前時(shí)間,然后讀取并處理HTTP請求消息的方法Method字段,讀取HTTP請求消息的URL字段。主要通過(guò)strcpy_nocrlf(),getparents(),translate_name()這3個(gè)函數對HTIP請求消息的URL字段進(jìn)行解析,依據宏LDGGING決定是否打開(kāi)日志。最后調用send_note()發(fā)送請求的文件給客戶(hù)端。
3.3 Web服務(wù)器通信方案設計
在WINCE系統上開(kāi)發(fā)Web服務(wù)器,并通過(guò)Web服務(wù)器與串口設備進(jìn)行通信的方案有ASP方案、CSP方案和Socket方案。綜合比較,通用WINCE5.0系統不支持ASP控件;Socket主要是C/S方式的,需要安裝客戶(hù)端;而CSP方案在不要求美觀(guān)的情況下,無(wú)需安裝客戶(hù)端就可訪(fǎng)問(wèn)系統。系統則采用該種方案。
CSP方案就是將C語(yǔ)言編寫(xiě)的網(wǎng)絡(luò )和串口通信程序嵌入到HTML當中,這也是嵌入式網(wǎng)絡(luò )開(kāi)發(fā)常用的方案。具體流程如下:
(1)在定制內核的過(guò)程中需要將HTTPD服務(wù)器添加到Platform builder中,遵守HTTP的請求-應答規則。
(2)編寫(xiě)CSP通信程序,通過(guò)PC機訪(fǎng)問(wèn)Windows CE的Web服務(wù)器,打開(kāi)串口,執行串口控制或網(wǎng)絡(luò )通信。直接將C語(yǔ)言嵌入到HTML/XML等模板文件中。CSP文件中HTML界面如實(shí)驗結果所示。通信程序主要函數為建立鏈接函數SetupConnection()用于建立鏈接設置DCB初始參數;打開(kāi)串口函數open_serial()判斷是否打開(kāi)設備串口、設置超時(shí)數值、緩沖區大小、創(chuàng )建監視線(xiàn)程等;讀數據命令read_respond()用于異步讀取緩沖區數據并顯示;發(fā)送命令send command()用于給設備指令??刂浦噶頿owcontrol_command()用于控制電源開(kāi)關(guān);微調函數adjcontrol_command()用于小幅調節設備功能,如光線(xiàn)明暗,溫度高低等;串口監控API函數WINAPICommWatchProc()用于串口緩沖區監控等。
(3)編寫(xiě)好CSP通信文件后,用eyBuild開(kāi)發(fā)包提供的CSP2BIN工具將CSP源文件生成C程序的源文件,再鏈接上eyBuild提供的CGI運行庫,在VC6.0中編譯就可生成在Windows CE平臺運行的CGI程序。該系統生成的CGI為Intelligenthome.cgi。
(4)將在\website\cgi-bin生成的Intelligenthome.cgi文件拷貝到Windows CE系統的\windows\www\文件夾下面,連接PC機便可從PC機訪(fǎng)問(wèn)Windows CE系統,進(jìn)而了解傳感器信號,控制家電。
該系統使用的數據庫為SQLite。SQLite數據庫存放家電的基本信息、參數值、狀態(tài)信息以及傳感器當前狀態(tài)等,這些信息不但反映各種參數的歷史狀態(tài),而且也是管理、決策的重要信息來(lái)源。
4 實(shí)驗結果
經(jīng)過(guò)一段時(shí)間的開(kāi)發(fā)與研究,該智能家居系統能夠完成簡(jiǎn)單的指令與數據通信,并可將可控家電的信息保存在SQLite數據庫中。
5 結束語(yǔ)
利用S3C2440定制Windows CE系統實(shí)現智能家居的簡(jiǎn)單控制,綜合運用了電子電路,Windows CE嵌入式系統,HTTP協(xié)議和CSP等技術(shù)。該系統可采用遵循802.11的遠程無(wú)線(xiàn)來(lái)控制家電系統。
評論