朱惠聰,林顯明,黃永鋒,毋茂盛,張會(huì)章
(肇慶學(xué)院 計(jì)算機(jī)科學(xué)與軟件學(xué)院,廣東 肇慶 526061)
隨著互聯(lián)網(wǎng)技術(shù)和通信技術(shù)的不斷發(fā)展,手機(jī)已成為生活的必備工具之一。由于人們經(jīng)常外出工作,使用手機(jī)遠(yuǎn)程監(jiān)控家居設(shè)備顯得格外重要。本文開發(fā)了一款A(yù)PP及相關(guān)硬件,可通過遠(yuǎn)程服務(wù)器實(shí)時(shí)監(jiān)控家中設(shè)備。
系統(tǒng)整體結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)整體結(jié)構(gòu)
ZigBee終端(end)通過采集溫濕度數(shù)據(jù)發(fā)送給協(xié)調(diào)器(Coordinator),協(xié)調(diào)器收集信息并整理后,發(fā)送給樹莓派,樹莓派接收到信息并訪問阿里云服務(wù)器,將其信息存儲(chǔ)到數(shù)據(jù)庫(kù),通過搭建django框架將數(shù)據(jù)顯示于網(wǎng)頁(yè),Andriod客戶端APP通過HTTP協(xié)議訪問網(wǎng)頁(yè)并讀取網(wǎng)頁(yè)信息,最后在APP上顯示。攝像頭采用了MJPG-Stream軟件,樹莓派通過HTTP訪問其上的攝像頭,借助遠(yuǎn)程服務(wù)器實(shí)現(xiàn)遠(yuǎn)程視頻傳輸效果。同時(shí),Andriod客戶端APP也可通過阿里云服務(wù)器發(fā)送信息給樹莓派,樹莓派通過收到的信息標(biāo)志位做出相關(guān)的控制操作,以達(dá)到遠(yuǎn)程控制燈光、窗簾的目的。
系統(tǒng)硬件主要包括樹莓派、CSI攝像頭、溫濕度傳感器、繼電器、雨滴傳感器、電機(jī)模塊、超聲波測(cè)距模塊、CC2530協(xié)調(diào)器和CC2530終端節(jié)點(diǎn)。
樹莓派(Raspberry Pi)系統(tǒng)基于Linux研發(fā),包括40個(gè)GPIO口,可用于拓展模塊,4個(gè)USB端口,MicroSD卡槽,支持視頻音頻的輸出,網(wǎng)絡(luò)接口,自帶藍(lán)牙WiFi模塊,支持SPI,I2C等總線,是一款功能強(qiáng)大且開源的電腦板[1]。因此,本項(xiàng)目以樹莓派為主板進(jìn)行開發(fā)設(shè)計(jì)。
鏡頭參數(shù)為1/4 5 M,光圈參數(shù)為2.9,焦距參數(shù)為3.29,視場(chǎng)角參數(shù)為72.4°。CSI接口可與樹莓派對(duì)接進(jìn)行視頻流信息傳輸。
CC2530是由美國(guó)TI公司設(shè)計(jì)的SoC芯片[2],它采用8051內(nèi)核,含有可編程閃存,8 kB RAM,UART和SPI接口等,采用ZigBee協(xié)議可進(jìn)行數(shù)據(jù)的無線發(fā)射和接收,適合于智能家居、工業(yè)控制等特定場(chǎng)合,省去連線的麻煩,被廣泛應(yīng)用于物聯(lián)網(wǎng)技術(shù)領(lǐng)域。本項(xiàng)目中分別用CC2530設(shè)計(jì)了協(xié)調(diào)器和終端節(jié)點(diǎn),終端節(jié)點(diǎn)與溫濕度傳感器相連,兩者之間通過ZigBee進(jìn)行無線通信。協(xié)調(diào)器用作樹莓派和終端節(jié)點(diǎn)之間的橋梁進(jìn)行數(shù)據(jù)傳輸,實(shí)現(xiàn)室內(nèi)溫濕度數(shù)據(jù)采集。溫濕度采集流程如圖2所示。
傳感器模塊主要包括溫濕度傳感器DHT11、繼電器、超聲波測(cè)距傳感器HC-SR04、雨滴傳感器。溫濕度傳感器DHT11和終端節(jié)點(diǎn)相連,超聲波測(cè)距傳感器HC-SR04和雨滴傳感器與樹莓派GPIO相連。DHT11是集溫濕度采集于一體的復(fù)合型傳感器,由于SPI采用三線進(jìn)行數(shù)據(jù)傳送,因此接口電路十分簡(jiǎn)單[3]。超聲波傳感器HC-SR04測(cè)距模塊提供2~400 cm非接觸式距離感測(cè)功能,精度高達(dá)3 mm,可用于判斷窗簾是否完全打開或關(guān)閉。雨滴傳感器主要用于檢測(cè)是否下雨,從而自主關(guān)閉門窗。
圖2 溫濕度采集流程
控制模塊主要由步進(jìn)電機(jī)、ULN2003電機(jī)驅(qū)動(dòng)、燈泡及繼電器組成。通過接收Android手機(jī)端發(fā)送的指令,進(jìn)行相應(yīng)模塊的控制操作。ULN2003電機(jī)驅(qū)動(dòng)主要用于驅(qū)動(dòng)步進(jìn)電機(jī)轉(zhuǎn)動(dòng),從而控制門窗轉(zhuǎn)動(dòng)。繼電器控制220 V電源實(shí)現(xiàn)開關(guān)燈操作,當(dāng)繼電器吸合時(shí),接通電源,開燈。
Android 端采用了當(dāng)前流行的MVC框架,MVC是模型(Model)、視圖(View)、控制器(Controller)的縮寫,具有耦合性低,部署快,維護(hù)性高,便于管理等優(yōu)點(diǎn),因此本項(xiàng)目中的APP設(shè)計(jì)借助MVC框架與Android-async-http框架[4-5]實(shí)現(xiàn)。Android-async-http框架能在匿名回調(diào)中處理請(qǐng)求結(jié)果,在UI線程外進(jìn)行HTTP請(qǐng)求,支持解析成JSON格式,并可將Cookies持久化到SharedPreferences。本APP即采用Android-async-http框架進(jìn)行用戶登錄并訪問服務(wù)端,返回JSON格式的數(shù)據(jù)。并采用SharedPreferences保存用戶的身份標(biāo)識(shí)Cookies到本地?cái)?shù)據(jù)庫(kù)文件,方便用戶下次打開應(yīng)用時(shí)快速驗(yàn)證身份自動(dòng)登錄,大大提高了系統(tǒng)的安全性和可用性。
APP采用Android Studio3.0的模板布局Coordinator Layout,定義在APP_bar_main.xml文件中。該布局可自定義主界面布局content_main.xml、標(biāo)題欄布局,同時(shí)支持側(cè)滑屏,在側(cè)滑屏可布置用戶狀態(tài)nav_header_main.xml和功能控件(監(jiān)控、溫濕度、燈、窗簾)。這些功能分別有各自的交互界面,并在主活動(dòng)MainActivity中設(shè)置側(cè)滑欄選項(xiàng)onNavigationItemSelected(MenuItem item)來監(jiān)聽功能控件,當(dāng)檢測(cè)到點(diǎn)擊事件時(shí)會(huì)觸發(fā)對(duì)應(yīng)的功能活動(dòng),并進(jìn)入該功能的交互界面。監(jiān)聽代碼如下:
public boolean onNavigationItemSelected(MenuItem item){//監(jiān)聽導(dǎo)航欄菜單
// Handle navigation view item clicks here. int id = item.getItemId
();
Log.e("test",id + "");
if(id == R.id.nav_jiankong){Intent Intent_shipin = new Intent(Intent.ACTION_VIEW);
Intent_shipin.setData(Uri.parse("http://192.168.1.108:8080/stream_simple.html"));startActivity(Intent_shipin);
} else if(id == R.id.nav_wenshidu){
Intent Intent_wenshidu = new Intent(this,wenshiduActivity.class);
startActivity(Intent_wenshidu);
} else if(id == R.id.nav_deng){Intent Intent_deng = new Intent(this,Deng.class);
startActivity(Intent_deng);
} else if(id == R.id.nav_chuanglian){
Intent Intent_chuanglian = new Intent(this,ChuangLianActivity.class);
startActivity(Intent_chuanglian);}
UI布局如圖3所示。
圖3 UI布局
首次登錄獲取的Cookies通過SharedPreferences保存在本地。再次登錄直接檢測(cè)本地Cookies是否有效,有效則直接登錄,無效則重新登錄。代碼如下:
if(response == HttpURLConnection.HTTP_OK){String
cookie=httpURLConnection.getHeaderField("Set-Cookie");
if(cookie == null){
Log.d("thread"," cookie = null ");
Message message = new Message();
message.what = LOGIN_FAIL;
handler.sendMessage(message);
} else {
SharedPreferences preferences;
preferences = getSharedPreferences("main",MODE_
PRIVATE);
SharedPreferences.Editor editor;
editor = preferences.edit();
editor.putString("cookie",cookie);
editor.putString("username",username);
editor.commit();}
溫濕度檢測(cè)、燈控制和窗簾控制同樣采取上述方式開設(shè)線程,通過HTTP協(xié)議訪問服務(wù)器并獲取或上傳相關(guān)數(shù)據(jù)及命令,其中溫濕度檢測(cè)還實(shí)現(xiàn)了數(shù)據(jù)的繪圖。APP效果圖如圖4所示。
圖4 APP效果圖
視頻監(jiān)控采用Intent方式,調(diào)用其他應(yīng)用的瀏覽器訪問,避免重新開發(fā)實(shí)現(xiàn)瀏覽器功能的應(yīng)用模塊,視頻傳輸畫面如圖5所示。
實(shí)現(xiàn)代碼如下:
Intent Intent_shipin=new Intent(Intent.ACTION_VIEW);
Intent_shipin.setData(Uri.parse("http ://192.168.1.108 :8080/
stream_simple.html"));
startActivity(Intent_shipin);
本文研究了基于移動(dòng)互聯(lián)網(wǎng)的智能家居控制技術(shù),借助阿里云遠(yuǎn)程服務(wù)器和ZigBee實(shí)現(xiàn)了遠(yuǎn)程監(jiān)控系統(tǒng)。分別實(shí)現(xiàn)了家中溫濕度數(shù)據(jù)的實(shí)時(shí)采集和視頻實(shí)時(shí)遠(yuǎn)程監(jiān)控,同時(shí)通過手機(jī)APP也可對(duì)家中的電燈、窗簾等進(jìn)行遠(yuǎn)程操作。同時(shí),系統(tǒng)對(duì)傳輸?shù)臄?shù)據(jù)具有差錯(cuò)檢測(cè)功能,運(yùn)行穩(wěn)定,測(cè)試效果良好,應(yīng)用前景廣闊。
圖5 視頻傳輸畫面