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