基于Android的遠程家電控制終端設計
(3)應用程序框架層
應用程序框架層為開發者提供開發所需的各種API,常用的組件有:UI組件、Content Providers(提供一種使應用程序之間可以實現數據互相訪問和共享的服務)、資源管理(管理字體、圖片、組件ID等)、活動管理(它管理了整個程序的生命周期)等。
(4)應用程序層
應用層是和用戶交互的一個層次,用戶可以看得見和操作的一些應用。Android本身提供了桌面,聯系人,撥打電話,瀏覽器等很多基本的應用程序。開發人員可以使用應用框架提供的API編寫自己的應用程序。
2 智能家居遠程家電控制系統的組成
整個系統主要包括3個部分:遠程控制終端(Android手機或者平板電腦),服務器和家電控制器。先由遠程終端發送帶有控制命令的數據包到服務器,當服務器收到控制指令之后,再由服務器發送控制命令到相應的家電控制器上。圖2是遠程家電控制系統的結構圖。本文引用地址:http://www.104case.com/article/159607.htm
在本文中,主要介紹控制終端的設計,下面簡單地介紹一下服務器和家電控制終端。服務器收到命令數據時,通過設備類型和子設備號來識別是哪個設備的控制命令,然后將相應的控制命令發送到相應的控制器上。具體的幀格式定義,會在下一章節中講解。對于家電控制器,分為兩種。一種是簡單控制電路的通斷來控制電器的控制器,主要可控制燈光、冰箱、排風扇等家電,一種是模擬紅外遙控器發出信號的控制器,主要可控制空調、電視機等使用紅外遙控器的家電。我們有了家電控制器之后,就可以在不對家電做任何的改動的情況下,對家電進行控制。
3 終端程序設計
3.1 傳輸協議的選擇
在智能家居中的應用原則中,TCP和UDP作為目前最常用到的網絡通信協議,可以看出TCP是基于連接的協議,UDP是一個無連接的、不可靠的協議,相對于基于流傳輸的TCP而言,UDP是基于消息傳輸的,整體上具有傳輸速度快等優點。通過研究可以看出家用電器的控制信息特點是數據量小,控制信息短,適合用于傳送少量數據、對可靠性要求不高的應用環境,因此更適合采用簡單的、面向數據報的UDP協議。
3.2 應用層幀格式的定義
由于目前智能家居沒有統一的標準,各個不同的系統都是自己定義各個設備的通信協議。表1是本系統家電控制系統應用層報文幀格式的定義。
(1)報頭:固定為0x66、0xAD兩字節,表示一個報文幀的開始。
(2)數據長度:從報頭段0x開始算到命令數據段的最后一個字節總和。表示整個幀的字節數。
(3)路由地址:這個數據位是對路由進行選擇。根據部署的網絡不同的位置,選擇鏈路質量最好的路由節點進行數據傳輸。
(4)設備類型:表示家居設備的種類,我們將家電控制系統固定為0xF4。
(5)子設備號:此字段為家電控制系統里的設備分配唯一的地址,這樣我們可通過設備類型段和子設備號兩個字段唯一標識某個家電設備,便于控制信息的準確有效送達到控制器。
(6)命令數據:裝載具體的家電控制命令,告訴家電控制器收到數據之后需要對家用電器做哪些操作。
3.3 Socket套接宇
在網絡層通過傳輸層進行數據通信時,常常會遇到多個應用程序提供并發服務的問題,為了區別不同的應用程序進程間的網絡通信和連接,就需要使用socket套接字這個接口。對于使用不同的協議通信,TCP是使用socket對象來實現,而UDP是使用DatagramSocket對象來實現。由于我們遠程家電控制系統使用的是UDP協議,在這里我只介紹DatagramSocket。
DatagramSocket是用于連接兩個端點的分組投遞服務,是由Android系統提供的一個公共類。根據編程人員所給的參數,它可以建立與任意可用端口或者與給定端口的連接。
這里我們需要了解的方法有close()、receive(Datagram Packet pack)和send(DatagramPaeket pack)。它們分別是關閉套接字、接收數據報和發送數據報。
從上文我們可以看到發送和接收數據報時,我們接收到的是一個DatagramPaeket對象。所以在這里必須得提到的就是用來存儲數據報數據的final類DatagramPacket。DatagramPacket有多個構造方法,但是它的每個構造方法中一定包括byte[]buf和int lcnsth這兩個參數。buf是用來存儲所要傳輸的數據,length是表示傳輸的數據的長度。當然你在創建DatagramPaeket對象時,還可以指定接收端的IP地址和端口號。
發送數據報的代碼為:
其中portNumber是指服務器的端口號,message是根據應用層幀格式得到的控制命令,serverAddr是指服務器的IP地址。
評論