基于Android的遠程家電控制終端設(shè)計
摘要:家電控制是智能家居系統(tǒng)的重要組成部分,而隨著智能手機的普及和3G網(wǎng)絡(luò)技術(shù)的快速發(fā)展,以智能手機作為智能家居遠程控制的終端設(shè)備是一個非常理想的選擇。目前在全球范圍內(nèi),Android是一個市場占有率高,免費,開放的智能設(shè)備操作系統(tǒng)。因此,本系統(tǒng)以Android智能終端作為客戶端,使用UDP網(wǎng)絡(luò)傳輸協(xié)議,以實現(xiàn)家電遠程控制系。
關(guān)鍵詞:Android;家電控制;智能家居;UDP協(xié)議
在科學(xué)技術(shù)飛速發(fā)展的今天,人們的物質(zhì)條件和生活水平都在不斷地提高,人們對家居環(huán)境的要求也在不斷地增長。家居不僅要舒適更加需要安全和便捷。遠程家電控制,使人們可以隨時隨地控制家中設(shè)備,給人們帶來便捷的生活方式。傳統(tǒng)的智能家居系統(tǒng)中,大多基于Int ernet的遠程控制,并采用PC做監(jiān)控終端,受到Internet地域的限制,使用起來不是很方便。但隨著智能手機的普及,由于手機體積小便于攜帶,智能手機作為智能家居的控制終端是大勢所趨。
1 Android介紹
Android是Google公司在2007年11月正式推出的一款開源的操作系統(tǒng)。Android系統(tǒng)在它推出后僅僅兩年的時間,就打敗了稱霸智能手機市場10年的諾基亞Symbian成為全球最受歡迎的手機操作系統(tǒng)。
1.1 Android的安全機制
Google為Android引進了以下特有的安全機制:應(yīng)用程序權(quán)限機制,組件包裝和數(shù)字簽名。
(1)應(yīng)用程序權(quán)限機制
Android把每個權(quán)限定義成一個字符串,開發(fā)過程中可以通過在XML Manifest文件中進行權(quán)限的聲明和請求。權(quán)限定義分為兩個類別,一類是應(yīng)用程序在執(zhí)行時所需要請求的權(quán)限,另一類是被其他組件請求的權(quán)限。
(2)組件包裝
Android通過定義組件的“exported”屬性來實現(xiàn)把組件包裝在程序內(nèi)容內(nèi)。將“exported”屬性設(shè)置為“false”就是拒絕被其他外部程序調(diào)用。
(3)數(shù)字簽名
Android的所有應(yīng)用程序必須有數(shù)字證書,這個數(shù)字證書是可以自簽名的。
1.2 Android的系統(tǒng)框架
如圖1所示Android的系統(tǒng)框架由4個部分組成:Linux內(nèi)核層、系統(tǒng)運行庫層、應(yīng)用程序框架層和應(yīng)用程序?qū)印?/p>
(1)Linux內(nèi)核層
Android的Linux內(nèi)核層是基于Linux2.6的,它是介于硬件層和其他軟件組的一個抽象層次。提供內(nèi)存管理、安全性、進程管理、驅(qū)動模型、網(wǎng)絡(luò)組等核心服務(wù)。
(2)系統(tǒng)運行庫層
這一層分成兩個部分,系統(tǒng)庫和Android運行時庫。
系統(tǒng)庫是應(yīng)用層框架庫的支撐。它起到了紐帶的作用。它主要負責(zé)2D和3D繪圖、顯示合成和支持多種常用的音頻、視頻格式錄制和回放等功能。
Android運行時庫又包括核心庫和Dalvik虛擬機兩部分。核心庫提供了Java語言核心庫內(nèi)的大部分功能;Dalvik虛擬機是Android重新設(shè)計的一款虛擬機。Dalvik可以在消耗較少的資源情況下,使一臺設(shè)備同時運行多個虛擬機程序。[!--empirenews.page--]
(3)應(yīng)用程序框架層
應(yīng)用程序框架層為開發(fā)者提供開發(fā)所需的各種API,常用的組件有:UI組件、Content Providers(提供一種使應(yīng)用程序之間可以實現(xiàn)數(shù)據(jù)互相訪問和共享的服務(wù))、資源管理(管理字體、圖片、組件ID等)、活動管理(它管理了整個程序的生命周期)等。
(4)應(yīng)用程序?qū)?br />
應(yīng)用層是和用戶交互的一個層次,用戶可以看得見和操作的一些應(yīng)用。Android本身提供了桌面,聯(lián)系人,撥打電話,瀏覽器等很多基本的應(yīng)用程序。開發(fā)人員可以使用應(yīng)用框架提供的API編寫自己的應(yīng)用程序。
2 智能家居遠程家電控制系統(tǒng)的組成
整個系統(tǒng)主要包括3個部分:遠程控制終端(Android手機或者平板電腦),服務(wù)器和家電控制器。先由遠程終端發(fā)送帶有控制命令的數(shù)據(jù)包到服務(wù)器,當服務(wù)器收到控制指令之后,再由服務(wù)器發(fā)送控制命令到相應(yīng)的家電控制器上。圖2是遠程家電控制系統(tǒng)的結(jié)構(gòu)圖。
在本文中,主要介紹控制終端的設(shè)計,下面簡單地介紹一下服務(wù)器和家電控制終端。服務(wù)器收到命令數(shù)據(jù)時,通過設(shè)備類型和子設(shè)備號來識別是哪個設(shè)備的控制命令,然后將相應(yīng)的控制命令發(fā)送到相應(yīng)的控制器上。具體的幀格式定義,會在下一章節(jié)中講解。對于家電控制器,分為兩種。一種是簡單控制電路的通斷來控制電器的控制器,主要可控制燈光、冰箱、排風(fēng)扇等家電,一種是模擬紅外遙控器發(fā)出信號的控制器,主要可控制空調(diào)、電視機等使用紅外遙控器的家電。我們有了家電控制器之后,就可以在不對家電做任何的改動的情況下,對家電進行控制。
3 終端程序設(shè)計
3.1 傳輸協(xié)議的選擇
在智能家居中的應(yīng)用原則中,TCP和UDP作為目前最常用到的網(wǎng)絡(luò)通信協(xié)議,可以看出TCP是基于連接的協(xié)議,UDP是一個無連接的、不可靠的協(xié)議,相對于基于流傳輸?shù)腡CP而言,UDP是基于消息傳輸?shù)?,整體上具有傳輸速度快等優(yōu)點。通過研究可以看出家用電器的控制信息特點是數(shù)據(jù)量小,控制信息短,適合用于傳送少量數(shù)據(jù)、對可靠性要求不高的應(yīng)用環(huán)境,因此更適合采用簡單的、面向數(shù)據(jù)報的UDP協(xié)議。
3.2 應(yīng)用層幀格式的定義
由于目前智能家居沒有統(tǒng)一的標準,各個不同的系統(tǒng)都是自己定義各個設(shè)備的通信協(xié)議。表1是本系統(tǒng)家電控制系統(tǒng)應(yīng)用層報文幀格式的定義。
(1)報頭:固定為0x66、0xAD兩字節(jié),表示一個報文幀的開始。
(2)數(shù)據(jù)長度:從報頭段0x開始算到命令數(shù)據(jù)段的最后一個字節(jié)總和。表示整個幀的字節(jié)數(shù)。
(3)路由地址:這個數(shù)據(jù)位是對路由進行選擇。根據(jù)部署的網(wǎng)絡(luò)不同的位置,選擇鏈路質(zhì)量最好的路由節(jié)點進行數(shù)據(jù)傳輸。
(4)設(shè)備類型:表示家居設(shè)備的種類,我們將家電控制系統(tǒng)固定為0xF4。
(5)子設(shè)備號:此字段為家電控制系統(tǒng)里的設(shè)備分配唯一的地址,這樣我們可通過設(shè)備類型段和子設(shè)備號兩個字段唯一標識某個家電設(shè)備,便于控制信息的準確有效送達到控制器。
(6)命令數(shù)據(jù):裝載具體的家電控制命令,告訴家電控制器收到數(shù)據(jù)之后需要對家用電器做哪些操作。
3.3 Socket套接宇
在網(wǎng)絡(luò)層通過傳輸層進行數(shù)據(jù)通信時,常常會遇到多個應(yīng)用程序提供并發(fā)服務(wù)的問題,為了區(qū)別不同的應(yīng)用程序進程間的網(wǎng)絡(luò)通信和連接,就需要使用socket套接字這個接口。對于使用不同的協(xié)議通信,TCP是使用socket對象來實現(xiàn),而UDP是使用DatagramSocket對象來實現(xiàn)。由于我們遠程家電控制系統(tǒng)使用的是UDP協(xié)議,在這里我只介紹DatagramSocket。
DatagramSocket是用于連接兩個端點的分組投遞服務(wù),是由Android系統(tǒng)提供的一個公共類。根據(jù)編程人員所給的參數(shù),它可以建立與任意可用端口或者與給定端口的連接。
這里我們需要了解的方法有close()、receive(Datagram Packet pack)和send(DatagramPaeket pack)。它們分別是關(guān)閉套接字、接收數(shù)據(jù)報和發(fā)送數(shù)據(jù)報。
從上文我們可以看到發(fā)送和接收數(shù)據(jù)報時,我們接收到的是一個DatagramPaeket對象。所以在這里必須得提到的就是用來存儲數(shù)據(jù)報數(shù)據(jù)的final類DatagramPacket。DatagramPacket有多個構(gòu)造方法,但是它的每個構(gòu)造方法中一定包括byte[]buf和int lcnsth這兩個參數(shù)。buf是用來存儲所要傳輸?shù)臄?shù)據(jù),length是表示傳輸?shù)臄?shù)據(jù)的長度。當然你在創(chuàng)建DatagramPaeket對象時,還可以指定接收端的IP地址和端口號。
發(fā)送數(shù)據(jù)報的代碼為:
其中portNumber是指服務(wù)器的端口號,message是根據(jù)應(yīng)用層幀格式得到的控制命令,serverAddr是指服務(wù)器的IP地址。[!--empirenews.page--]
3.4 軟件設(shè)計流程
圖3是整個基于Android遠程控制系統(tǒng)軟件設(shè)計流程圖。
為了方便地適用于不同的家電控制系統(tǒng),我們將服務(wù)器的IP地址以一個由用戶輸入的方式來完成,這樣當在一個新的地方安裝整套系統(tǒng)時,在無需改變Android安裝包的情況下,自己輸入新的系統(tǒng)的服務(wù)器IP即可實現(xiàn)遠程控制。
4 測試結(jié)果
本家電控制器在完成設(shè)計、調(diào)試后,在實際展廳進行控制實驗表明該設(shè)計可以完成預(yù)定功能。在長期的實踐和全面測試的過程中,證實本套系統(tǒng)可完成以下功能并且性能穩(wěn)定。
(1)空調(diào)控制:空調(diào)開關(guān),模式轉(zhuǎn)換,掃風(fēng)功能,調(diào)節(jié)風(fēng)速;
(2)電視控制:電視遙控(開關(guān)、選臺、音量調(diào)節(jié)、電視菜單),電視導(dǎo)航(包括各地省級市級電視臺電視節(jié)目預(yù)告),電視游戲;
(3)燈光控制:各個房間燈光的開關(guān);
(4)風(fēng)扇控制:各個房間風(fēng)扇的開關(guān)。
如圖4所示,是手機控制界面圖。從左到右依次是空調(diào)控制界面,電視控制界面,燈光和風(fēng)扇控制界面。
5 小結(jié)
本文簡要的介紹了基于Android的智能家居遠程家電控制的終端設(shè)計和關(guān)鍵技術(shù),包括Android的安全機制和內(nèi)核分析,遠程家電控制系統(tǒng)的組成,每個組成部分的功能,應(yīng)用層幀格式的定義,傳輸協(xié)議的選用以及軟件設(shè)計流程。并在最后展示了測試結(jié)果,證明了基于Android遠程家電控制的可行性。與傳統(tǒng)的基于Internet的遠程家電控制系統(tǒng)相比,基于Android手機的控制系統(tǒng)有著巨大的優(yōu)勢和前景。