王 統, 秦會斌,2, 胡永才
(杭州電子科技大學 電子信息學院, 浙江 杭州 310018)
隨著生活質量的提高,家居智能化已經成為當今時代的一種主流。 如何更好的設計智能家居的整體性,控制就顯得越來越重要。 隨著嵌入式技術的日趨成熟和硬件的集成度越來越高,其在智能家居控制領域應用越來越廣泛。 針對智能家居的特點和應用背景, 選擇以S3C2440 Arm9 作為微處理器,搭建智能家居控制臺。 由于Linux 是開源的,可移植的并且可以運行在多種硬件平臺上的特點, 將Linux 作為控制臺的操作系統。 用專門針對嵌入式的圖形界面化開發工具Qt/Embedded,開發設計出智能控制操作界面。 最后將這三者結合起來,設計和實現了ARM9 在智能家居上的多功能應用和智能家居的一體化控制。
Qt 是一款非常出色的圖形化界面開發工具。 最早是由Trolltech(奇趣科技)公司開發出來的,是用于創建Linux 下的圖形軟件中最出色的的軟件包之一。 Qt 不僅適用于UNIX/Linux,而且還可以用于Windows[1]。Qt 是一個用于桌面系統和嵌入式開發的跨平臺應用程序框架。 它包括一個直觀的應用接口程序函數(API)和一個豐富的庫類,以及用于GUI 開發和國際化的集成工具,此外最新的Qt5 還支持Java 和C++開發。 Qt 讓開發者無須編寫源代碼,便可以構建運行在不同桌面系統和嵌入式設備上的軟件應用應用程序,從而提高了開發效率。 Qt/E(Qt/Embedded)是專門用于嵌入式系統上的Qt嵌入式版本。 它繼承了Qt 支持跨平臺開發的優點,廣泛應用于嵌入式軟件應用領域。 它通過QtAPI 與Linux I/O 以及Framebuffer 直接交互,擁有較高的運行效率,而且整體采用面向對象編程,擁有良好地體系架構和編程模式。 Qt/Embedded的優勢:
1)優良的跨平臺特性;
2)模塊化程度高,可重用性較好;
3)豐富的API;
4)支持2D/3D 圖形渲染,支持OpenGL。

圖1 系統的總體構架圖Fig. 1 Structure diagram of the smart home control system
隨著近些年來嵌入式在智能控制領域的應用越來越廣泛。 于是選擇的系統是在嵌入式平臺下,其結構設計框圖如圖1 所示。 主要包括以下幾部分。 Qt 圖形化界面開發環境平臺,Linux 操作系統,Arm9 微處理器等。 將S3C2440 Arm9 作為微處理器的mini2440 開發板與嵌入式Linux 操作系統相結合,通過對U-boot 系統的移植,作為Linux 系統的引導系統。 然后通過對Linux 內核的定制、裁剪,將Linux 操作系統移植到mini2440 開發板中。這樣就初步搭建好了智能家居的控制平臺。 然后,將編譯好的Qt 圖形界面程序移植到智能家居控制平臺上,并實現觸摸屏的點觸功能。 最后,通過點擊觸摸屏上的按鈕,用串口通信的方式,來控制燈光,窗簾和空調等常用家居設備。 Qt 在PC 和arm 平臺上的搭建如下:
首先,對Tslib 進行編譯。Tslib 是Linux 觸摸屏驅動與Qt之間的一層庫,是用于支持event 事件,在Qt 中也配有Linux input 選項支持觸摸屏,不過由于事件結構與Linux 驅動傳遞的input event 不匹配,因而不能使用。 所以要對Tslib 進行配置和修改。
然后,在Fedora14 中安裝Qt4.7.4 版本。 Fedora14 是一個Linux 發行版本,是一款開源的并且快速、穩定、強大的操作系統,在Fedora4 中在分別安裝了支持X86 平臺下的Qt4.7.4版本和支持嵌入式版本的Qt/Embedded4.7.4 版本。 這樣通過交叉編譯就可以在PC 平臺和Arm 平臺下都可以運行自己所編寫的Qt 程序。
最后,在Fedora14 中安裝Qt-Creator。 Qt-Creator 是跨平臺的Qt 輕量級集成開發環境 (IDE), 此IDE 能夠跨平臺運行,并且使用強大的C++ 代碼編輯器可快速編寫代碼從而使開發人員能夠利用Qt 這個應用程序框架更加快速及輕易的完成開發任務。
通過以上3 步,如圖2 所示,初步完成了Qt 在PC 平臺上的搭建,并且可以支持程序在Arm 開發板上運行。

圖2 Qt 開發環境的搭建Fig. 2 Build a development environment of Qt
信號和槽機制是Qt 通信的核心機制,也是Qt 編程中的難點。 信號和槽用于兩個對象之間的通信,信號和槽機制是Qt 的核心特征,也是Qt 不同于其他開發框架的最突出特征。當某個信號對其客戶或所有者發生的內部狀態發生改變,信號被一個對象發射。 只有定義過這個信號的類及其派生類能夠發射這個信號。 當一個信號被發射時,與其相關聯的槽將被立刻執行,就象一個正常的函數調用一樣。 信號和槽機制完全獨立于任何GUI 事件循環。只有當所有的槽返回以后發射函數(emit)才返回。如果存在多個槽與某個信號相關聯,那么,當這個信號被發射時,這些槽將會一個接一個地執行,但是它們執行的順序將會是隨機的、不確定的,我們不能人為地指定哪個先執行、哪個后執行。 槽是普通的C++成員函數,可以被正常調用,它們唯一的特殊性就是很多信號可以與其相關聯。當與其關聯的信號被發射時,這個槽就會被調用。槽可以有參數,但槽的參數不能有缺省值。 既然槽是普通的成員函數,因此與其它的函數一樣,它們也有存取權限。 槽的存取權限決定了誰能夠與其相關聯。 同普通的C++成員函數一樣, 槽函數也分為三種類型, 即public slots、private slots 和protected slots。 通過調用QObject 對象的connect 函數來將某個對象的信號與另外一個對象的槽函數相關聯,這樣當發射者發射信號時,接收者的槽函數將被調用。
事件是對各種應用程序需要知道的由應用程序內部或外部產生的事情或者動作的通稱。 在Qt 中使用一個對象來表示一個事件,繼承自QEvent 類。 需要說明的是,事件與信號并不相同,比如單擊一下界面上的按鈕,那么就會產生鼠標事件QMouseEvent(不是按鈕產生的),而一旦按鈕被按下了,它會發出clicked()單擊信號(是按鈕產生的)。 這里一般只關心按鈕的單擊信號,而不用考慮鼠標事件,如果要設計一個按鈕,或者當點擊按鈕時讓它產生別的效果,那么就要關心鼠標事件了。 可以看到事件與信號是兩個不同層面的東西。發出者不同。作用也不同。在Qt 中,任何QObject 子類實例都可以接收和處理事件。 一個事件由一個特定的QEvent子類來表示,但是有時一個事件又包含多個事件類型,這些事件類型都由QEvent 類的枚舉型QEvent::Type 來表示,其中包含了一百多種事件類型, 可以在QEvent 類的幫助文檔中查看。
程序的開始是先進入登錄界面, 選擇的是QWidget 類,QWidget 類作為所有用戶界面對象的基類。 在輸入用戶名和密碼之后,檢查密碼和用戶是否正確,正確則會進入主控制界面。 主控制界面選擇的是QDialog 類,QDialog 是所有Qt 對話框窗口的基類,它繼承自QWidget,可以實現不同界面的切換和返回上一層界面。 在主控制界面中,可以直接發送命令給Arm 控制臺,進行燈光的控制,如果成功,則會返回ok,表示燈成功打開;否則會返回fail,表示沒有成功打開。 燈光,家電,環境,安全是4 個子界面,也是用QDialog 作為基類編寫的。 點擊燈光,進入燈光控制界面,通過對開燈按鈕的點擊,控制燈的開和管。 還可以拖動滾動條,以對燈光進行亮暗的控制。 點擊環境,則會進入在環境參數控制界面中,界面會顯示出室內的溫度,對室內的溫度進行監控。 并可以對窗簾簡單地進行控制,拉開和關閉。 這些點擊和拖動操作都是用信號和槽機制實現的, 將數據通過串口傳遞給Arm 控制臺,然后通過串口進行控制。 控制臺執行完之后,不管成功或失敗,都會反饋回數據,表示操作成功或操作失敗。 如圖3 所示,是程序的部分截圖。 該界面可在觸摸屏上正確地運行。
在PC 中編寫好的Qt 程序并不能直接用到arm 控制平臺上。 我們要用專門針對嵌入式開發的Qt/Embedded 來編譯。 在Fedora14 終端里面分別輸入以下幾行指令:
#make clean(清除之前編譯的可執行文件及配置文件)?
# qmake╞project(產生后綴為.pro 的工程文件)
#qmake (產生Makefile 文件)
#make (執行Makefile 以生成可執行程序)

圖3 QT 控制界面Fig. 3 QT control interface

圖4 QT 界面測試Fig. 4 QT interface tests
最后將可執行程序燒寫到arm 控制平臺中,這樣我們的程序就可以正常的在控制平臺里面運行了。
對燈光控制進行測試,給arm 控制平臺上電。 經過觸摸屏矯正測試程序之后,程序執行事先已移植好的qt 可執行程序。 進入燈光控制界面后,用觸摸筆點擊打開按鈕,燈亮并且亮度較低,如圖4(a)所示。用觸摸筆來滑動界面中滾動條,可以使燈光的亮暗發生變化,如圖4(b)所示。 點擊自動調光按鈕,燈光可以調到默認的亮度,如圖4(c)所示。 點擊關閉按鈕,燈滅。 經過測試后,程序可以正確地執行,并且對燈光進行亮暗的控制。
文中利用Qt 提供的API,以及高效的編程語言C++。 初步實現了簡易的智能家居系統平臺搭建。 并且依據我國居民的居住特點,初步完成了對燈光、窗簾等常用家居的簡單操作。 對于如冰箱、電視等家電的控制還在進一步的學習和研究中。 隨著網絡的普及和網速的提升,如果能夠利用網絡覆蓋面廣,應用率高,速度快的特點來進行控制,那么將會使智能家居更加的快捷和方便,也會使其更加的智能化。
[1] 周謀. 基于Qt的智能家居系統信息通信模塊設計與實現[D]. 成都: 西南交通大學,2012.
[2] 嚴賢. 基于Qt的串口通信應用研究與實現[D]. 上海: 東華大學,2012.
[3] 高康. 智能家居控制系統的研究與設計[D]. 青島: 青島大學,2013.
[4] 王麗麗. 基于嵌入式Linux智能家居監控系統的設計[D].哈爾濱: 哈爾濱理工大學,2012.
[5] 劉治國. 基于Linux和Qt的智能家居系統的設計與實現[D].青島: 山東科技大學,2012.
[6] 于幫偉. 基于Qt/Embedded的嵌入式數字監控系統控制界面的實現[D]. 廣州: 華南理工大學,2011.
[7] 張鈞. 基于QT的智能養老住宅遠程監控系統研究[D]. 西安: 西安建筑科技大學,2013.
[8] Erfaneh Allameh,Mohammadali Heidari Jozam,Bauke de Vries,Harry Timmermans,Jakob Beetz,Farhang Mozaffar. The role of smart home in smart real estate[J]. Journal of European Real Estate Research,2012,5(2): 156-170.