禹謝華,鄧林茂,張曉云,陳美龍,匡鳳飛
1.福建師范大學 閩南科技學院,福建 泉州 362332
2.廈門大學 信息科學與技術學院,福建 廈門 361005
3.冠捷顯示科技(廈門)有限公司,福建 廈門 361101
基于Android與Arduino智能家居控制系統的設計與實現
禹謝華1,2,鄧林茂2,3,張曉云1,陳美龍1,匡鳳飛1
1.福建師范大學 閩南科技學院,福建 泉州 362332
2.廈門大學 信息科學與技術學院,福建 廈門 361005
3.冠捷顯示科技(廈門)有限公司,福建 廈門 361101
作為時下最炙手可熱的移動應用端操作系統,Android以其顯著的開放性、便于開發的靈活性、能夠與Google應用的無縫對接性及豐富的第三方軟硬件資源等成為智能應用系統不可或缺的組成部分;Arduino單片機系統以其開源的電子原型平臺、靈活便捷的設計和豐富的傳感器資源等被廣泛應用。其與Java和C語言相類似的基于Wiring/Processing的語言開發環境更是受到越來越多的電子愛好者和開發者的青睞。本文以移動手機安卓系統為無線控制終端,結合Arduino單片機系統,設計并實驗仿真了一款基于Android與Arduino的智能家居控制系統,以控制LED燈示例,通過網絡http傳輸控制指令到Arduino單片機系統,Arduino根據所接收到的指令,控制不同的家居電器完成所要求的工作任務。仿真實驗表明,文章所設計方法行之有效,可以靈活的運用到日常家居電器設備,提供了一種智能家居系統設計的新思路,具有易實現,應用廣的特點。
Android;Arduino;智能家居;控制系統
智能家居控制系統是針對不同的用戶需求,利用計算機和網絡通訊技術,將與家居生活有關的諸如安保安防、燈光控制、家電控制等功能有機地結合在一起,通過網絡化、智能化控制和管理,實現方便、自動、快捷的日常事務的一種全新家居生活體驗。其核心部分便在于如何將用戶需求轉換成計算機語言,計算機語言又如何通過某種網絡通訊方式傳輸到移動控制端,控制端再根據所接收到的計算機語言,轉換成相應的信號控制指令。
手機是人們最常用的移動電子設備,使用手機成為家居系統的控制終端就順理成章的成為了最理想的控制方式。通過對已有的家居控制方案的研究分析后發現,大部分的研究中用戶都是需要依賴自己專用的控制端進行操作。本文所設計系統的主要優勢便在于結合時下最熱門的代表創客精神的Arduino系統,配合占有率最高的Android手機操作系統,用戶只需輕點幾個按鈕,安裝一個APP,就可以用安卓手機方便、自如的實現家居控制,操作簡單,易用性強。在整個設計中,手機與接收命令的單片機控制端可以采用不同的方式進行通信,例如有線網絡、WIFI、藍牙或紅外等,各種方式各有利弊,但考慮到部分情況下需要相對較遠距離對家居設備的控制,文章采用的方式是:通過手機訪問網頁客戶端,將用戶的指令通過網頁消息的方式Post到服務器Server端,單片機系統根據服務器端接收到的命令,轉換成對應的控制流程,從而實現家居智能控制。
需要設計一個Android手機端家居控制APP,用來訪問網頁客戶端,服務器端通過Arduino開發板系統來實現,Arduino開發板系統采用的單片機型號是AVRATmega328,搭配W5100網絡擴展板,可以實現聯網功能。家居控制方面,以控制RGB LED燈為例。單片機通過獲取Server端的信息,得知用戶需要控制燈顯示何種顏色、開燈及關燈等信息,將這些信息轉換成0~255,通過控制單片機PWM輸出從而讓LED燈顯示不同的顏色(圖1)。
Arduino開發板系統是整個家居控制系統的核心,它的處理器是一個具有32 KB的系統內可編程的八位AVR微控制器ATmega328,同時具有十四路的數字in/out口(其中六路可作為PWM的輸出),六路作為模擬輸入,一個ICSP header,一個電源插座,一個USB口,一個復位按鈕和一個16 MHz的晶體振蕩器。引腳圖如圖2所示。

圖1 系統總體框架圖Fig.1 The overall framework of the system

圖2 ATmega328引腳圖Fig.2 Pins of ATmega328
Arduino的聯網功能主要是通過W5100網絡擴展板來實現的。W5100是Wiznet公司開發的具有TCP/IP協議硬解碼的網絡芯片,它集成了以太網物理層內核[1]。W5100的使用僅需對其進行簡單的端口(Socket)編程即可,不會局限于Ethernet的控制,能夠在很大程度上降低網絡編程及工作人員在硬件接口設計方面的工作量,且能夠維持遠程數據的可靠穩定通訊[2]。單片機與W5100之間的相互連接一般有三種不同的形式,分別是SPI總線連接方式、間接總線鏈接方式和直接總線連接方式。其中,SPI模式的接口連接線路不多,通常用于傳輸速率相對較低且數據通訊量不大的情形;直接總線接口模式則在數據量傳輸較大的情況是較為適用;而間接總線接口模式下的數據傳輸性能則前述的兩者之間[3]。本文設計中所采用的是SPI總線連接模式,在這種模式下,僅需四個引腳進行數據間的通信聯絡,這四個引腳的定義分別為:SCLK,/SS,MOSI,MISO,對應Arduino上的引腳則分別是16、17、18、19。SPI方式的連接框圖如圖3所示:

圖3 W5100與ATmega328連接示意圖Fig.3 The schematic connection between W5100 and ATmega328
本項目的家居設備使用的是Chainable RGB LED可級聯全彩LED,將VCC/GND/CI/DI四個pin腳分別連接至Arduino的VCC/GND/pin7/pin8即可,控制LED顏色亮暗均由ATmega328的pin7和pin8來完成。
3.1 Arduino程序設計
Arduino程序的程序大體可分為如下的三大部分:
(1)聲明變量及各類接口的名稱。
(2)setup()。首先調用setup()函數運行Arduino程序,在這一過程中需要完成串口的配置、變量的初始化、類庫文件的引入及輸入或輸出針腳類型的設置等操作[4]。需要注意的是,setup()函數僅在每次的Arduino上電或重啟的過程中被執行一次。
(3)loop()。該函數不斷反復循環執行,根據反饋信息的不同,適時動態調控Arduino主控板的操作。
本文所設計家居控制系統的Arduino程序主要可分為如下的三個功能模塊:
(1)設置W5100,使Arduino轉換為WEB服務器,并通過html語言創建網頁需要顯示的內容。首先需要在申明變量的地方設置mac地址、IP地址和初始化Server端口(HTTP默認是80端口),如下所示:


圖4 獲取Client端數據流程圖Fig.4 Get the Client side data flowchart Get the Client side data flow chart
完成以上步驟后,Server就配置成功了。接下來在loop()里面不斷監聽Client端是否連接,并且設置Client需要顯示的內容,具體流程圖如圖4所示。
這里需要注意的是,在獲取鼠標點擊的顏色值時,當網頁表單采用POST方式傳送到服務端,不同的瀏覽器工具,鼠標點擊的顏色值對應POST參數中的字符位置不一樣,本文使用的是安卓平臺,對應的位置是第4至第9的字符,而像IE這類瀏覽器對應的位置是第7到第12的字符,如果沒獲取正確,顏色控制就會得不到匹配。
(2)接收Web Client端發送過來的數據并對數據進行處理,通過計算得到RGB的PWM值。計算過程是將獲取到的鼠標點擊的十六進制顏色值轉換成ASCII碼值,碼值減去87或46后可得到實際數值。


(3)根據處理后的數據控制RGB LED燈的顏色。RGB的PWM值目前已經算出,如果是用戶點擊“turn on”或是“turn of”,RGB的PWM值分別設置為(255,255,255)和(0,0,0)。具體過程如下所示:
先導入ChainableLED的庫文件,在變量聲明的地方去設置Arduino pin7和pin8為輸出:
ChainableLED leds(7,8,1);
接著,在setup()去初始化LED硬件:
leds.init();
最后,調用PWM設置函數去控制LED燈的顏色。
leds.setColorRGB(0,red_color,green_color,blue_color);
通過Arduino控制其他外圍家居設備時,與以上的這三個步驟都是類似的。
3.2 Android APP模塊設計
Android APP的主要目的是能訪問服務器端的web網頁,然后通過HTTP命令把用戶的操作發送到服務器端。那么,APP的基本功能是能訪問網頁,通過Android Web View可以輕松的實現這個功能[5]。Web View(網絡視圖)能加載顯示網頁,可以將其視為一個瀏覽器。Web View視圖和Android Brower應用程序都是基于Web Kit引擎,所以兩者可以賦予Web應用程序相同的性能和功能[6]。
具體實現過程如下所示:
(1)在布局文件activity_main.xml中聲明一個Web View控件,同時聲明一個progress bar用來顯示Web View控件加載進度:

(2)在要Activity中實例化WebView和ProgressBar組件:

(3)調用Web View的loadUrl()方法,設置Web View要顯示的網頁,本文只需要訪問使用Arduino建立的Server IP:

(4)調用set Web View Client控件,設置Web View和progress bar視圖。主要方法有:

(5)重寫Activity類的on Key Down()方法,點擊系統回退鍵,支持返回上一頁:

(6)添加一個exit退出菜單,支持快速退出:


圖5 Android智能家居(燈光)控制終端界面Fig.5Android smart home(LED)control terminal interface Android
(7)在AndroidManifest.xml文件中添加網絡權限,避免出現Web page not available的錯誤提示信息:

重復再寫兩行如上的代碼,分別用ACCESS_WIFI_STATE和ACCESS__STATE替換上面的INTERNET,即可完成網絡權限的添加工作[7]。
(8)在string.xml中,修改app的name為Home Control:l

最后通過Eclipse編譯生成的APK文件安裝到手機,在Arduino有連接到網絡的情況下,打開其界面,如圖5所示。
用戶可以點擊彩色調色板上的顏色,LED顏色的文本框會顯示出顏色的具體值,并以#xxxxxx格式顯示。例如當用戶點擊紅色區域時,文本框就會顯示#ff0000。顏色值通過HTML的表單實現數據交互,POST到Arduino Server端。調色板的六種顏色可以通過previouse/next進行切換,根據用戶需求,只需在代碼中填入多組顏色的table,用戶就可以方便的進行顏色切換,選擇自己想要控制的顏色。Turn on和Turn off分別是控制LED燈的開和關,當點擊Turn on時,LED燈亮起,默認的顏色是白色;當點擊Turn off時,LED燈即全部熄滅。
智能家居系統是基于Arduino和W5100搭建的網絡Server平臺,通過編寫安卓手機客戶端的APK來發送命令到Arduino的MCU(ATmega328),Arduino根據接收到的命令最終靈活的完成控制家居設備(RGB LED)執行相應任務的工作,而且這種方式在絕大多數智能家居系統的通信方式的設計中都能夠適用。同時也方便用戶不在家的時候,可以通過互聯網的方式進行遠程控制。實驗在內網的環境中測試成功,不足的是在外網的環境下進行超遠程控制這部分受到環境的影響因素還需要進行不斷完善[8]。另外,智能家居電器功能的實現主要是通過使用LED燈的開關及不同顏色的切換來驗證,完成了諸如不同家居電器電器設備的開關、同一電器設備不同功能的開啟和關閉等絕大多數功能的移動手機控制,但其他較為復雜的功能實現,還將在以后的研究過程中進一步的探討實踐。
[1]WIZnet Co.,Ltd.W5100 data sheet:version 1.2.4[Z].2011
[2]Dave Smith,Jeff Friesen.Android5.0開發范例代碼大全[M].北京:清華大學出版社,2015
[3]晏 勇,周相兵.智能家居自適應網絡設計與實現[J].西南大學學報:自然科學版,2014,36(11):215-220
[4]陸 揚,付 斌,游 江.W5100在單片機實現以太網通信中的應用[J].黑龍江科技信息,2011(5):76-76,15
[5]張楊楊.移動互聯網環境下定位服務設計及原型實現[D].西安:長安大學,2014
[6]肖遠東.智能家居用電管控系統的設計與實現[J].南京工程學院學報:自然科學版,2014,12(3):59-63
[7]仲元昌,王靖欣,胡江坤,等.Android內核移植及在遠程監控中的應用[J].重慶理工大學學報:自然科學版,2011,25(1):102-106
[8]崔 鄧,沈敬偉,周廷剛.一種面向移動智能手機用戶軌跡停留點提取的時空聚類算法研究[J].西南師范大學學報:自然科學版,2016,41(10):81-87
Design and Implementation of Intelligent Home Control System Based onAndroid andArduino
YUXie-hua1,2,DENGLin-mao2,3,ZHANGXiao-yun1,CHENMei-long1,KUANGFeng-fei1
1.Minnan Science and Technology Institute/FuJian Normal University,Quanzhou362332,China
2.School of Information Science and Engineering/Xiamen University,Xiamen361005,China
3.TPV Display Technology(Xiamen)Co.,Ltd.Xiamen361101,China
As one of the most sought-after mobile application terminal operating system,Android has become an indispensable part of the intelligent application system,because it has the features of definite openness,flexibility for development,perfect connection with Google applications and abundant third party software and hardware resources and so on.Arduino MCU system is widely used in society because of its characteristics of open source electronic prototype platform,flexible and convenient design,rich sensor resources,etc.Moreover,its classes Java and C language based on Wiring/Processing development environment are becoming more and more popular among the electronics enthusiasts and developers.Taking the mobile phone Android system as wireless control terminal,and combining Arduino MCU system,an intelligent home control system based on Android and Arduino is designed and implemented in this paper.By controlling LED lamp samples,with the network HTTP transmission control instructions sending to the Arduino MCU system,and according to the
instructions,Arduino can control different household electrical appliances to complete the required tasks.Experiments show that the methods designed in this paper can be flexibly applied to daily household appliances,such as,home appliance control,security equipment,etc.This paper provides a new idea for the design of intelligent home system,which is easy to implement and widely used.
Android;Arduino;intelligent home;control system
U666.12+4
A
1000-2324(2017)04-0532-05
2016-02-03
2016-02-20
2015年度“福建省高校杰出青年科研人才培育計劃”項目(閩教科[2015]54號);2015年福建省高等學校創新創業教育改革項目(SJKC-2015-02);2016年本科高校重大教育教學改革研究項目:基于區域經濟發展的應用型軟件人才培養模式研究(JZ160253);2016年省級互聯網實驗教學示范中心項目(SFZX-2016-01);2016年福建省高等學校服務產業特色專業建設項目(SJZY-2016-02)
禹謝華(1982-),男,碩士,副教授,思科認證網絡工程師.主要研究方向:移動互聯網,人工智能,單片機技術,無線傳感器網絡.E-mail:yuxiehua@163.com