版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 本科畢業(yè)設計(論文)</p><p> 題 目:家庭智能網關的開發(fā)與應用</p><p> 學 生:</p><p> 專 業(yè):計算機科學與技術</p><p> 年 級:</p><p> 指導教師:</p><p> 日 期:2008年11
2、月</p><p><b> 目 錄</b></p><p><b> 摘要3</b></p><p> Abstract4</p><p><b> 第一章綜述5</b></p><p> 1.1 什么是智能家居5</p
3、><p> 1.2 設計目標6</p><p> 第二章網關環(huán)境搭建7</p><p> 2.1 硬件平臺概述7</p><p> 2.1.1 S3C2410微處理器8</p><p> 2.1.2 CS8900A以太網控制芯片9</p><p> 2.1.3 RS-232和
4、RS-4859</p><p> 2.1.4 RJ-45以太網口10</p><p> 2.2 軟件平臺概述11</p><p> 2.2.1 Mizi Linux11</p><p> 2.2.2 Boa 小型Web服務器11</p><p> 2.2.3 SQLite 輕型數據庫11</
5、p><p> 2.2.4 軟件平臺構造12</p><p> 2.3 軟件環(huán)境搭建12</p><p> 2.3.1 燒寫Mizi Linux12</p><p> 2.3.2 搭建交叉編譯環(huán)境13</p><p> 2.3.3 Boa移植13</p><p> 2.3.4 S
6、QLite移植15</p><p> 2.3.5 SQLite使用方法與常用命令17</p><p> 第三章網關應用程序設計與實現(xiàn)18</p><p> 3.1 建立數據庫18</p><p> 3.2 后臺程序設計與實現(xiàn)21</p><p> 3.2.1 CGI與客戶端的通訊機制21<
7、/p><p> 3.2.2 程序中讀寫SQLite數據庫26</p><p> 3.2.3 RS485串口讀寫30</p><p> 3.2.4 指令格式定義35</p><p> 3.2.5 CGI腳本舉例37</p><p> 3.3 前臺網頁設計與實現(xiàn)40</p><p>
8、 3.3.1 HTML簡介40</p><p> 3.3.2 CSS簡介42</p><p> 3.3.3 JavaScript簡介46</p><p> 3.3.4 Ajax技術50</p><p> 第四章網關使用說明書57</p><p> 4.1 產品概述57</p>&
9、lt;p> 4.2 使用說明58</p><p> 4.2.1 用戶登陸58</p><p> 4.2.2 主界面59</p><p> 4.2.3 家電控制59</p><p> 4.2.4 系統(tǒng)設置64</p><p><b> 第五章結論72</b></
10、p><p><b> 參考文獻73</b></p><p><b> 附錄74</b></p><p> 附錄A:外文資料翻譯—原文部分74</p><p> 附錄B:外文資料翻譯—譯文部分78</p><p> 附錄C:光盤資料說明82</p>
11、<p> 家庭智能網關的開發(fā)與應用</p><p><b> 摘要</b></p><p> 家庭網關是家庭網絡的核心部件,是智能家居的主要部分,也是未來智能家居的主要發(fā)展方向。</p><p> 本項目開發(fā)的家庭智能網關作為家庭網絡的核心控制部件,用戶可通過Internet、手機等方式遠程控制各種家用電器的運行狀態(tài),如控制
12、電燈的開關、控制空調的溫度等,并且可以設置不同的情景狀態(tài)來實現(xiàn)對所有家電在不同情景狀態(tài)下的協(xié)同控制功能。同時網關還具備安防報警功能,對于突發(fā)狀況,網關會自動向用戶的手機或社區(qū)的安防中心發(fā)出警報信息,并能夠實時抓拍現(xiàn)場照片,以彩信的方式發(fā)送到用戶的手機上。</p><p> 該網關系統(tǒng)的主要硬件設備包括:網關控制主機,信息轉發(fā)器,智能開關等。本文主要論述基于網關控制主機的后臺服務程序和前臺Web頁面的開發(fā)方法和應
13、用原理。</p><p> 用戶主要通過訪問網關Web頁面的方式來控制網關發(fā)出相應的指令以實現(xiàn)對家電等設備的控制與管理。網關主機的硬件基于三星S3C2410嵌入式微處理器,軟件使用Mizi公司開發(fā)的Mizi Linux嵌入式操作系統(tǒng)平臺。</p><p> 網關后臺方面,使用Boa作為Web服務器,SQLite作為后臺數據庫,使用C\C++來編寫CGI腳本。前臺方面,使用HTML、Ja
14、vaScript、CSS來編制Web頁面,并使用Ajax技術來實現(xiàn)客戶端(瀏覽器)與服務器端(網關控制主機)的數據通訊。</p><p> 關鍵詞:家庭網關;智能家居;遠程控制;家電控制;安防報警</p><p> Development and Application of Home Intelligent Gateway</p><p><b>
15、 Abstract</b></p><p> Home gateway is a core device of home network, it’s the main part of intelligent household, it is also the major develop direction of intelligent household in the near future.<
16、;/p><p> As the core device of home network, users can control almost all kinds of appliances remotely through the Internet, mobile phone, etc, such as switch the lamp on-off, set the temperature of the air co
17、nditioner. And users can set different situations to realize the control of all the appliances at the same time in different situations. Moreover, the gateway also has security and alarm function, when there is a burst s
18、ituation, the gateway will send the alert message to user’s mobile phone or secu</p><p> The main hardware devices of this gateway system includes: gateway control host, information router, intelligent swit
19、ch, etc. This passage mainly discourse the development and application of back-end services programs and the front-end webs of the gateway.</p><p> Users can visit the web pages to control the gateway send
20、the specified commands to control and manage the appliances and other devices. The hardware of gateway host based on SAMGSUNG S3C2410 embedded MPU, the software based on Mizi Linux which developed by MIZI Research.</p
21、><p> At the back-end aspect, Boa serves as a web server and SQLite serves as a back-end database, and the CGI scripts were written in C\C++. At the front-end aspect, the web pages were written in HTML, JavaSc
22、ript and CSS, and Ajax technology was used to realize the data communication between client (Browser) and server (Gateway control host).</p><p> Key words: Home gateway; Intelligent household; Remote contro
23、l; Appliances control; Security and alarm</p><p><b> 綜述</b></p><p> 1.1 什么是智能家居</p><p> 智能建筑已經在世界各地蓬勃地發(fā)展起來了,并成為 21 世紀建筑業(yè)發(fā)展的主流。智能建筑是集現(xiàn)代建筑技術、現(xiàn)代通信技術、現(xiàn)代控制技術、現(xiàn)代儀器儀表技術和現(xiàn)代計算
24、機技術于一體的產物。近年來,隨著計算機網絡通信技術的高速發(fā)展和人們對住居環(huán)境要求的提高,也將“智能”的概念引進到了住宅的建設當中。</p><p> “智能”如今給業(yè)者帶來諸多的遐想……</p><p> 當家里發(fā)生緊急求助報警時,能及時自動通過自家電話通知家人,同時通過小區(qū)計算機網絡通知管理中心;</p><p> 當您不在家時,為您的住宅提供全面的安全護衛(wèi)
25、,如防盜、防火、防煤氣,發(fā)生警情能夠迅速通過自家電話及小區(qū)以太網絡通知有關人員進行排除,為您的生活與生命提供保障;</p><p> 盜賊入室行竊,系統(tǒng)會自動通知主人、保安或者110 報警中心,同時家中警號發(fā)出刺耳的警報聲,家中的燈光全部打開;</p><p> 不用起身就可以控制家里所有的燈并可調節(jié)亮度;外出之前只要按一個鍵就可以關上所有的燈和應關的電器;</p>&l
26、t;p> 躺在床上就能關掉衛(wèi)生間的換氣扇;</p><p> 可以根據自己的需要調整燈光亮度并設置場景,輕觸一個按鍵就可以實現(xiàn)各個場景之間的轉換;</p><p> 每天晚上,所有的窗簾都會定時自動關閉;</p><p> 在辦公室或在出差時打開電腦上網,家中的安全設備和家用電器立即呈現(xiàn)在你的面前;</p><p> 在炎熱的
27、夏天,你可以在下班前在辦公室通過電腦打開空調,回到家里便能享受清涼;在寒冷的冬季,則可以享受到融融的溫暖?;丶仪皢与婏堨?,一到家就可以吃上香噴噴的米飯。如果不方便使用電腦,打個電話回家一樣可以控制家電。當你在家中,可以操起任何一部電話或免提子機來控制家中的電器;</p><p> 外出時不必擔心自家的窗戶是否關閉,一個電話或輕敲鍵盤就能隨心所愿。</p><p> 一個遙控器就可以解
28、決家中的電器進行集中控制,省去了在一堆遙控器中尋找的煩惱;</p><p> 國內國外的新聞時事、金融信息,社區(qū)的各種通知和提供的服務可以根據您的選擇定期給您發(fā)送。</p><p> 以上所述并非是遙不可及的夢想,本項目開發(fā)的智能家庭網關正是為了把這些智能家居的夢想變?yōu)楝F(xiàn)實!</p><p> 您在外忙碌了一天,家里的事讓智能家居幫您做吧!</p>
29、<p><b> 1.2 設計目標</b></p><p> 如上所述,本項目開發(fā)的智能家庭網關正是為了實現(xiàn)智能家居控制的目標。目前,本網關已經實現(xiàn)下列功能:</p><p> 對家中各個房間的電器設備的控制,如:電視、空調、DVD、音箱、窗簾等。</p><p> 配合智能開關,可實現(xiàn)對各個房間電燈的控制。</p&
30、gt;<p> 網關具備對碼學習功能,在通過對各個家電遙控器的對碼學習后即可實現(xiàn)網關遠程控制功能。</p><p> 具有情景設置功能,網關共預設了6個情景。用戶可以點擊任一情景,即可使所有進行過情景設置的燈光設備進入相應的狀態(tài)。</p><p> 用戶可根據自己的實際房型進行相應的房間設置,并未每個房間添加不同的電器設備。</p><p>
31、網關可以設置普通用戶和超級用戶二級密碼,方便主人對網關核心功能的控制。</p><p> 由于智能家庭網關這一項目涉及的方面繁多,工程量相當大,所以目前實現(xiàn)的功能還是相當有限的,還有許多非常實用的功能需要進一步去開發(fā)。既便如此,整個家庭網關的構建框架、構建方法已基本形成,為后續(xù)開發(fā)奠定了基礎。</p><p> 由于家庭網關開發(fā)過程中涉及的方面過多,本文主要就基于網關主機平臺的后臺和前
32、臺軟件開發(fā)做詳細闡述。如無特別說明,后文所涉及的“網關”或“家庭網關”均特指網關主機平臺。</p><p><b> 網關環(huán)境搭建</b></p><p> 2.1 硬件平臺概述</p><p> 網關硬件平臺使用基于三星S2C2410微處理器的開發(fā)板。該開發(fā)板由一塊核心板和一塊母版構成,如下圖:</p><p>
33、 SAMSUNG S3C2410微處理器</p><p> CS8900A以太網控制芯片</p><p> Hynix HY57V561620CT-H SDRAM 16M*8Bit * 2</p><p> SAMSUNG K9F1208U0B 64M*8Bit NAND Flash</p><p><b> JTAG端口
34、</b></p><p><b> RJ-45以太網口</b></p><p><b> RS-232串口</b></p><p><b> RS-485串口</b></p><p><b> 電源接口</b></p>&
35、lt;p> 2.1.1 S3C2410微處理器</p><p> S3C2410處理器是Samsung公司基于ARM公司的ARM920T處理器核,采用0.18um制造工藝的32位微控制器。該處理器擁有:獨立的16KB指令Cache和16KB數據Cache,MMU,支持TFT的LCD控制器,NAND閃存控制器,3路UART,4路DMA,4路帶PWM的Timer ,I/O口,RTC,8路10位ADC,Tou
36、ch Screen接口,IIC-BUS 接口,IIS-BUS 接口,2個USB主機,1個USB設備,SD主機和MMC接口,2路SPI。S3C2410處理器最高可運行在203MHz。</p><p> (1)S3C2410芯片集成了大量的功能單元,包括:</p><p> 內部1.8V,存儲器3.3V,外部I/O3.3V,16KB數據Cache,16KB指令Cache,MMU。</
37、p><p> 內置外部存儲器控制器(SDRAM控制和芯片選擇邏輯)。</p><p> LCD控制器,一個LCD專業(yè)DMA。</p><p> 4個帶外部請求線的DMA。</p><p> 3個通用異步串行端口(IrDA1.0,16-Byte Tx FIFO and 16-Byte Rx FIFO),2通道SPI</p>&
38、lt;p> 一個多主I2C總線,一個I2S總線控制器。</p><p> SD主接口版本1.0和多媒體卡協(xié)議版本2.11兼容。</p><p> 兩個USB HOST,一個USB DEVICE(VER1.1)。</p><p> 4個PWM定時器和一個內部定時器。</p><p><b> 看門狗定時器。</b
39、></p><p> 117個通用I/O。</p><p><b> 56個中斷源。</b></p><p><b> 24個外部中斷。</b></p><p> 電源控制模式:標準、慢速、休眠、掉電。</p><p> 8通道10位ADC和觸摸屏接口。<
40、;/p><p> 帶日歷功能的實時時鐘。</p><p><b> 芯片內置PLL。</b></p><p> 設計用于手持設備和通用嵌入式系統(tǒng)。</p><p> 16/32位RISC體系結構,使用ARM920T CPU核的強大指令集。</p><p> 帶MMU的先進的體系結構支持Win
41、CE、EPOC32、Linux。</p><p> 指令緩存(Cache)、數據緩存、寫緩存和物理地址TAG RAM,減小了對主存儲器帶寬和性能的影響。</p><p> ARM920T CPU核支持ARM調試的體系結構。</p><p> 內部先進的位控制器總線(AMBA)(AMBA2.0,AHB/APB)。</p><p><
42、b> ?。?)系統(tǒng)管理</b></p><p><b> 小端/大端存儲支持</b></p><p> 地址空間:每個BANK128MB(全部為1GB)。</p><p> 每個BANK可編程為8/16/32位數據總線。</p><p> BANK0到BANK6為固定起始地址。</p>
43、;<p> BANK7可編程BANK起始地址和大小。</p><p> 一共8個存儲器BANK。</p><p> 前6個存儲器BANK用于ROM、SRAM和其它。</p><p> 兩個存儲器BANK用于ROM、SRAM、和SDRAM(同步隨機存儲器)。</p><p> 支持等待信號用以擴展總線周期。</p&
44、gt;<p> 支持SDRAM掉電模式下的自刷新。</p><p> 支持不同類型的ROM用于啟動(NOR/NAND Flash、EEPROM和其它)。</p><p><b> (3)芯片封裝</b></p><p> 272-FBGA封裝</p><p> 2.1.2 CS8900A以太網控制
45、芯片</p><p> CS8900芯片是Cirrus Logic公司生產的一種局域網處理芯片,在嵌入式領域中使用非常常見。它的封裝是100-pin TQFP,內部集成了片內RAM、10BASE-T收發(fā)濾波器,并且提供8位和16位兩種接口。</p><p> 2.1.3 RS-232和RS-485</p><p> RS-232和RS-485均屬于串口范疇。人
46、們熟悉的RS-232串口標準出現(xiàn)較早,難免有不足之處:</p><p> 接口的信號電平值較高,易損壞接口電路的芯片,又因為與TTL 電平不兼容故需使用電平轉換電路方能與TTL電路連接。</p><p> 傳輸速率較低,在異步傳輸時,波特率為20Kbps。</p><p> 接口使用一根信號線和一根信號返回線而構成共地的傳輸形式, 這種共地傳輸容易產生共模干擾
47、,所以抗噪聲干擾性弱。</p><p> 傳輸距離有限,最大傳輸距離為50英尺,實際有效距離僅為50米左右。</p><p> 由于RS-232存在上述這些不足,于是就不斷出現(xiàn)了一些新的串口接口標準,RS-485就是其中之一,它具有以下特點:</p><p> RS-485的電氣特性:邏輯“1”以兩線間的電壓差為+(0.2—6) V表示;邏輯“0”以兩線間的電
48、壓差為-(0.2—6)V表示。接口信號電平比RS-232-C降低了,就不易損壞接口電路的芯片, 且該電平與TTL電平兼容,可方便與TTL 電路連接。</p><p> RS-485的數據最高傳輸速率為10Mbps。</p><p> RS-485接口是采用平衡驅動器和差分接收器的組合,抗共模干能力增強,即抗噪聲干擾性好。</p><p> RS-485最大的通
49、信距離約為1219M,最大傳輸速率為10Mb/S,傳輸速率與傳輸距離成反比,在100Kb/S的傳輸速率下,才可以達到最大的通信距離,如果需傳輸更長的距離,需要加485中繼器。RS-485總線一般最大支持32個節(jié)點,如果使用特制的485芯片,可以達到128個或者256個節(jié)點,最大的可以支持到400個節(jié)點。</p><p> 在本網關的開發(fā)、應用中,RS-232接口主要用于連接PC,以便通過超級終端等軟件來連接網關
50、主機進行開發(fā)、調試等工作。而RS-485接口則用于連接轉發(fā)器,網關發(fā)送的任何指令都通過此端口發(fā)往轉發(fā)器,并由轉發(fā)器完成指令的發(fā)送工作。</p><p> 2.1.4 RJ-45以太網口</p><p> 本網關的以太網口主要用于通過以太網絡訪問網關的Web頁面,同時亦可用于通過超級終端等軟件以TCP/IP的連接方式來連接開發(fā)板,這樣能進行更穩(wěn)定、更快速的文件傳輸和調試工作。</p
51、><p> 2.2 軟件平臺概述</p><p> 網關基于Mizi Linux嵌入式操作系統(tǒng)平臺。使用Boa作為Web服務器,使用SQLite輕型數據庫作為后臺管理數據庫。后臺CGI腳本使用C\C++編寫,前臺Web頁面則使用HTML、JavaScript和CSS編寫,利用Ajax技術實現(xiàn)前臺與后臺之間的數據通訊。</p><p> 2.2.1 Mizi Lin
52、ux</p><p> Mizi公司開發(fā)的Mizi Linux使用Linux 2.4內核,支持S3C2410微處理器,并提供了完整的適用于S3C2410的MIZI Linux SDK,極大方便了開發(fā)人員基于2410和Mizi Linux平臺的嵌入式應用程序開發(fā)。</p><p> 2.2.2 Boa 小型Web服務器</p><p> Boa是一個單任務的ht
53、tp web服務器,支持認證、CGI腳本等,功能比較全、性能比較高。它和傳統(tǒng)web服務器的主要區(qū)別是:它是單進程的,在接到新的http請求時并不 FORK出一個新的進程來響應,不能同時處理多個到來的連接,而且也不能將自己拷貝多個副本來處理多連接。它在內部處理所有正在進行的http連接請求,只對單獨的CGI程序、自動文件的產生、自動文件的解壓等請求FORK出新進程。它的優(yōu)點是代碼簡單、速度快、適合于嵌入式應用。</p>&l
54、t;p> 值得一提的是,Boa是一款完全開放源碼的免費軟件,用戶可以隨時從官方網站上獲取Boa的最新版本并編譯運行于不同的操作系統(tǒng)平臺。</p><p> 2.2.3 SQLite 輕型數據庫</p><p> SQLite是個輕型的嵌入式數據庫,同樣它也是一款源代碼級的免費軟件。SQLite不同于其他大部分的SQL數據庫引擎,因為它的首要設計目標就是簡單化:易于管理、易于使用
55、、易于嵌入其他大型程序、易于維護和配置。</p><p> 小巧、快速、穩(wěn)定是SQLite的優(yōu)勢。出色的穩(wěn)定性源于SQLite力爭做到簡單化,越簡單就越不容易出錯。也正是因為SQLite的這些優(yōu)勢,SQLite非常適合運行于資源有限的嵌入式平臺上。此外,因為SQLite數據庫幾乎不需要管理,因此對于那些無人值守運行或無人工技術支持的設備或服務,SQLite是一個很好的選擇。SQLite能很好的適用于手機、PDA
56、、機頂盒等嵌入式設備,作為一個嵌入式數據庫它也能夠很好的應用于客戶端程序。</p><p> 2.2.4 軟件平臺構造</p><p> 如圖2-2所示,基于S3C2410和MIZI Linux平臺之上,Boa作為Web服務器擔負著與客戶端通訊的重要工作。當接收到客戶端瀏覽器發(fā)送的HTTP請求后,Boa發(fā)送相應的HTML、JavaScript和CSS文件到客戶端瀏覽器。用戶在瀏覽器網頁
57、上進行相應互動操作后,JavaScript使用Ajax技術與Boa進行通訊,Boa會調用相應的CGI腳本響應用戶的請求,并發(fā)回響應的結果。同時CGI腳本可以直接訪問、操作SQLite后臺數據庫或者網關IO端口來獲取相關數據或發(fā)送相應的控制指令。</p><p> 2.3 軟件環(huán)境搭建</p><p> 2.3.1 燒寫Mizi Linux</p><p> 由
58、于Linux移植已超出本文討論范圍,故在此只給出S3C2410開發(fā)板上移植Linux系統(tǒng)的大致步驟,大致步驟如下:</p><p> 通過JTAG接口燒寫VIVI啟動代碼。</p><p> 在開發(fā)板上運行l(wèi)oad flash kernel x命令,并通過串口xmodem方式傳送Linux內核文件(zImage),完成Linux內核燒寫。</p><p> 在
59、開發(fā)板上運行l(wèi)oad flash root x命令,并通過串口xmodem方式傳送Linux根文件系統(tǒng)文件(root.cramfs),完成根文件系統(tǒng)燒寫。</p><p> 2.3.2 搭建交叉編譯環(huán)境</p><p> 要進行嵌入式設備應用程序開發(fā),在x86 Linux上安裝交叉編譯環(huán)境是首要條件。</p><p> 如前文所述,MIZI公司提供了完整的適用
60、于S3C2410的Mizi Linux SDK。在用于開發(fā)的x86 Linux系統(tǒng)上解壓縮SDK壓縮包后,依次安裝所有的RPM包就可以完成交叉編譯環(huán)境的安裝。安裝完成后,所有的交叉編譯工具都會存在于x86 Linux的/opt/host/armv4l/bin/目錄之下,如armv4l-unknown-linux-gcc、armv4l-unknown-linux-g++和armv4l-unknown-linux-strip等。</p
61、><p> 為了使系統(tǒng)每次啟動后用戶都能直接調用這些交叉編譯工具,需要把/opt/host/armv4l/bin/添加到系統(tǒng)路徑PATH內,具體操作步驟如下:(以Ubuntu Linux 8.04為例)</p><p> 在終端控制臺中輸入命令:sudo vi /etc/bash.bashrc</p><p> 在后面加入如下代碼:</p><
62、p> if [ -d /usr/local/arm ] ; then</p><p> PATH=/usr/local/arm/bin:"${PATH}"</p><p><b> fi</b></p><p> 在終端控制臺中輸入命令:# source /etc/profile,使新的環(huán)境變量生效</p
63、><p> 至此就完成了交叉編譯環(huán)境的安裝,讀者可以自行編寫一個簡單的Hello World程序,并嘗試使用交叉編譯器進行編譯,并將生成的二進制文件上傳至開發(fā)板進行測試。</p><p> 2.3.3 Boa移植</p><p> Boa是一款源代碼開放的免費Web服務器,其移植步驟如下:(假設已按照2.3.2節(jié)的方法成功搭建了交叉編譯環(huán)境?。?lt;/p>
64、<p> 從Boa的官方網站(http://www.boa.org)上獲取最新版的軟件源代碼,目前最新版為0.94.13。</p><p> 解壓下載的源代碼壓縮包。</p><p> 進入解壓目錄的src/目錄下,輸入./configure命令,生成Makefile文件。</p><p> 修改src/compat.h文件,將</p&g
65、t;<p> #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff</p><p> 修改為 #define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff</p><p> 運行make命令,即可生成運行于x86 Linux平臺的Boa二進制文件。</p><p&
66、gt; 修改boa.c文件,將</p><p> if (setuid(0) != -1) {</p><p> DIE("icky Linux kernel bug!");</p><p><b> } </b></p><p> 這三行語句全部注釋掉。</p><p&
67、gt; 修改Makefile文件,將 CC = gcc</p><p> CPP = gcc -E</p><p> 改為 CC = armv4l-unknown-linux-gcc </p><p> CPP = armv4l-unknown-linux-gcc –E</p><p> 運行make clean,再運行make命令
68、,即可生成運行于ARM Linux平臺的Boa二進制文件。</p><p> 至此,能夠運行于S3C2410/Mizi Linux平臺的Boa已經成功生成,可以將該boa二進制文件上傳至開發(fā)板。但是此時還無法啟動Boa,因為還未對Boa進行配置,需要對boa.conf文件進行相應的配置,方法如下:</p><p> 回到x86 Linux上的Boa解壓目錄下,打開boa.conf文件,
69、修改如下配置:</p><p> Port——設置提供Web服務的端口號。這里使用默認端口號80。</p><p> User——設置以什么用戶身份訪問Web。因為需要訪問并運行CGI腳本,為了防止權限不足的問題,這里使用root作為Web訪問身份。</p><p> Group——設置訪問用戶所屬用戶組。因為嵌入式設備上無nogroup組,故這里設置成0。&
70、lt;/p><p> ErrorLog——錯誤日志存放路徑。因為在開發(fā)板上Boa放在/mnt/下,故這里設置成/mnt/error_log。</p><p> AccessLog——訪問日志存放路徑。同上,設置成/mnt/access_log。</p><p> DocumentRoot——Web根文件夾,即存放網站首頁HTML文件的文件夾。這里設置成/mnt。&
71、lt;/p><p> DirectoryIndex——默認首頁HTML文件文件名。這里設置成index.html。</p><p> DirectoryMaker——創(chuàng)建文件夾列表的文件夾路徑。這里設置成/mnt。</p><p> MimeTypes——設置mime.types文件路徑。這里設置為/mnt/mime.types。</p><p
72、> CGIPath——設置CGI腳本的存放路徑。這里設置為/mnt/cgi-bin。</p><p> ScriptAlias——設置CGI腳本文件夾別名。這里設置為ScriptAlias /cgi-bin/ /mnt/cgi-bin/。</p><p> 將修改好的boa.conf和mime.types(一般位于/etc/下)文件傳到開發(fā)板boa所處的同文件夾(即/mnt/
73、)下。</p><p> 逐一建立在boa.conf文件中設置的各個文件夾(包括所有涉及的子文件夾)。</p><p> 運行./boa –c .命令,正常情況下即可啟動boa??梢允褂胮s –A命令確認boa進程是否已啟動。</p><p> 用戶可以建立一個簡單的index.html文件并傳輸到開發(fā)板/mnt/文件夾下,然后在客戶端上使用瀏覽器(輸入地址:
74、http://網關IP地址:端口號(默認80端口可不輸))測試boa是否能正常工作。</p><p> 2.3.4 SQLite移植</p><p> SQLite是一款源代碼開放的免費輕量級數據庫軟件,其移植步驟如下:(假設已按照2.3.2節(jié)的方法成功搭建了交叉編譯環(huán)境!)</p><p> 從SQLite的官方網站(http://www.sqlite.or
75、g)上獲取最新版的軟件源代碼,目前最新版為3.6.5,本文使用的版本為3.5.9,兩者編譯方法相同。</p><p> 解壓下載的源代碼壓縮包,假設解壓在文件系統(tǒng)根目錄下(/)。</p><p> 在文件系統(tǒng)根目錄下建立一個文件夾以存放生成的文件:mkdir /sqlite-arm。</p><p> 進入解壓目錄,運行命令./configure --host
76、=armv4l-unknown-linux --prefix=/sqlite-arm --disable-tcl,即可在解壓目錄下生成適用于ARM Linux平臺的Makefile文件。</p><p> 運行make命令,系統(tǒng)就會利用交叉編譯器來編譯SQLite。</p><p> 運行make install命令。</p><p> 如果以上步驟都順利完成
77、的話,在/sqlite-arm文件夾下會生成三個文件夾:</p><p> bin/包含運行于ARM Linux平臺的sqlite3二進制文件。</p><p> include/包含sqlite3.h和sqlite3ext.h兩個頭文件。</p><p> lib/包含SQLite3適用于ARM Linux平臺的幾個鏈接庫文件,如動態(tài)鏈接庫文件libs
78、qlite3.so.0.8.6和靜態(tài)鏈接庫文件libsqlite3.a等。</p><p> 值得指出的是,在交叉編譯有關SQLite的應用程序時,如果采用普通的動態(tài)鏈接方式編譯,則除了編譯好的二進制文件外,位于該lib/目錄下的幾個庫文件也需要上傳至開發(fā)板,該程序才能正常運行,否則會因為找不到相應的SQLite鏈接庫文件而無法運行。所以為了避免麻煩,在編譯ARM版本的SQLite應用程序時一般采用靜態(tài)鏈接的方
79、式進行編譯,這樣生成的二進制文件雖然比較大,但卻不需要提供額外的SQLite鏈接庫文件。</p><p> 此外因為編譯生成的sqlite二進制文件和庫文件libsqlite3.so.0.8.6中包含有調試信息,所以文件體積比較大,可以使用strip工具剝離調試信息,方法如下:</p><p> 進入/sqlite-arm,運行armv4l-unknown-linux-strip bi
80、n/sqlite3命令和armv4l-unknown-linux-strip lib/libsqlite3.so.0.8.6命令來剝離調試信息,生成體積較小的二進制文件。</p><p> 至此,就完成了ARM Linux平臺的SQLite的編譯。在實際的嵌入式開發(fā)過程中,一般不直接在開發(fā)板上使用sqlite3程序來操作和管理數據庫,為了方便操作,一般都在x86 Linux上建立數據庫并添加相應的數據表和數據,
81、并將生成的數據庫文件上傳至開發(fā)板。所以有必要再編譯一個能夠運行于x86 Linux平臺的SQLite程序,以方便在x86 Linux上操作數據庫文件。</p><p> 要編譯能夠運行于x86 Linux平臺的SQLite方法更為簡單,依次按照上述的ARM版本編譯方法執(zhí)行到第6步即可,其中需要注意:跳過第3步;在第4步中只需運行./configure命令,無需其它開關參數。這樣就完成了x86版SQLite的編譯
82、,而且在執(zhí)行make install命令后,x86版的sqlite3二進制文件被存放在/usr/local/bin/目錄下,而x86版的鏈接庫文件則存放在/usr/local/lib/目錄下,由于這兩個路徑都默認存在于PATH環(huán)境變量中,所以用戶可以直接調用sqlite3命令或相應的sqlite鏈接庫文件,相當方便。</p><p> 2.3.5 SQLite使用方法與常用命令</p><p
83、> 完成了x86 Linux版SQLite的編譯后,有必要簡單介紹一下SQLite的使用方法和常用命令,以方便日常數據庫創(chuàng)建、修改、調試和維護。</p><p> 可以使用sqlite3 test.db命令進入sqlite3的命令行操作界面。如果不存在test.db文件則創(chuàng)建之,反之則打開之。成功進入sqlite3命令行界面后會顯示如下信息:</p><p> SQLite v
84、ersion 3.5.9</p><p> Enter ".help" for instructions</p><p><b> sqlite></b></p><p> 在sqlite>提示符后就可輸入常規(guī)的SQL語句,并以分號(;)結尾,回車即可執(zhí)行相應的SQL語句。如sqlite> selec
85、t * from test;查詢test表中所有數據記錄。</p><p> 除了常規(guī)SQL語句外,SQLite還內置了一些指令方便對數據庫的管理,如下:</p><p> .databases 列出數據庫文件名</p><p> .tables ?PATTERN? 列出?PATTERN?匹配的表名</p><p> .i
86、mport FILE TABLE 將文件中的數據導入的文件中</p><p> .dump ?TABLE? 生成形成數據庫表的SQL腳本</p><p> .output FILENAME 將輸出導入到指定的文件中</p><p> .output stdout 將輸出打印到屏幕</p><p> .mode M
87、ODE ?TABLE? 設置數據輸出模式(csv,html,tcl…)</p><p> .nullvalue STRING 用指定的串代替輸出的NULL串</p><p> .read FILENAME 執(zhí)行指定文件中的SQL語句</p><p> .schema ?TABLE? 打印創(chuàng)建數據庫表的SQL語句</p>&l
88、t;p> .separator STRING 用指定的字符串代替字段分隔符</p><p> .show 打印所有SQLite環(huán)境變量的設置</p><p> .help 顯示所有的可用命令和幫助信息</p><p> .quit 退出命令行接口</p><p> 注:以上SQLite內置指令前全部有一
89、個“.”,且指令后也無需加分號;只有執(zhí)行常規(guī)的SQL語句時語句后才需要添加分號。</p><p> 網關應用程序設計與實現(xiàn)</p><p> 完成了網關環(huán)境的搭建,下面就將進入網關開發(fā)的重點——應用程序的設計與實現(xiàn)。這里所指的“應用程序”當然包括后臺的CGI腳本和前臺的由HTML、JavaScript和CSS文件構成的Web頁面,本章將就這兩部分程序的開發(fā)做出較為詳細的闡述。</
90、p><p> 在開始討論前,有必要事先規(guī)定一下各種文件存放的目錄結構,因為無論在CGI腳本還是Web頁面的編寫中都需要大量使用相對路徑來操作數據庫或讀取圖片文件。文件存放的目錄結構如下:</p><p> ====================家庭網關目錄路徑結構====================</p><p> /mntHTML文件、boa、bo
91、a.conf、mime.types等</p><p><b> |</b></p><p> +---cgi-binCGI腳本</p><p> +---image圖片資源</p><p> | +---img_indexindex.html使用的圖片</p><p> |
92、 +---theme1主題1</p><p> | +---theme2主題2</p><p> | \---theme3主題3</p><p> |............</p><p> +---javascriptJavaScript腳本</p><p> +---s
93、tyleCSS樣式表</p><p> \---sqlite數據庫文件</p><p><b> 3.1 建立數據庫</b></p><p> 如前文所述,網關使用SQLite作為后臺數據庫。該數據庫中需要保存包括網關設置參數、房間配置數據、電器設備遙控指令、遙控開關指令、用戶密碼信息等在內的所有數據。</p>&l
94、t;p> 在本項目中,數據庫文件名為“gateway.db”,在開發(fā)板上存放于/mnt/sqlite文件夾下。截止目前該數據庫中共建立了以下數據表:</p><p><b> roominfo表</b></p><p> 該表用于存放房間編號和對應的房間名稱,用于在配置房間信息時使用。</p><p> CREATE TABLE
95、roominfo (</p><p> roomid tinyint,--房間編號</p><p> roomname varchar(20));--房間名稱</p><p><b> 示例數據:</b></p><p> INSERT INTO "roominfo" VALUES(1,&
96、#39;客廳');</p><p> INSERT INTO "roominfo" VALUES(2,'飯廳');</p><p><b> roomset表</b></p><p> 該表用于存放用戶的房間配置信息。在網關中,用戶最多可以設置16個房間,這16個房間的數據便存放于該表中。<
97、;/p><p> CREATE TABLE roomset (</p><p> id integer primary key unique check (id>=0 and id<16),--編號,0~15,共16個</p><p> roomid tinyint not null default 0);--房間編號,來自roominfo,0表示
98、未設置房間</p><p><b> 示例數據:</b></p><p> INSERT INTO "roomset" VALUES(0,1);--房間0設置為“客廳”</p><p> INSERT INTO "roomset" VALUES(1,2);--房間1設置為“飯廳”</p&g
99、t;<p> appcmdlist表</p><p> 該表用于存放每一種家電設備的各條指令名稱字符串。如用于DVD控制的指令有:“開/關”、“出盒”、“播放”、“暫?!?、“停止”等。</p><p> CREATE TABLE appcmdlist (</p><p> apptype tinyint check(apptype>=0
100、and apptype<5),--家電類型,0~5</p><p> cmdindex tinyint not null,--該指令在當前家電指令列表中的索引號</p><p> cmdname varchar(20) not null,--指令名稱,“開/關”、“播放”等</p><p> primary key(apptype,cmdindex
101、));</p><p><b> 示例數據:</b></p><p> INSERT INTO "appcmdlist" VALUES(0,0,'開/關');</p><p> INSERT INTO "appcmdlist" VALUES(0,1,'靜音');<
102、;/p><p><b> appname表</b></p><p> 該表用于存放用戶已添加的家電設備的信息,以及每個家電對應的信息轉發(fā)器編號。</p><p> CREATE TABLE appname (</p><p> apptype tinyint check(apptype>=0 and appty
103、pe<5),--家電類型</p><p> roomid tinyint,--房間編號</p><p> appid tinyint check(appid>=0 and appid<256), --家電編號,每房間可有256個家電</p><p> appname varchar(20) not null,--家電名稱</p&
104、gt;<p> routeid smallint check(routeid>=0 and routeid<16) not null,--轉發(fā)器編號</p><p> primary key(roomid,appid));</p><p><b> 示例數據:</b></p><p> INSERT INTO
105、 "appname" VALUES(1,1,0,'海爾空調',14);--在客廳添加“海爾空調”</p><p> INSERT INTO "appname" VALUES(4,2,0,'北窗簾',12);--在飯廳添加“北窗簾”</p><p> appctrlinfo表</p><p&g
106、t; 該表用于存放各個家電設備已經學習的遙控指令信息。</p><p> CREATE TABLE appctrlinfo(</p><p> appcmd int,--已學習的遙控指令,4個字節(jié)長度</p><p> cmdindex tinyint,--該指令在當前家電指令列表中的索引號</p><p> appid tin
107、yint check(appid>=0 and appid<256),--家電編號</p><p> roomid tinyint,--房間編號</p><p> apptype tinyint check(apptype>=0 and apptype<5),--家電類型</p><p> primary key(roomid,a
108、ppid,cmdindex));</p><p><b> 示例數據:</b></p><p> INSERT INTO "appctrlinfo" VALUES(1667457891,0,0,1,1);/*客廳中“海爾空調”的“開/關”遙控指令信息*/</p><p> INSERT INTO "appc
109、trlinfo" VALUES(1734702945,0,0,2,4);/*飯廳中“北窗簾”的“開”遙控指令信息*/</p><p> switchinfo表</p><p> 該表用于存放目前已添加的燈光開關設備的信息。</p><p> CREATE TABLE switchinfo (</p><p> roomid
110、 tinyint not null,--房間編號</p><p> swid smallint check(swid>=0 and swid<4096),--遙控器地址,12位</p><p> keyid tinyint check(keyid>=0 and keyid<16),--遙控器按鍵編號,0~15</p><p> r
111、outeid tinyint check(routeid>=0 and routeid<16),--轉發(fā)器編號</p><p> swname varchar(20),--燈光開關名稱</p><p> primary key(roomid,swid,keyid,routeid,swname));</p><p><b> 示例數據:
112、</b></p><p> INSERT INTO "switchinfo" VALUES(1,4,7,14,'測試燈光');--客廳中添加“測試燈光”</p><p> INSERT INTO "switchinfo" VALUES(1,2,1,14,'test');--客廳中添加“test”&l
113、t;/p><p><b> userpwd表</b></p><p> 該表用于存放用戶設置的普通密碼、超級密碼和安防密碼的md5碼。</p><p> CREATE TABLE userpwd (</p><p> pwdtype smallint primary key,--密碼類型,1-普通密碼,2-超級密碼
114、,3-安防密碼</p><p> pwd char(32));--密碼的md5碼</p><p><b> 示例數據:</b></p><p> INSERT INTO "userpwd" VALUES(1,'e10adc3949ba59abbe56e057f20f883e');--普通密碼<
115、/p><p> INSERT INTO "userpwd" VALUES(2,'e10adc3949ba59abbe56e057f20f883e');--超級密碼</p><p> defvalues表</p><p> 該表用于存放網關的默認設置參數,以便于用戶恢復出廠設置。</p><p> CR
116、EATE TABLE defvalues (</p><p> key varchar[20],--設置名</p><p> value varchar[50]);--設置默認值</p><p><b> 示例數據:</b></p><p> INSERT INTO "defvalues"
117、 VALUES('userpwd','e10adc3949ba59abbe56e057f20f883e');</p><p> --默認普通密碼的md5碼</p><p> INSERT INTO "defvalues" VALUES('safepwd','e10adc3949ba59abbe56e057f20
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能家庭網絡外文翻譯
- EIB家庭網關的研究與開發(fā).pdf
- 家庭網關
- 嵌入式智能家庭網關的設計與實現(xiàn).pdf
- 畢業(yè)設計--智能樓宇設計(含外文翻譯)
- 嵌入式無線家庭網關的設計與應用.pdf
- 智能家庭網關設計的關鍵技術研究.pdf
- 基于gsm家庭防盜畢業(yè)設計(含外文翻譯)
- 智能家庭網關的嵌入式軟件設計與實現(xiàn).pdf
- 基于ARM-ZigBee技術的智能家庭網關研究與設計.pdf
- 智能家居家庭網關平臺的研究與設計.pdf
- labview智能小車畢業(yè)設計(含外文翻譯)
- 智能電網畢業(yè)設計--智能電網的研究與探討(含外文翻譯)
- 基于Android的智能家居系統(tǒng)家庭網關的設計與實現(xiàn).pdf
- 基于家庭網關的家居智能控制系統(tǒng)的設計.pdf
- labview智能小車畢業(yè)設計(含外文翻譯)
- ZigBee無線家庭網關的設計.pdf
- 多模式家庭網關設計與實現(xiàn).pdf
- 數字家庭網關的設計與實現(xiàn).pdf
- 家庭網關IP QoS的設計與實現(xiàn).pdf
評論
0/150
提交評論