譚英奇,邢志強
(北方工業(yè)大學 電子信息工程學院,北京 100144)
隨著物聯(lián)網和科學技術的快速發(fā)展,人們對于生活質量的要求也與日俱增,智能家居是物聯(lián)網高速發(fā)展的直觀體現(xiàn)。人們已經不再滿足于家居用品的分立化、單一化,而是更加關注居住環(huán)境中設備的智能化、高效化、節(jié)能化,舒適性與安全性[1]。物聯(lián)網帶動了智能家庭網絡化、信息化、數(shù)字化發(fā)展。越來越多的智能化家居用品走進人們的生活。但是,現(xiàn)有的很多智能產品,往往是在出廠前就已經設計好了工作模式,用戶不能根據(jù)自己的個人需求進行改變,通用性較低,無法滿足廣大用戶的需求。
因此,本文提出了智能家居功能可重構系統(tǒng)設計方案,利用圖形化編程的可重構特點,結合人體舒適度理論[2],讓用戶自己打造個性化的智能家居工作方式,彌補了現(xiàn)有的智能家居任務單一的缺點。
本系統(tǒng)使用Microsoft Visual Studio為開發(fā)工具,涵蓋了MySQL數(shù)據(jù)庫和編譯環(huán)境。系統(tǒng)操作簡單,人機交互界面簡潔易懂。
整套系統(tǒng)主要分為客戶端智能家居圖形化編程系統(tǒng)和服務器處理系統(tǒng)兩個部分。智能家居圖形化編程系統(tǒng)的主要功能是從模塊庫拖拽圖形模塊并按邏輯連接,在屬性框中輸入屬性參數(shù),從而生成類C語言文件,在服務器允許連接的狀態(tài)下與服務器進行WiFi通信,并上傳類C語言文件。其中每個圖形模塊都代表了一個功能模塊,不同的功能模塊對應不同的功能函數(shù)。服務器負責接收客戶端上傳的文件,并對其進行保存和編譯,編譯后保存到本地,等待硬件控制盒下載。系統(tǒng)整體框架如圖1所示。

圖1 系統(tǒng)整體框架Fig.1 Overall framework of the system

圖2 智能家居圖形化編程系統(tǒng)界面Fig.2 Intelligent home graphical programming system interface

圖3 窗簾開關舉例Fig.3 Curtain switch examples
智能家居圖形化編程軟件在含有Windows系統(tǒng)的平板電腦上運行,主要功能是通過拖拽圖標,并按邏輯連接,實現(xiàn)一鍵生成代碼,最后通過WiFi向服務器傳遞文件。
智能家居圖形化編程系統(tǒng)界面如圖2所示,主要包括菜單欄、模塊庫、流程圖繪制區(qū)、代碼顯示窗口和通信窗口。界面分為3個部分,最左側是模塊庫,包含流程控制模塊、執(zhí)行模塊、傳感器模塊、智能家居模塊4大類,每一個圖標都代表了一個相應的函數(shù);中央為流程圖繪制區(qū),從模塊庫選擇圖標,拖拽到中間的流程圖繪制區(qū),并按邏輯彼此相連,雙擊圖標,可以彈出屬性框,通過輸入或選擇兩種方式進行參數(shù)設置,最右側為菜單欄,從上到下依次為退出、新建、打開、保存、另存、刪除、對齊、生成代碼、通信、模塊和更新;退出、新建、打開和保存是針對流程圖文件的操作;刪除和對齊是針對流程圖繪制區(qū)的圖標進行的操作;點擊生成代碼,會在流程圖繪制區(qū)中央彈出代碼窗口,將流程圖語言轉化為類C語言并顯示;點擊通信會彈出通信窗口,如圖3所示,顯示與服務器連接狀態(tài)和文件傳輸狀態(tài)。
針對智能家居,專門設計了智能家居模塊。智能家居模塊可用于調控智能家居產品,如窗簾開關、門窗開關、背景墻燈光開關等。本文為每個智能家居模塊寫一個專門的函數(shù),將函數(shù)屬性封裝在每個智能家居模塊中,用xml文件保存[3],如圖3所示,以窗簾開關為例,窗簾開關屬于模塊庫的“SmartHomeItem”(智能家居模塊)組,名稱是“窗簾開關”,當鼠標懸停在圖標上時顯示的說明為“void Set_Curtain_Switch(int ID, int val); 設置窗簾開關”,顯示圖標為“CurSwitch.png”,對應的函數(shù)代碼為“Set_Curtain_Switch(%Att0%, %Att1%);”,這表示窗簾開關有兩個參數(shù),初始的屬性為“1,無”,分別代表了窗簾開關的端口號為“1”和初始狀態(tài)“無”,狀態(tài)分為3種:暫停、開、關,在代碼顯示窗口分別由0、1、2表示。用戶可以雙擊窗簾開關圖標進行端口號和3種狀態(tài)的選擇。

圖4 無線通信界面Fig.4 Wireless communication interface

圖5 服務器界面Fig.5 Server interface
在繪制流程圖完畢之后,按照代碼自動生成機制,生成類C代碼之后,通過WIFI方式上傳給服務器端。
如圖4所示,在上傳界面ServerIP和ServerPort兩處分別填寫服務器端的IP地址和端口號,以便確定服務器。在targetIP處填入文件要保存的文件夾名稱,這里是以硬件控制盒的IP命名。在服務器允許連接的狀態(tài)下點擊連接按鈕,智能家居軟件與服務器建立連接,右側小窗口顯示“------連接成功------”。連接建立成功后,點擊上傳按鈕,生成的類C文件會上傳至服務器,并保存在命名為“192.168.2.100”文件夾中,方便之后編譯及下載;若沒有以“192.168.2.100”命名的文件夾,則新建一個。上傳完成后,右側窗口顯示控制盒IP,文件的最后一次修改時間和文件大小,并提示文件發(fā)送成功。

圖6 下載過程界面Fig.6 Download process interface
智能家居服務端界面如圖5所示,包括一個狀態(tài)顯示窗口和一個下載進度顯示窗口。狀態(tài)顯示窗口左上角顯示本服務器的IP地址和端口號,方便智能家居圖形化編程系統(tǒng)進行連接。點擊開始監(jiān)聽按鈕,服務器即在允許連接狀態(tài)。開始監(jiān)聽按鈕的下方是ListOnLine窗口,負責顯示正處在連接狀態(tài)的所有客戶端名稱。右側是線程顯示,顯示已經連接上的客戶端,客戶端的下載狀態(tài),以及完成下載并切斷連接的客戶端。
服務器接收到智能家居圖形化編程軟件上傳上來的類C文件后,需要對其進行編譯,轉化為硬件控制盒可以識別的二進制文件。在接收到sub.c(類C文件)文件后,服務器將其保存到192.168.2.100文件夾中。然后,復制bin/Debug/Robot文件夾下的文件,到192.168.2.100文件夾中。最后執(zhí)行編譯命令,生成硬件控制盒可識別的Robot.hex文件,并等待硬件控制盒下載。
當從智能家居系統(tǒng)上傳到服務器的文件編譯完成后,可以下載到硬件控制盒。在下載過程中運用分塊下載法,按照文件大小,將文件分割成數(shù)量不等的數(shù)據(jù)包,依次下載到硬件控制盒中。下載過程如圖6所示。
在下載的過程中以“ACK”為標識,代表該數(shù)據(jù)包下載成功;以“NAK”為標識,代表該數(shù)據(jù)包下載失敗。同時,可以看到目前正在下載的數(shù)據(jù)包進程。
在系統(tǒng)工作期間,會有多個客戶端同時連接服務器的情況。為此,選擇的是基于TCP/IP的socket通信方式。在監(jiān)聽線程開啟的條件下等待客戶端連接。每當有客戶端連接上,便單獨開一個線程,為其提供上傳或下載等工作。當上傳或下載結束,即關閉此線程;當多個客戶端連接服務器時,每個客戶端都有自己的線程,彼此互不干擾,以此實現(xiàn)多任務工作。
本文開發(fā)的智能家居功能可重構系統(tǒng)研究,將圖形化編程、智能家居以及人體舒適度相結合。解決了現(xiàn)存的智能家居工作模式單一化,無法更改的問題,用戶可以自由組合智能家居,為智能家居添加了個性化,并且系統(tǒng)界面簡潔,操作簡單,應用穩(wěn)定。