《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 基于Android平臺(tái)的智能家居系統(tǒng)設(shè)計(jì)
基于Android平臺(tái)的智能家居系統(tǒng)設(shè)計(jì)
2015年電子技術(shù)應(yīng)用第10期
陳 瑋1,秦會(huì)斌1,曹曙光2,秦利紅1
(1.杭州電子科技大學(xué) 電子信息學(xué)院,浙江 杭州310018;2.浙江和惠照明科技有限公司,浙江 余姚315400)
摘要: 為了實(shí)現(xiàn)家居生活智能、方便等目的,提出一種基于Android平臺(tái)的智能家居系統(tǒng)。采用內(nèi)外網(wǎng)通信方式,使得當(dāng)家庭寬帶不可用時(shí)仍能通過(guò)內(nèi)網(wǎng)實(shí)現(xiàn)對(duì)家居設(shè)備的控制。將用戶配置信息、設(shè)備信息存在網(wǎng)關(guān)使得不同客戶端能信息共享,實(shí)現(xiàn)動(dòng)態(tài)添加、刪除動(dòng)作。采用推送而不是輪詢,實(shí)時(shí)性好??蛻舳薃PP功能齊全,云計(jì)算的使用實(shí)現(xiàn)了外網(wǎng)控制,同時(shí)便于未來(lái)的系統(tǒng)擴(kuò)展。
中圖分類號(hào): TP311
文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2015.10.043

中文引用格式: 陳瑋,秦會(huì)斌,曹曙光,等. 基于Android平臺(tái)的智能家居系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2015,41(10):158-160,164.
英文引用格式: Chen Wei,Qin Huibin,Cao Shuguang,et al. Design of smart home system based on Android[J].Application of Electronic Technique,2015,41(10):158-160,164.
Design of smart home system based on Android
Chen Wei1,Qin Huibin1,Cao Shuguang2,Qin Lihong1
1.School of Electronics Information,Hangzhou Dianzi University,Hangzhou 310018,China; 2.Zhejiang HeHui Lighting Technology Co.Ltd,Yuyao 315400,China
Abstract: In order to achieve home life become more smart,convenient and other purposes, a smart home system based on Android is proposed.The system has internal and external communicate mode,which makes it possible to control the device by the internal network when the home broadband network is unavailable. The user's configure information and device information are in the gateway,which enables different clients to share information,and realizes the add or delete action dynamically. The status of equipment is obtained by the push technology instead of the polling mode.The APP is designed humanized with complete functions,the use of cloud computing not only realizes the external control,but also facilitates the future system expansion.
Key words : smart home;Android;message push;cloud computing;remote control


0 引言

  智能家居通過(guò)物聯(lián)網(wǎng)技術(shù)將家居子系統(tǒng)有機(jī)結(jié)合在一起形成高度智能化的智慧家庭[1]。物聯(lián)網(wǎng)、云概念的提出加速了智能家居的發(fā)展,Android智能手機(jī)和網(wǎng)絡(luò)技術(shù)的發(fā)展也給智能家居帶來(lái)了新的思路[2]。本文提出一個(gè)基于Android平臺(tái)的智能家居系統(tǒng)設(shè)計(jì)方案。以Android手機(jī)作為家居控制終端,通過(guò)云平臺(tái)轉(zhuǎn)發(fā)消息,真正實(shí)現(xiàn)遠(yuǎn)程控制,將用戶信息、設(shè)備信息存在網(wǎng)關(guān)使不同客戶端能實(shí)現(xiàn)信息共享,實(shí)現(xiàn)動(dòng)態(tài)添加、刪除動(dòng)作。結(jié)合推送技術(shù)獲得良好的實(shí)時(shí)性。

1 系統(tǒng)總體框架圖

  系統(tǒng)由客戶端、云計(jì)算中心、網(wǎng)關(guān)和家庭設(shè)備組成。系統(tǒng)框架如圖1所示。

001.jpg

  客戶端實(shí)現(xiàn)對(duì)底層設(shè)備的控制方式包括:(1)內(nèi)網(wǎng)控制:客戶端使用家庭網(wǎng)絡(luò)與網(wǎng)關(guān)直接通信,由網(wǎng)關(guān)控制底層設(shè)備;(2)外網(wǎng)控制:客戶端與網(wǎng)關(guān)不在同一網(wǎng)段內(nèi),客戶端指令由云服務(wù)器轉(zhuǎn)發(fā)給對(duì)應(yīng)的網(wǎng)關(guān),再由網(wǎng)關(guān)控制底層設(shè)備。采用內(nèi)外網(wǎng)的通信方式,使得家庭寬帶網(wǎng)絡(luò)在不可使用的情況下,仍能通過(guò)內(nèi)網(wǎng)通信實(shí)現(xiàn)對(duì)設(shè)備的控制,同時(shí)節(jié)省用戶數(shù)據(jù)流量[3]。每次運(yùn)行客戶端軟件,會(huì)自動(dòng)獲取網(wǎng)關(guān)處的配置信息、設(shè)備信息。網(wǎng)關(guān)同步底層設(shè)備狀態(tài),當(dāng)發(fā)生改變時(shí)由網(wǎng)關(guān)轉(zhuǎn)發(fā)給客戶端,使用戶能及時(shí)獲知底層設(shè)備的最新?tīng)顟B(tài)。

2 客戶端設(shè)計(jì)與實(shí)現(xiàn)

  2.1 客戶端功能說(shuō)明

  Android客戶端功能模塊如圖2所示。

002.jpg

  設(shè)備管理是核心模塊,包括自定義房間和設(shè)備??商砑印h除、修改房間,房間下可添加設(shè)備。點(diǎn)擊設(shè)備管理,通過(guò)后臺(tái)獲取當(dāng)前用戶下的所有房間并以JSON格式返回,客戶端完成解析并顯示在界面上,點(diǎn)擊添加圖標(biāo)進(jìn)入添加房間界面,填寫房間名稱并將用戶ID與房間名稱發(fā)往網(wǎng)關(guān)并保存至數(shù)據(jù)庫(kù)。通過(guò)長(zhǎng)按房間界面實(shí)現(xiàn)刪除與修改動(dòng)作。點(diǎn)擊房間會(huì)顯示該房間下的所有設(shè)備,可添加設(shè)備,長(zhǎng)按刪除設(shè)備,不提供修改設(shè)備動(dòng)作??梢钥刂茊蝹€(gè)設(shè)備或區(qū)域內(nèi)的所有設(shè)備,也可以對(duì)某個(gè)情景模式關(guān)聯(lián)的設(shè)備進(jìn)行聯(lián)動(dòng)控制。

  2.2 客戶端框架

  在Eclipse開(kāi)發(fā)環(huán)境下,采用java語(yǔ)言,基于MVC模式對(duì)客戶端進(jìn)行設(shè)計(jì)。視圖層View負(fù)責(zé)生成用戶界面,接收輸入并顯示結(jié)果??刂茖覥ontroller用于監(jiān)聽(tīng)用戶操作并作出反應(yīng)。模型層Model定義了各種功能模塊,包括通信模塊、數(shù)據(jù)庫(kù)模塊、數(shù)據(jù)格式的封裝和解析模塊等[4],其中通信模塊是核心。

  2.3 通信模塊

  通信模塊負(fù)責(zé)客戶端和服務(wù)器或網(wǎng)關(guān)間的消息通信和鏈路維護(hù)。通信方式有:TCP/UDP、Http、MQTT推送。系統(tǒng)的通信協(xié)議如圖3。過(guò)程如下:

003.jpg

  (1)第一次使用軟件,需在云端完成注冊(cè),將用戶名和密碼以Http方式發(fā)到云端,并獲得服務(wù)器生成的用戶ID。同時(shí)在家庭WiFi環(huán)境下使網(wǎng)關(guān)加入局域網(wǎng):將WiFi的SSID和密碼通過(guò)加密算法進(jìn)行加密,將加密序列生成UDP數(shù)據(jù)包并發(fā)送出去,網(wǎng)關(guān)獲得該包并解析出WiFi相關(guān)信息,實(shí)現(xiàn)自動(dòng)連接到路由器。

  socket=new DatagramSocket();

  sequence=sequence_init(account.toString(),

  pswd.toString());//生成加密序列

  while(flag){

  for(int i=0; i<len; i++){String str = "";

  for(int j = 0; j<sequence[i]; j++){str += "a";}

  outPacket=new

  DatagramPacket(str.getBytes(),str.length(),

  InetAddress.getByName(s_gateway),4000);

  socket.send(outPacket);}

  socket.receive(receive);

  (2)綁定網(wǎng)關(guān)。網(wǎng)關(guān)加入局域網(wǎng)后監(jiān)聽(tīng)客戶端廣播的數(shù)據(jù)包并返回自己的IP地址和TCP通信端口,客戶端通過(guò)TCP的Socket發(fā)送用戶ID到網(wǎng)關(guān)實(shí)現(xiàn)和網(wǎng)關(guān)的綁定,同時(shí)將用戶和網(wǎng)關(guān)的唯一標(biāo)識(shí)號(hào)發(fā)送至云端實(shí)現(xiàn)綁定,這樣客戶端通過(guò)外網(wǎng)訪問(wèn)云服務(wù)器時(shí),服務(wù)器能轉(zhuǎn)發(fā)指令給對(duì)應(yīng)的網(wǎng)關(guān)。

  (3)以后每次使用軟件前,都要判斷當(dāng)前網(wǎng)絡(luò)環(huán)境。即判斷客戶端和網(wǎng)關(guān)是否在同一網(wǎng)段內(nèi)。若客戶端沒(méi)有接收到返回信息,說(shuō)明它們不在一個(gè)網(wǎng)段內(nèi),則選擇通過(guò)Http方式連接云服務(wù)器。

  (4)采用MQTT實(shí)現(xiàn)設(shè)備狀態(tài)的實(shí)時(shí)更新。訂閱客戶端所綁定的網(wǎng)關(guān),網(wǎng)關(guān)同步底層設(shè)備狀態(tài),當(dāng)狀態(tài)改變時(shí),由網(wǎng)關(guān)發(fā)送給MQTT server,再推送至客戶端。

  系統(tǒng)的通信模塊活動(dòng)圖如圖4所示。

004.jpg

  2.4 通信模塊實(shí)現(xiàn)

  2.4.1 Http通信

  外網(wǎng)通信方式下,用戶登錄、獲取設(shè)備信息等由客戶端采用Http建立主動(dòng)連接,服務(wù)器將結(jié)果以JSON格式返回。模塊中的Http請(qǐng)求用Android-Async-Http網(wǎng)絡(luò)請(qǐng)求庫(kù)實(shí)現(xiàn),它是基于Apache HttpClient庫(kù)之上的一個(gè)異步網(wǎng)絡(luò)請(qǐng)求處理庫(kù),網(wǎng)絡(luò)處理均基于Android的非UI線程,不阻塞UI操作,通過(guò)回調(diào)方法處理請(qǐng)求結(jié)果。

  Android-Async-Http使用簡(jiǎn)單,通過(guò)核心類AsyncHttp-

  Client的實(shí)例就可以執(zhí)行網(wǎng)絡(luò)請(qǐng)求,提供put、post等方法。登陸過(guò)程如下:

  (1)創(chuàng)建AsyncHttpClient的實(shí)例

  AsyncHttpClient client = new AsyncHttpClient();

  (2)創(chuàng)建請(qǐng)求參數(shù)的封裝對(duì)象

  RequestParams params = new RequestParams();

  params.put("username", userName);

  params.put("userpass", userPass);

  (3)執(zhí)行post方法

  client.post(url, params,

  new AsyncHttpResponseHandler (){

  public void onSuccess(int statusCode, Header[] headers,

  byte[] responseBody){

  if(statusCode == 200){//成功

  Toast.makeText(this,new String(responseBody) ).show();}}

  Public void onFailure(int statusCode, Header[] headers,

  byte[] responseBody Throwable error){

  error.printStackTrace();//失敗

  }}…);

  new AsyncHttpResponseHandler()這個(gè)實(shí)例用于接收請(qǐng)求結(jié)果,一般重寫onSuccess()和onFailure()方法接收請(qǐng)求成功或失敗的消息。onSuccess()方法的參數(shù)responseBody為響應(yīng)內(nèi)容字節(jié)。

  2.4.2 MQTT推送

  MQTT是基于TCP/IP協(xié)議,專為物聯(lián)網(wǎng)開(kāi)發(fā)的輕量級(jí)通信協(xié)議。該協(xié)議針對(duì)網(wǎng)絡(luò)差、計(jì)算能力低的設(shè)備做了特殊處理,使其能適應(yīng)物聯(lián)網(wǎng)應(yīng)用場(chǎng)景,有占用寬帶小、耗電量少等優(yōu)勢(shì)。協(xié)議里有兩個(gè)主要角色:MQTT client和MQTT server。client向server訂閱某個(gè)話題就能收到發(fā)布到該話題的所有消息;client發(fā)布消息到某個(gè)話題下,則該話題的所有訂閱者都能收到[5]。通信時(shí)序圖如圖5所示。

005.jpg

  本文通過(guò)MQTT實(shí)現(xiàn)客戶端實(shí)時(shí)獲得設(shè)備信息??蛻舳藢?duì)應(yīng)MQTT client,是消息訂閱者。當(dāng)狀態(tài)改變時(shí),由設(shè)備將信息發(fā)送給網(wǎng)關(guān),再由網(wǎng)關(guān)傳遞給MQTT server,再推送至訂閱了該網(wǎng)關(guān)的客戶端。使用MQTT,須將mqttv3.jar包加入Android應(yīng)用程序中,它是IBM提供的MQTT協(xié)議的實(shí)現(xiàn)。APK調(diào)用該jar包提供的API接口,就能建立MQTT client和MQTT server的連接。流程如下[6]:

  (1)創(chuàng)建一個(gè)MqttClient對(duì)象,參數(shù)包括MQTT server所在的IP地址和端口號(hào)、客戶端唯一標(biāo)識(shí)clientid等。

  MqttClient client=new MqttClient("tcp://123.57.219.126:

  1883",

  "test", new MemoryPersistence());

  (2)創(chuàng)建MqttConnectOptions的對(duì)象并進(jìn)行設(shè)置。用戶名和密碼用于連接MQTT server時(shí)進(jìn)行驗(yàn)證,心跳時(shí)間用于client定時(shí)發(fā)送心跳包,以便和server保持連接。

  MqttConnectOptions options=new MqttConnectOptions();

  options.setUserName(userName);//用戶名

  options.setPassword(passWord.toCharArray());//密碼

  options.setKeepAliveInterval(20);//心跳時(shí)間

  (3)給客戶端設(shè)置回調(diào)。

  client.setCallback(new MqttCallback() {

  public void connectionLost(Throwable cause) {

  //連接丟失后,進(jìn)行重連}

  public void deliveryComplete(IMqttDeliveryToken token){

  //publish后會(huì)執(zhí)行到這里}

  public void messageArrived(String topicNam e,

  MqttMessage message) throws Exception {

  //subscribe后得到的消息會(huì)執(zhí)行到這里面

  Message msg = new Message();

  msg.what = 1;

  msg.obj = topicName+"---"+message.toString();

  //通過(guò)handler傳遞給主線程進(jìn)行UI更新

  handler.sendMessage(msg);}});

  (4)連接到MQTT server。

  client.connect(options);

  (5)訂閱某個(gè)網(wǎng)關(guān)的話題,接收網(wǎng)關(guān)發(fā)布到該話題下的消息,即設(shè)備信息。TOPICS是客戶端訂閱的話題,設(shè)為“gateway-example”。QOS_VALUES代表服務(wù)質(zhì)量保證級(jí)別,1表示至少會(huì)發(fā)送一次消息。

  client. subscribe(TOPICS, QOS_VALUES);

  MQTT技術(shù)可以實(shí)現(xiàn)底層設(shè)備信息的實(shí)時(shí)更新,非常適合智能家居這種使用場(chǎng)景。

3 云計(jì)算中心

  云計(jì)算將計(jì)算任務(wù)分布在大量計(jì)算機(jī)構(gòu)成的資源池上,使各種應(yīng)用系統(tǒng)按需獲取計(jì)算力、存儲(chǔ)空間和信息服務(wù)[7]。云計(jì)算作為一種新技術(shù)受到越來(lái)越多的親睞,很多學(xué)校、企業(yè)都建立了云計(jì)算數(shù)據(jù)中心。本文采用阿里云ECS(Elastic Compute Service)作為云計(jì)算中心,它是一種簡(jiǎn)單高效、處理能力可彈性伸縮計(jì)算服務(wù)。服務(wù)器開(kāi)發(fā)框架采用Jquery+SpringMVC+Mybatis+Ehcache。Mybatis是一個(gè)基于Java的持久層框架,支持普通SQL查詢。為了提高M(jìn)ybatis的性能,需要添加第三方緩存組件支持,目前用的比較多的是Ehcache緩存。Ehcache性能強(qiáng)大、快速簡(jiǎn)單,具有多種緩存策略。Mybatis與Ehcache整合可以提高性能,提高查詢效率,降低數(shù)據(jù)庫(kù)壓力。

4 功能測(cè)試

  主要對(duì)設(shè)備的實(shí)時(shí)控制和狀態(tài)值的實(shí)時(shí)刷新進(jìn)行了驗(yàn)證。設(shè)備用繼電器模擬,使用安裝Android程序的手機(jī)作為客戶端進(jìn)行功能測(cè)試。

  在外網(wǎng)環(huán)境下,當(dāng)客戶端連接服務(wù)器后,觸發(fā)設(shè)備開(kāi)關(guān)按鈕,可以將控制命令由云中轉(zhuǎn)至網(wǎng)關(guān),再轉(zhuǎn)發(fā)至底層設(shè)備控制繼電器開(kāi)關(guān),同時(shí)設(shè)備的最新?tīng)顟B(tài)和傳感器值也會(huì)在客戶端進(jìn)行實(shí)時(shí)刷新。測(cè)試結(jié)果如圖6,客戶端能保持和網(wǎng)關(guān)信息同步。

006.jpg

5 結(jié)論

  本文簡(jiǎn)要介紹了基于Android平臺(tái)的智能家居系統(tǒng)設(shè)計(jì)和關(guān)鍵技術(shù)。該系統(tǒng)結(jié)合了云計(jì)算和MQTT技術(shù),實(shí)現(xiàn)遠(yuǎn)程控制和信息同步,同時(shí)提供了內(nèi)網(wǎng)控制,設(shè)備信息存在網(wǎng)關(guān)保證用戶信息共享。為市場(chǎng)化應(yīng)用提供一種參考。

參考文獻(xiàn)

  [1] 岳敬華.基于云服務(wù)的智能家居系統(tǒng)的研究與設(shè)計(jì)[D].杭州:杭州電子科技大學(xué),2014.

  [2] 吳浩權(quán).基于Android的智能家居系統(tǒng)的研究與設(shè)計(jì)[D].杭州:浙江工業(yè)大學(xué),2013.

  [3] 崔荔.基于Android平臺(tái)的智能家居客戶端系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].西安:長(zhǎng)安大學(xué),2013.

  [4] 王運(yùn)紅,何靈娜.基于Android平臺(tái)智能家居客戶端的設(shè)計(jì)和實(shí)現(xiàn)[J].機(jī)電工程,2014,31(8);1086-1089,1102.

  [5] 關(guān)慶余.基于MQTT協(xié)議的移動(dòng)社交網(wǎng)絡(luò)客戶端的設(shè)計(jì)與實(shí)現(xiàn)[D].沈陽(yáng):中國(guó)科學(xué)院研究生院(沈陽(yáng)計(jì)算技術(shù)研究所),2014.

  [6] 姜妮,張宇,趙志軍.基于MQTT物聯(lián)網(wǎng)消息推送系統(tǒng)[J].網(wǎng)絡(luò)新媒體技術(shù),2014,3(6):62-64.

  [7] 劉鵬.云計(jì)算[M].北京:電子工業(yè)出版社,2011.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。