基于Android平臺的電熱水器遠程控制系統
0 引言
本文引用地址:http://www.104case.com/article/201609/304012.htm近幾年來,人們的生活品質不斷提高,傳統家電都在向安全、節能、多功能、智能化方向發展,電熱水器的功能也在隨之完善。傳統儲水式電熱水器儲水量大,加熱時間一般都比較長,長期供熱必然造成電能的浪費。為了節約用電,很多人對電熱水器進行了改進,文獻采用數字技術,在電熱水器中加入單片機定時裝置,配以外圍驅動電路和繼電器,控制電熱水器電源通斷的時間。這種裝置雖然達到了節能的目的,但使用起來仍不方便,用戶外出時長未知或臨時改變時無法更改加熱時間。為此,文獻在電熱水器中加入短信收發模塊,利用手機短信向電熱水器的MCU控制器發送指令,實現遠程遙控,此方法雖解決了靈活性問題,但帶來額外的短信費用,不便于長期使用,且無法隨時遠距離獲取水溫信息,因而未得到廣泛應用。
本文為滿足電熱水器控制的靈活性和水溫信息獲取方便性的要求,著眼于已經相當普及的Android手機,把智能手機作為移動網絡終端,將其應用于傳統電熱水器,利用嵌入式開發技術和GPRS遠程通信技術,設計了一套電熱水器遠程控制系統,本系統具有安裝方便、價格低廉、使用靈活、界面友好、實時監控等優點,且由于使用了開放的Android平臺,使得此系統的功能擴展和產品升級十分方便。
1 系統總體方案
電熱水器遠程控制系統采用已經十分成熟的客戶/服務器模式,總體方案如圖1所示,系統從結構上分為三個部分:客戶端、服務器和控制器。

客戶端部署在Android手機上,接收來自用戶的各種控制命令,對獲取的指令加工處理后通過手機自帶的3G網絡將數據發送給服務器,并實時反饋命令執行情況,獲取并顯示水溫信息和電熱水器開關狀態;服務器由GPRS模塊及其控制器構成,利用大覆蓋、高可靠性、低成本的移動互聯網絡,實現與客戶端握手和數據互傳;控制器與服務器端共用一個MCU,將接收到的用戶指令解碼后轉變為開關控制命令,并利用高精度溫度傳感器提取實時水溫數值,再通過服務器下載到用戶手機,通過直觀、友好的人機界面顯示給用戶,并等待用戶的下一步指令,從而實現整個系統的實時監控。
2 Android平臺下的客戶端設計與實現
2.1 功能設計與操作流程
客戶端在Android手機上實現,利用Java語言開發。這樣做的優點是:界面友好、使用方便;開發成本低、不需增加硬件;支持覆蓋廣、不受地域限制;保證數據傳輸的實時性和可靠性。為實現對電熱水器的遠程控制,客戶端應具有以下功能:1)登錄服務器。獲取服務器IP地址,采用Socket方式,建立與服務器的連接。2)獲取用戶開關指令并上傳。通過手機觸摸屏,獲取用戶開關指令,編碼成字符串后上傳給服務器。3)實時提取并顯示水溫。向服務器發送請求,等待服務器向手機發送當前水溫數值字符串,獲取后解碼并在手機屏幕上顯示。客戶端操作流程如圖2所示。

客戶端首先按照保存的IP地址連接服務器,如連接不成功,說明服務器動態IP己更改,則向服務器發送請求連接短信,等待服務器收到后將新IP地址通過字符串形式回發給客戶端,后者再次連接,實現Socket連接的建立;用戶的開關指令編碼后由客戶端手機通過GPRS發送字符到服務器接收,“0”表示關閉熱水器,“1”表示加熱;指令發送后等待服務器回發的水溫值字符串,解碼后在手機屏幕上顯示;用戶可以通過手機設定水溫,服務器回發的水溫若達到設定值則停止加熱并發出聲音通知用戶。
2.2 Android Studio開發平臺搭建
本系統的客戶端的編程采用Android Studio IDE開發環境,它是Google于2013年發布的,與以往的Eclipse+ADT開發環境相比,Android Studio提供了集成的Android開發工具用于開發和調試,安裝時不需手動配置。該開發環境對UI界面設計和編寫代碼有更好地支持,具備功能強大的布局編輯器,支持拖拉UI控件并進行效果預覽,并可以方便地調整設備上的多種分辨率。
該開發平臺的搭建步驟十分簡單:1)下載并安裝JDK,建立Java開發環境;2)設置環境變量:JAVA HOME、CLASSPATH和PATH,指定到JDK安裝路徑;3)從Google官方網站或第三方網站下載并安裝android-studio-bundle-
2.3 軟件主要模塊及關鍵代碼
(1)界面布局。根據客戶端功能設計,客戶端UI包括TextView、Button、Switch等控件,布局代碼存放在Layout.XML文件中,采用相對布局方式RelativeLayout,該方式是Android中最常用的布局方式之一,在Android Studio中利用鼠標拖動即可實現,不需編寫代碼。本程序所用控件及其功能如表1所示。

(2)Switch監聽器。利用可視化控件Switch來表示接受用戶指令并顯示電熱水器的開關狀態,設置Switch監聽器代碼如下:
mySwitch.setOnCheckedChangeListener(newOnCheckedChangeListener()。
其中mySwitch為新建的Switch類對象。其監聽器實例化方法為:

(3)Socket方式連接服務器。Socket通信則是在雙方建立起連接后就可以直接進行數據的傳輸,在連接時可實現信息的主動推送,而不需要每次由客戶端想服務器發送請求。本程序連接服務器通過響應Button監聽器實現。調用OnclickListener()中的onClick()為登陸Button控件設置按鍵監聽器,在監聽器中建立Intent對象,通過調用startActivity(intent)打開與相應功能菜單相對應的Activity實現界面的跳轉。若鏈接超時,則回出現網絡鏈接超時的提示,后臺發送請求短信,獲取服務器最新動態IP地址,并重新鏈接網絡。建立Socket連接核心代碼如下:
評論