999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種Android端智能家居遠程控制方案的實現※

2014-09-25 03:05:40時光馬維華
單片機與嵌入式系統應用 2014年2期
關鍵詞:設置信息系統

時光,馬維華

(南京航空航天大學計算機科學與技術學院,南京210016)

引 言

遠程控制作為智能家居的一種標志性技術,被廣泛應用于各種智能家居系統中[1]。本文設計并實現了一種智能家居中遠程空調控制方案。本系統基于Android系統客戶端用戶友好型界面和GSM模塊,屏蔽控制信息傳輸處理細節,客戶端采用控件綁定號碼的方式,用戶只需根據終端Android界面提示,即可完成遠程空調控制。相比于以往方案中GSM模塊采用PDU方式進行通信,用戶端需要手動輸入具體命令的模式,本系統采用text文本方式進行通信,傳輸的控制命令僅為數字即可。

本文實現了兩種Android應用中接收短消息的方式BroadcastReceiver(廣播接收者)方式和ContentObserver(內容觀察者)方式,采用Handler機制將接收到信息顯示,且對安卓中SQLite數據庫的操作進行闡述及應用。本系統通過接收GSM控制消息的基于LPC1766芯片的集中器傳輸控制消息到各個分控制器,可以同時控制6臺空調,每臺空調對應一個分控制器,具體系統控制端架構見圖1。

圖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所列[3]。

圖2 集中器與GSM模塊的連接

表1 系統中使用的AT命令

1.3 通信協議

本系統主要通過GSM短消息的方式完成對每個房間的溫度獲取(通過分控制器上的溫度傳感器)和每個房間空調工作模式、溫度的設置,以及關閉房間空調的功能。從安卓終端的角度包括兩個方面的通信——發送和接收。

從安卓終端發送到GSM模塊的控制信息包括三個方面:獲取溫度值,設置某個房間空調參數,關閉某個房間空調。GSM模塊采用text方式通信,系統將發送的三種控制信息數字化為相同規格:

Sent1分隔符Sent2分隔符Sent3分隔符Sent4

其中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 Rec2

其中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模塊初始化,判斷控制信息類型及作相應的處理,向終端用戶返回消息[4]。具體程序流程見圖3。

圖3 集中器程序流程圖

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

根據控制信息類型設置flag子程序和根據flag值進行相應處理的子程序主要是在初始化結束后完成系統功能,程序流程見圖4、圖5。

圖4 根據控制信息設置flag

圖5 根據flag值進行相應處理

本系統集中器采用UART中斷方式和GSM模塊通信,當有數據返回集中器時,會觸發UART中斷,在UART中斷處理程序中從U0RBR寄存器讀數據到Guc RcvBuf[GulNum] 數組中。因為每次通信返回的字節數不相等,本系統在UART中斷處理函數中引入定時器中斷,在定時器中斷處理函數中設置GucRcvNew==1。即每次進入UART中斷處理函數時,開啟定時器,UART在初始化時設定的中斷觸發點是1個字節,當所有返回字節都接收完成時,定時器超時會觸發定時器中斷處理函數,設置GucRcvNew==1,主程序檢測到有數據返回。系統中設置定時器的觸發時間是0.5s。

2 Android端設計

本系統采用Android應用程序的用戶友好型界面作為與用戶的接口,Android終端程序通過控件綁定方式對固定號碼進行短信接收與發送,用戶只需通過點擊控件方式即可傳遞和接收控制信息,具體根據系統自定義通信協議發送的控制信息則完全被程序屏蔽,對用戶完全透明。其中發送短信和接收短息都會對Android系統的SQLite數據庫作出改動,需要對數據庫中的相關信息進行刪除來保證對用戶透明。另外對于控件之間消息傳遞采用Android中的Handler機制[5]。

2.1 發送控制信息

Android中發送消息主要通過SmsManager類來實現,它繼承自java.lang.Object類。其主要的方法說明略——編者注。

發送短信程序首先調用SmsManager.getDefault()獲取SmsManager對象,然后通過PendingIntent的getActivity方法獲得一個PendingIntent對象。根據短信長度Message.length()與短信長度最大值比較來判斷是否需要調用smsManager.divideMessage(Message)將短信分割,然后再調用smsManager的sendTextMessage方法發送短信。代碼略——編者注。

發送短信模塊需要在清單文件AndroidManifest.xml中加入允許發送短信的權限:<uses-permission android:name="android.permission.SEND_SMS"/>。

2.2 接收返回信息

在Android端接收消息,可以采用兩種方式,一種通過BroadcastReceiver廣播接收器的方式,另外一種是通過觀察數據庫變化的內容觀察者類ContentObserver來實現。

2.2.1 BroadcastReceiver接收短信

Android中的廣播是一種在應用程序之間傳遞信息的機制,在Android中有多種廣播,基于GSM短信的接收會產生一個廣播,應用程序可以監聽這些廣播并根據廣播類型作出相應的處理。BroadcastReceiver就是對接收到的廣播進行過濾并響應的一類組件。

當應用程序接收到廣播發送來的intent對象,BroadcastReceiver類根據其注冊的廣播地址與接收到的intent對象進行比較,如果匹配則調用BroadcastReceiver的on-Receive()方法。

BroadcastReceiver類的注冊有兩種方式,第一種是靜態注冊方式,即在AndroidManifest.xml文件中利用intent-filter指明需要過濾的廣播地址。靜態注冊方式會使程序始終監聽廣播消息,并自動調用程序繼承自BroadcastReceiver的類。第二種是動態注冊方式,其在activity中調用函數registerReceiver來注冊,當應用程序關閉后,就不在進行監聽。在動態注冊的activity被銷毀前,需要調用unregisterReceiver解除注冊。

短消息廣播是一個有序廣播,即每次只被優先級最高的接收者處理,然后由優先級高的接收者傳遞到優先級低的接收者。優先級高的接收者可以終止這個廣播。對于有序廣播而言,動態注冊的優先級高于靜態注冊。

系統中定義SmsReceiver類繼承自BroadcastReceiver類,采用動態注冊的方式,在activity中用于動態注冊的代碼略——編者注。

接收短信模塊需要在清單文件AndroidManifest.xml中加入允許發送短信的權限:<receiver android:name=".SMSReceiver"android:enabled="true"></receiver>。

2.2.2 ContentObserver接收短信

系統實際使用中,對于用BroadcastReceiver接收短信往往效果不好,主要因為用戶在Android終端安裝的第三方軟件,比如接收短信軟件、安全軟件等,這類軟件從底層獲取系統權限,優先級始終高于應用層軟件,導致應用層軟件不能優先接收到廣播消息,所以在設計短信接收客戶端時一般采用監聽數據庫方式。

當客戶端接收到短信后會將其插入SQLite數據庫,數據庫發生變化會觸發內容觀察者——ContentObserver。ContentObserver類似于一個觸發器,當其所觀察的Uri發生變化,這個觸發器就會觸發來執行相應的處理。主要方法的說明略——編者注。

本系統在onChange的方法中,利用Context實例對象的getContentResolver方法獲得一個ContentResolver對象,然后調用ContentResolver的query方法獲取當前數據庫中的短消息。具體代碼略——編者注。

對于得到的短消息通過Cursor對象的getColumnIndexOrThrow方法獲取其thread_id,id和body內容。對于在數據庫中的短消息,為了保證對用戶的透明傳輸,要調用ContentResolver對象的delete方法將收件箱中的短消息刪除。具體代碼略——編者注。

ContentObserver接收短信模塊需要在清單文件AndroidManifest.xml中加入允許接收短信的權限:<uses-permission android:name="android.permission.READ_SMS"/>。

2.3 Handler機制

對于使用ContentObserver接收到房間溫度信息后,通過Android的Handler機制將信息傳送到主activity顯示。在Android中,主程序會創建一個Looper對象,在Looper對象初始化時候會創建一個消息隊列Message-Queue用來存放線程放入的消息。用戶可以構造一個Handler對象與Looper溝通,以便將消息push到消息隊列中。當主線程檢測到有新消息進入消息隊列后,首先判斷該消息對應的Handler,然后將消息分發到指定的Handler處理。

系統中通過ContentObserver繼承類SMSContentO-bserver的構造函數將在activity中定義的Handler對象傳入SMSContentObserver中,然后調用Handler對象的obtainMessage方法獲得一個message對象,最后調用message對象的sendToTarget方法將控制消息發送到消息隊列,在activity中定義了handleMessage函數用來處理得到的控制消息。具體代碼略——編者注。

2.4 Android終端效果

Android客戶端控制界面見圖6,當點擊“獲取溫度”按鈕,Android端會自動向系統控制端發送短信“1:0:0:00”,這樣系統控制端會檢測到是1類控制信息,則返回每個房間溫度。

當需要設置某個房間空調的工作方式,則通過點擊“設置空調”按鈕左側的“房間號”、“空調模式”和“設置溫度”等三個下拉列表(Spinner)來設置。如設置房間號為“房間二”,空調模式為“制冷”,設置溫度為“25℃”,然后點擊“設置空調”按鈕,安卓端會自動發送2類控制信息“2:2:2:25”到系統控制端,系統接收到控制信息會處理后返回設置是否成功消息,安卓端解析后將其顯示。當需要關閉某個房間空調,可以通過“關閉空調”按鈕左側的“要關閉空調所在房間號”下拉列表實現,比如選擇“房間五”,然后點擊“關閉空調”按鈕,Android端即把3類控制信息“3:5:0:00”發送到系統控制端,系統控制端處理后將空調關閉狀態返回。

圖6 客戶端初始界面

結 語

智能家居中的遠程控制方式有很多,本系統結合Android終端的用戶友好型界面,采用自定義協議方式,設計了一套基于短消息的空調控制系統。在Android終端接收返回信息的兩種方式中,ContentObserver因其穩定性在工程實踐中使用較多,本系統最終也是采用了ContentObserver的方式,并取得很好的效果。本系統設計合理,性能穩定,對其他工程設計也具有一定參考價值。

編者注:本文為期刊縮略版,全文見本刊網站www.mesnet.com.cn。

[1] 俞建峰.物聯網工程開發與實踐[M] .北京:人民郵電出版社,2013.

[2] 周立功.深入淺出Cortex-M3——LPC1700(上冊)[M] .廣州:廣州致遠電子股份有限公司,2007.

[3] 華為技術有限公司.GTM900無線模塊AT命令手冊[EB/OL] .[2007-07] .http://www.huawei.com.

[4] 劉海濤.嵌入式應用中接收GSM短消息的兩種方法[J] .單片機與嵌入式系統應用,2013(3):11-13.

[5] 楊豐盛.Android應用開發解密[M] .北京:機械工業出版社,2012:166-187.

猜你喜歡
設置信息系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
中隊崗位該如何設置
少先隊活動(2021年4期)2021-07-23 01:46:22
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
本刊欄目設置說明
中俄臨床醫學專業課程設置的比較與思考
展會信息
中外會展(2014年4期)2014-11-27 07:46:46
地鐵出入段線轉換軌設置
主站蜘蛛池模板: 2024av在线无码中文最新| 激情无码视频在线看| 亚洲视频无码| 亚洲黄色视频在线观看一区| 在线国产毛片| 国产女人水多毛片18| 色综合久久久久8天国| 欧美啪啪网| 毛片手机在线看| 91久久国产综合精品| 国产福利免费观看| 全部免费特黄特色大片视频| 欧美日韩在线成人| 男人天堂亚洲天堂| 白丝美女办公室高潮喷水视频| 四虎在线高清无码| 女人爽到高潮免费视频大全| 国产jizz| 亚洲一区无码在线| 国产视频一二三区| 国精品91人妻无码一区二区三区| 亚洲一区二区精品无码久久久| 日韩视频免费| 亚洲午夜国产片在线观看| 国产精品美人久久久久久AV| 久精品色妇丰满人妻| 国产精品女在线观看| 国产视频大全| 九九香蕉视频| 精品久久蜜桃| 香蕉伊思人视频| 天天综合亚洲| 乱人伦中文视频在线观看免费| 亚洲精品桃花岛av在线| 欧美国产菊爆免费观看 | 国产成+人+综合+亚洲欧美| 中文纯内无码H| 曰韩免费无码AV一区二区| 国产三级a| 久久国产精品影院| 国产网站免费看| 欧美色视频网站| 国产高清在线观看91精品| 日本精品视频一区二区| 国产18在线播放| 综合亚洲网| 久久久久免费精品国产| 全部免费特黄特色大片视频| 精品无码人妻一区二区| 欧美在线视频不卡| 伊人色综合久久天天| 亚洲免费黄色网| 一个色综合久久| 亚瑟天堂久久一区二区影院| 国产一级特黄aa级特黄裸毛片| 热re99久久精品国99热| 在线观看免费国产| 国产一区二区三区在线观看视频 | 国产91全国探花系列在线播放| 亚洲三级成人| 国产精品福利在线观看无码卡| 国内精品久久久久久久久久影视 | 国产激爽大片高清在线观看| 999国产精品| 99国产精品免费观看视频| 久久亚洲AⅤ无码精品午夜麻豆| 好久久免费视频高清| 97国产在线观看| 亚洲视频在线网| 深夜福利视频一区二区| 中文字幕无码中文字幕有码在线 | 国产福利一区二区在线观看| а∨天堂一区中文字幕| 综合色在线| 在线观看国产精品一区| 欧美亚洲国产精品第一页| 亚洲码一区二区三区| 国产三级毛片| 3p叠罗汉国产精品久久| 国产超碰在线观看| 97免费在线观看视频| 成人欧美日韩|