文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)01-0006-03
智能家居(Smart Home)是以物聯(lián)網(wǎng)(Internet of Thing)為基礎(chǔ),融合計(jì)算機(jī)、通信、控制技術(shù)于一體的現(xiàn)代智慧家居解決方案[1]。隨著人們對(duì)生活質(zhì)量和家居安防要求的提高,智能家居系統(tǒng)在室內(nèi)終端控制方式的基礎(chǔ)上又增加了對(duì)遠(yuǎn)程監(jiān)控的新要求。而嵌入式Web服務(wù)器是解決該問題的一種很好的方案。嵌入式Web服務(wù)器是指采用嵌入式Web技術(shù),在嵌入式設(shè)備上移植的一個(gè)支持通用網(wǎng)關(guān)接口CGI(Common Gateway Interface)或服務(wù)器腳本語言(ASP、JSP、PHP等)功能的輕量級(jí)Web服務(wù)器。嵌入式Web服務(wù)器基于HTTP協(xié)議運(yùn)作,具有標(biāo)準(zhǔn)的接口形式和通信協(xié)議,能夠向用戶提供基于瀏覽器的統(tǒng)一監(jiān)控界面,從而將傳統(tǒng)的嵌入式設(shè)備轉(zhuǎn)變?yōu)橐訲CP/IP為底層通信協(xié)議和以Web技術(shù)為核心的遠(yuǎn)程監(jiān)控設(shè)備[2]。嵌入式Web服務(wù)器的應(yīng)用已成為嵌入式系統(tǒng)必然的發(fā)展趨勢(shì)。
本文主要研究Android系統(tǒng)下的i-Jetty服務(wù)器在智能家居系統(tǒng)中的應(yīng)用。Android是一種基于Linux內(nèi)核的開源嵌入式操作系統(tǒng),其開源特性和良好的UI系統(tǒng)相比于Windows CE和Linux系統(tǒng)具有一定的優(yōu)勢(shì)[3]。因此本文采用Android構(gòu)建智能家居系統(tǒng)。系統(tǒng)將Android、i-Jetty和嵌入式數(shù)據(jù)庫SQLite三者結(jié)合,并以遠(yuǎn)程控制室內(nèi)照明、監(jiān)控室內(nèi)溫度和門窗開關(guān)狀態(tài)為例驗(yàn)證方案的可行性。
1 系統(tǒng)總體設(shè)計(jì)
系統(tǒng)由中央服務(wù)與控制器、控制模塊、藍(lán)牙模塊、監(jiān)控終端以及多種傳感器和家電組成。中央服務(wù)與控制器具有家庭網(wǎng)關(guān)、服務(wù)器和控制器的功能,可提供自身觸摸屏直接監(jiān)控、互聯(lián)網(wǎng)遠(yuǎn)程監(jiān)控和藍(lán)牙室內(nèi)近程監(jiān)控三種監(jiān)控方式??刂颇K與中央服務(wù)以及與控制器的藍(lán)牙模塊配對(duì)組網(wǎng),通過藍(lán)牙通信接收并執(zhí)行控制指令,反饋狀態(tài)信息。系統(tǒng)總體架構(gòu)如圖1所示。
2.1 中央服務(wù)與控制器
中央服務(wù)與控制器模塊采用FriendlyARM公司生產(chǎn)的Mini6410開發(fā)板。Mini6410采用ARM11內(nèi)核的S3C6410A處理器,主頻為533 MHz,外設(shè)接口包括4個(gè)串口、28路GPIO口、1個(gè)SPI和I2C接口等。Mini6410支持Android 2.3,并具有以太網(wǎng)接入功能。
中央服務(wù)與控制器通過串口連接藍(lán)牙主模塊,并與藍(lán)牙終端傳感器、外設(shè)進(jìn)行通信;通過i-Jetty服務(wù)器將采集的家居環(huán)境信息轉(zhuǎn)換為動(dòng)態(tài)網(wǎng)頁進(jìn)行發(fā)布,并為用戶提供Web控制頁面以實(shí)現(xiàn)家電的遠(yuǎn)程控制功能;通過SQLite將相關(guān)家居信息進(jìn)行存儲(chǔ),為用戶提供查看室內(nèi)環(huán)境相關(guān)歷史數(shù)據(jù)的功能。
2.2 藍(lán)牙模塊
藍(lán)牙是一種支持設(shè)備短距離通信的無線電技術(shù),具有自動(dòng)同步、自動(dòng)聯(lián)網(wǎng)功能[4]。最新的低功耗藍(lán)牙BT4.0的有效傳輸距離可達(dá)100 m,連接延遲時(shí)低于3 ms,這些特點(diǎn)使得藍(lán)牙與智能家居系統(tǒng)的結(jié)合更具優(yōu)勢(shì)。
本系統(tǒng)采用廣州匯承公司生產(chǎn)的藍(lán)牙串口透?jìng)髂K,分為主模塊和從模塊兩種。主、從模塊的硬件一致,協(xié)議棧不同。在連接配對(duì)過程中,主動(dòng)發(fā)起搜索任務(wù)的為主模塊。當(dāng)連接完成后,主、從雙方的通信為角色對(duì)等的點(diǎn)對(duì)點(diǎn)通信。Mini6410通過2個(gè)串口分別連接主模塊和從模塊,其中主模塊用于與控制模塊通信,從模塊用于與手機(jī)、平板電腦等手持控制終端通信。藍(lán)牙模塊可通過AT命令進(jìn)行配置。
2.3 控制模塊
控制模塊包括藍(lán)牙從模塊、微處理器和驅(qū)動(dòng)或開關(guān)器件(如繼電器),通過與中央服務(wù)與控制器的藍(lán)牙主模塊配對(duì)組網(wǎng),接收并解析中央服務(wù)與控制器發(fā)來的指令,完成數(shù)據(jù)采集和設(shè)備控制的任務(wù)。本系統(tǒng)采用的微處理器為廣州周立功公司生產(chǎn)的TinyM0開發(fā)板。溫度傳感器采用DS18B20,霍爾傳感器為A04E,傳感器及固態(tài)繼電器與TinyM0的GPIO口連接。
3 軟件平臺(tái)設(shè)計(jì)
3.1 Android驅(qū)動(dòng)加載及系統(tǒng)移植
Mini6410平臺(tái)i-Jetty服務(wù)程序通過控制平臺(tái)的串口實(shí)現(xiàn)藍(lán)牙通信,因此需要移植Android系統(tǒng)并加載串口驅(qū)動(dòng)。FriendlyARM公司提供了交叉編譯工具鏈arm-linux-gcc、Android系統(tǒng)映像制作工具mktools、系統(tǒng)引導(dǎo)文件superboot以及SD卡燒寫工具SD-Flasher,可以方便地實(shí)現(xiàn)系統(tǒng)移植。Mini6410平臺(tái)Android系統(tǒng)移植及驅(qū)動(dòng)加載的過程如下:(1)將編寫的驅(qū)動(dòng)文件拷貝到Linux內(nèi)核的Drivers路徑下,修改Makefile和Kconfig配置文件;(2)通過make命令編譯Linux內(nèi)核,生成內(nèi)核映像;(3)修改Android文件系統(tǒng)中的init.rc文件,增加驅(qū)動(dòng)對(duì)應(yīng)設(shè)備的讀寫權(quán)限;(4)在上位機(jī)編寫JNI程序,并通過Android NDK工具生成Linux平臺(tái)下的.so文件;(4)將.so文件拷貝到系統(tǒng)庫文件路徑下,然后生成Android文件系統(tǒng)的映像;(5)將系統(tǒng)引導(dǎo)文件、Linux內(nèi)核映像、Android文件系統(tǒng)映像燒寫至Mini6410。
3.2 i-Jetty與SQLite
i-Jetty是Android系統(tǒng)下的輕量級(jí)Web服務(wù)器,它將開源Web服務(wù)器Jetty移植到Android平臺(tái),從而使Android設(shè)備可提供Web服務(wù)。i-Jetty是一個(gè)完全由Java實(shí)現(xiàn)的、開源的HTTP服務(wù)器和Servlet容器[5],其運(yùn)行速度快,可以迅速為一些獨(dú)立運(yùn)行的Java應(yīng)用提供網(wǎng)絡(luò)和Web連接功能。i-Jetty是Google的開源項(xiàng)目,可以從Google官網(wǎng)下載APK安裝包直接安裝到Android系統(tǒng)上。
相比于常見的Linux平臺(tái)下的boa、thttpd、mini_httpd、shttpd、lighttpd等嵌入式Web服務(wù)器,i-Jetty具有以下優(yōu)點(diǎn):(1)由于Android支持Java虛擬機(jī),因此i-Jetty支持采用面向?qū)ο笏枷牒投嗑€程技術(shù)構(gòu)建的功能強(qiáng)大的Web服務(wù)程序。(2)支持Servlet技術(shù)。Java Servlet是采用Java技術(shù)的CGI程序[6],相比于其他嵌入式Web服務(wù)器的傳統(tǒng)CGI技術(shù),Servlet能夠更簡潔、更高效地生成動(dòng)態(tài)Web頁面。
SQLite是一個(gè)針對(duì)嵌入式設(shè)備的輕量級(jí)數(shù)據(jù)庫,是一個(gè)自包含、無服務(wù)器、零配置、事務(wù)性的SQL數(shù)據(jù)庫引擎[7]。Android系統(tǒng)集成了SQLite,并提供SQLiteData-
base、Cursor和SQLiteOpenHelper 3個(gè)主要的類用于數(shù)據(jù)庫操作。
3.3 通信協(xié)議
本系統(tǒng)設(shè)計(jì)有通信協(xié)議用于中央服務(wù)與控制器和控制模塊間的通信,其格式如圖4所示。
軟件設(shè)計(jì)有服務(wù)器主線程、串口監(jiān)聽線程、服務(wù)子線程和數(shù)據(jù)保存線程。其中服務(wù)器主線程和串口監(jiān)聽線程的程序流程分別如圖6和圖7所示。
程序開發(fā)環(huán)境為Eclipse。在Eclipse中新建Android項(xiàng)目和動(dòng)態(tài)Web項(xiàng)目,在Web項(xiàng)目中開發(fā)HTML、創(chuàng)建Servlet程序框架并配置web.xml;在Android項(xiàng)目開發(fā)中,首先將Web項(xiàng)目中的Servlet框架文件拷貝到源碼文件夾下,然后進(jìn)行控制邏輯的編碼開發(fā)。Eclipse對(duì)Android項(xiàng)目Java文件自動(dòng)編譯,得到.class文件。在PC任意目錄下構(gòu)建Web工程的通用目錄結(jié)構(gòu),將Android項(xiàng)目中編譯后的類文件和Web項(xiàng)目中的HTML文件、web.xml文件以及i-Jetty服務(wù)器的JAR包拷貝至相應(yīng)路徑下,采用dx命令將工程編譯為Android虛擬機(jī)識(shí)別的字節(jié)碼文件,然后將整個(gè)工程拷貝至Mini6410平臺(tái)i-Jetty服務(wù)器目錄下的webapps文件夾下。
4 系統(tǒng)測(cè)試
將Mini6410接入互聯(lián)網(wǎng),運(yùn)行Android系統(tǒng),打開其上的i-Jetty服務(wù)器。在瀏覽器端輸入服務(wù)網(wǎng)址,打開智能家居系統(tǒng)的登錄頁面,登錄成功后進(jìn)入主頁面,主頁面提供家居管理、系統(tǒng)管理和數(shù)據(jù)管理3項(xiàng)功能。家居管理用于監(jiān)控室內(nèi)環(huán)境和家居狀態(tài);系統(tǒng)管理用于配置系統(tǒng),如增加監(jiān)控家電等;數(shù)據(jù)管理用于查看家居信息歷史數(shù)據(jù)。
進(jìn)入“家居管理”欄目,可以查看室內(nèi)溫度、門窗開關(guān)情況,并可以控制照明燈。管理頁面如圖8所示。
本文提出了一種基于Android平臺(tái)i-Jetty嵌入式Web服務(wù)器的智能家居系統(tǒng)方案。該方案以ARM開發(fā)平臺(tái)Mini6410為核心,通過移植Android系統(tǒng)、加載串口驅(qū)動(dòng)、安裝i-Jetty服務(wù)器和SQLite數(shù)據(jù)庫并利用藍(lán)牙組網(wǎng),實(shí)現(xiàn)對(duì)家居環(huán)境的遠(yuǎn)程監(jiān)控。系統(tǒng)主要采用Java語言開發(fā),具有架構(gòu)簡單、開發(fā)難度較低的特點(diǎn),并采用面向?qū)ο笏枷牒投嗑€程技術(shù)開發(fā)復(fù)雜應(yīng)用程序。后續(xù)工作將對(duì)智能家居系統(tǒng)中的家電藍(lán)牙組網(wǎng)進(jìn)行研究。
參考文獻(xiàn)
[1] 毛明毅,蔣元恒,陳志成.智能家居遠(yuǎn)程Web管理控制平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2013,30(5):121-124.
[2] 劉志東,紀(jì)金水,楊鋒英.嵌入式Web服務(wù)器技術(shù)探究[J].電腦知識(shí)與技術(shù),2011,7(27):6612-6613.
[3] 梁坤.一種基于Android系統(tǒng)的鍵盤模塊設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2013,39(9):15-17.
[4] 王菊.智能家居系統(tǒng)架構(gòu)、實(shí)現(xiàn)與藍(lán)牙技術(shù)應(yīng)用展望[J].電子世界,2012(6):15-16.
[5] 劉偉江,李振漢,唐余亮,等.基于Android的嵌入式Web服務(wù)器設(shè)計(jì)[J].電子設(shè)計(jì)工程,2013,21(9):4-6.
[6] 李亞娟.嵌入式Web技術(shù)應(yīng)用研究[D].西安:西安電子科技大學(xué),2008.
[7] SQLite.About SQLite[EB/OL].[2013-08-23].http://www.sqlite.org/about.html.