基于Android的智能家居遠程控制系統設計
摘要:針對智能家居遠程控制問題,結合Android終端設備,設計了一套控制信息對用戶透明的遠程空調控制系統。系統底層控制信息通過基于GSM的短消息方式傳輸,實現了對由6臺空調組成系統的遠程控制。系統采用自定義通信協議,在Android端討論并實現了兩種接收返回信息方式——BroadcastReceiver和ContentObserver方式,對Android中的Handler機制進行講解應用。測試結果表明,系統結構設計合理,操作簡單,性能穩定。
本文引用地址:http://www.104case.com/article/245796.htm引言
遠程控制作為智能家居的一種標志性技術,被廣泛應用于各種智能家居系統中。本文設計并實現了一種智能家居中遠程空調控制方案。本系統基于Android系統客戶端用戶友好型界面和GSM模塊,屏蔽控制信息傳輸處理細節,客戶端采用控件綁定號碼的方式,用戶只需根據終端Android界面提示,即可完成遠程空調控制。相比于以往方案中GSM模塊采用PDU方式進行通信,用戶端需要手動輸入具體命令的模式,本系統采用text文本方式進行通信,傳輸的控制命令僅為數字即可。
本文實現了兩種Android應用中接收短消息的方式BroadcastReceiver(廣播接收者)方式和ContentObserver(內容觀察者)方式,采用Hand ler機制將接收到信息顯示,且對安卓中SQLite數據庫的操作進行闡述及應用。本系統通過接收GSM控制消息的基于LPC1766芯片的集中器傳輸控制消息到各個分控制器,可以同時控制6臺空調,每臺空調對應一個分控制器,具體系統控制端架構見圖1。
?

?
1 系統控制端設計
1.1 硬件設計
本系統采用NXP公司的LPC1766芯片作為集中器的SoC。系統GSM模塊采用華為公司的GTM900-B型號無線模塊,該模塊具有標準的AT命令接口,并提供無線接口用于短消息的收發,且可通過串口通信和嵌入式MCU相連。
本系統葉GSM模塊和集中器通過串口相連。GTM900-B模塊的串口與LPC1766的UART0相連,具體連接見圖2。
?

?
1.2 AT指令
GTM900-B模塊使用了GSM Rec.07.07中規定的標準AT命令,本系統需要使用到的AT命令如表1所列。
?

?
1.3 通信協議
本系統主要通過GSM短消息的方式完成對每個房間的溫度獲取(通過分控制器上的溫度傳感器)和每個房間空調工作模式、溫度的設置,以及關閉房間空調的功能。從安卓終端的角度包括兩個方面的通信——發送和接收。
從安卓終端發送到GSM模塊的控制信息包括三個方面:獲取溫度值,設置某個房間空涮參數,關閉某個房間李調。GSM模塊采用text方式通信,系統將發送的三種控制信息數字化為相同規格:
?

?
其中Sent1表示控制信息類型:“1”表示獲取溫度,“2”表示設置某個房間空調,“3”表示關閉某個房間空調。Sent2表示房間號,取值1~6對應相應房間。Sent3表示當Sent1為“2”時,設置號碼為Sent2的房間空調的工作模式:“1”表示制熱,“2”表示制冷,“3”表示送風,“4”表示除濕。Sent4表示當Sent1為“2”時,設置號碼為Sent2房間的工作溫度。分隔符用冒號表示,主要作為區別控制信息與初始化返回信息的標識符。所以,Android發送端發送的控制信息格式表示為“Sent1:Sent2:Sent3:Sent4”。
對安卓終端接收的反饋消息也包括三個方面:集中器從分控制器得到的溫度信息,設置某個房間空調成功的返回消息,某個房間空調關閉的返回消息。因為這三種消息長度不一致,處理方式不同,系統只對接收消息的前兩位格式化即可完成系統功能,具體如下:
?

?
其中:Rec1表示反饋信息類型:“1”表示溫度信息,“2”表示設置空調返回信息,“3”表示關閉空調返回信息。Rec2表示當Rec1為“2”或“3”時空調返回信息,“1”表示設置或者關閉成功,“0”表示失敗。所以,Android接收端接收的由系統控制端返回的信息中,首先會判斷第1位(即Rec1位),如果是“1”,則表示返回的是各個房間的溫度;如果是“2”,表示的是設置空調(Sent1等于“2”時)的返回消息;如果是“3”,表示的是關閉空調(Sent1等于“3”時)的返回消息;對于Rce1等于“2”或者“3”,再根據Rce2來判斷相應的返回消息狀態。
1.4 集中器軟件設計
集中器上的程序主要完成系統模塊和GSM模塊初始化,判斷控制信息類型及作相應的處理,向終端用戶返回消息。具體程序流程見圖3。
?

?
其中GucRcvNew=1表示集中器從UART0接收到來自GSM模塊的返回消息,recvfg用來對GSM模塊進行初始化,其初值為0。集中器發送命令at到GSM模塊,如果接收到GSM模塊的“at ok”返回消息,則設置recvfg=1,然后進入switch語句,當recvfg=1時,向GSM模塊發送命令at+cmgf =1,如果返回值為“at+cmgf=1 ok”,設置recvfg=2。當recvfg=2時,向GSM模塊發送命令“at+cnmi=2,2,,1”,如果返回值為“at+cnmi =2,2,,1 ok”,設置recvfg=3,到此GSM模塊初始化結束。如果初始化過程中當集中器發送AT命令后,接收到的不是正確返回值,則設置recvfg=0,重新開始初始化。
評論