<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式Web服務(wù)器的智能家居主控制系統(tǒng)

          基于嵌入式Web服務(wù)器的智能家居主控制系統(tǒng)

          作者: 時(shí)間:2009-07-30 來源:網(wǎng)絡(luò) 收藏

          HTTP協(xié)議工作原理:數(shù)據(jù)包經(jīng)過網(wǎng)絡(luò)傳送到DM9000AEP的以太網(wǎng)控制器后,經(jīng)系統(tǒng)內(nèi)部控制器的TCP/IP堆棧對(duì)數(shù)據(jù)包進(jìn)行解析,然后對(duì)其打包或解包,但這些數(shù)據(jù)包還必須經(jīng)處理。
          3.2 設(shè)計(jì)
          HTTPD的工作流程如圖5所示。系統(tǒng)采用HTTPD多線程并發(fā)服務(wù)器結(jié)構(gòu)的設(shè)計(jì)思想,其工作特點(diǎn)是為每個(gè)客戶機(jī)請(qǐng)求分配一個(gè)線程,即服務(wù)器在同時(shí)處理多人請(qǐng)求。由每個(gè)線程處理客戶機(jī)的請(qǐng)求。在請(qǐng)求處理完畢后,子線程退出。服務(wù)器接收子線程的退出信號(hào)為其他的客戶機(jī)請(qǐng)求分配資源。

          本文引用地址:http://www.ex-cimer.com/article/152404.htm

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


          4 實(shí)驗(yàn)結(jié)果
          經(jīng)過一段時(shí)間的開發(fā)與研究,該系統(tǒng)能夠完成簡(jiǎn)單的指令與數(shù)據(jù)通信,并可將可控家電的信息保存在SQLite數(shù)據(jù)庫(kù)中。


          5 結(jié)束語(yǔ)
          利用S3C2440定制Windows CE系統(tǒng)實(shí)現(xiàn)的簡(jiǎn)單控制,綜合運(yùn)用了電子電路,Windows CE系統(tǒng),HTTP協(xié)議和CSP等技術(shù)。該系統(tǒng)可采用遵循802.11的遠(yuǎn)程無線來控制家電系統(tǒng)。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();