鐘良驥,桂學勤,厲陽春,趙君喆
(湖北科技學院 計算機科學與技術學院,湖北 咸寧 437100)
“智能家居”,利用計算機技術、嵌入式技術、網絡通訊技術和傳感器技術等,將家庭中各種設備(照明系統、環境控制系統、安防系統、智能家電等)有機的連接到一起。智能家居讓用戶方便的控制電器設備,根據場景設定設備的工作模式,使設備采用互通方式進行管理。
目前,國內智能家居產品基于有線或集中通信方式,系統成本高,部署周期長,維護不方便,較難適應當前的發展形式。隨著人們生活水平的提高,對智能家居系統的要求也不斷提高,如何實現家庭設備網絡化無線管理,是智能系統的首要問題。本文基于pcduino開發板,搭建openhab服務器,實現網絡化、簡單、方便的電氣設備控制系統。
中控系統主要包括Cortex A8處理器的 pcduino開發板(家庭網關)、 Zigbee協調器、WiFi模塊、Zigbee節點設備(如門磁開關、燈光繼電器、紅外探測器、煙霧傳感器等),結構如圖1所示。在A8中移植openhab服務器,作為網關,負責設備的管理以及遠程監控。設備通信采用Zigbee無線傳感網絡,因此網關需要保存通信數據,并對Zigbee無線傳感網絡進行數據處理。 網關上的Zigbee協調器,負責Zigbee內部網絡的設備管理與控制。WiFi模塊訪問無線路由器,完成與以太網的連接, 實現內部網絡與Internet的通信。

圖1 系統示意圖
網關硬件有處理器A8模塊,Zigbee模塊,以太網模塊,IDE接口模塊,USB接口模塊,NAND FLASH模塊,I/O模塊,JTAG模塊,串口調試模塊等。其中,Zigbee模塊用來連接內部智能家居網絡;以太網模塊用來連入Internet;IDE 接口模塊用來接IDE硬盤,USB主接口用來接即插即用USB設備,如 U盤、USB攝像頭等,SD卡模塊用來外接SD卡,NAND FLASH模塊為系統提供FLASH存儲空間;USB從接口模塊傳輸速率遠大于串口和JTAG接口,可以用來下載大容量的固件程序或數據;串口模塊用作系統輔助調試;JTAG模塊用來下載小容量的固件程序以及在線調試;I/O模塊用作系統控制臺,提供人機接口。
1.處理器模塊
處理器是嵌入式網關的核心,為達到較高的性能,采用pcduino開發板:內置32位RISC指令集,采用ARM Cortex A8內核,主頻1GHz、內存1GB;擴展接口有2.54mm Headers兼容Arduino;具有以太網RJ45接口,可擴展 USB WiFi;支持Ubuntu或者Android4.0兩種操作系統;內置大量API,包括UART、ADC、PWM、GPIO、I2C等;并支持C, C++with GNU tool chain和Java with standard Android SDK等編程語言。

圖2 網關
2.Zigbee組網模塊
系統采用Zigbee無線通信技術,組建設備的星形網絡。網關內置一個Zigbee模塊,作為網絡協調器,負責各子傳感器節點的通信管理、動態組網與數據傳輸。Zigbee終端節點,主要包括家庭內部網絡中的門磁開關、紅外對射探測器、玻璃破碎探測器、火災探測器以及煙感和燃氣泄露探測器等。方案中,Zigbee采用的芯片是DRF1605H,是一款低成本、低功耗、寬電壓、工作頻率2.4GHz、基于IEEE 802.15.4協議開發,支持Zigbee 2007 Pro 協議棧,可應用在LED 路燈、辦公場所及家庭、工業等無線控制及無線數據傳輸領域。
3.WiFi通信模塊
WiFi模塊負責網關的Internet連接,采用USR-WIFI232-L芯片。該芯片集成了MAC,基頻芯片,射頻收發單元,以及功率放大器;嵌入式的固件支持WiFi協議及配置,以及組網的TCP/IP協議棧。通過該芯片,傳統低速串口設備,均可以方便的接入WiFi無線網絡,從而實現互聯網絡控制與管理;其次,該芯片針對低流量、低頻率的網絡數據傳輸有很大優勢;此外,該芯片集成了所有WiFi的功能,模塊尺寸小,采用表貼封裝,可內嵌在產品的硬件PCB單板電路上,并配備內置天線、外置天線連接器,以及一個板載接口。
網關基于ubuntu操作系統,軟件部署的主要步驟包括:系統裁剪與編譯、java交叉編譯環境配置、openhab服務器的安裝和部署。
1.系統移植
按照傳統的開發方法,需要下載交叉編譯器,設置環境變量等問題。在pcduino上搭建步驟如下:
(1)安裝ubuntu系統;
(2)更新系統:sudo apt-get upgrade # ;
(3)安裝交叉編譯器,設置編譯環境:sudo apt-get install g++-arm-linux-guneabihf #;
其次,構建pcDuino系統所有的源碼都在https://github.com/pcduino/kernel里面,需要安裝git,然后下載相關源碼。
(4)下載、安裝git工具:sudo apt-get install git-core #;
(5)下載源碼,大概有2G左右,執行:git clone https://github.com/pcduino/kernel.git #;
(6)內核源碼在linux-sunxi目錄下,執行:make mrproper;
(7)Linux內核源碼的圖像化界面基于ncurses庫,需要安裝該庫,執行命令:
sudo apt-get install libncurses5-dev;
(8)安裝結束后,切換到/home/pillar/WORK/kernel/build/sun4i_defconfig-linux/下
“make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm menuconfig”,可以看到Linux內核配置界面了,如圖3,配置完成后保存退出。

圖3 內核配置界面
2.java環境的交叉編譯
在pcduino上安裝java環境,需要下載java的安裝文件,它有專門針對arm芯片的版本(下載地址:http://www.oracle.com/technetwor ... s/javase/index.html)。這里有好幾個文件,注意是要下這個才行:ejre-7u10-fcs-b18-linux-arm-vfp-client_headful-28_nov_2012.tar.gz。
第一步:解壓,命令如下:tar -zxvf ejre*.tar.gz。
改變權限:chown -R root:root ./ejre1.7.0_10
創建一個新的目錄:mkdir -p /usr/lib/jvm/,這個目錄是java的虛擬機的位置。
把解壓的文件拷貝進去:mv ejre1.7.0_10/ /usr/lib/jvm/
第二步:安裝arm支持,執行:sudo apt-get install -y libc6-armel libsfgcc1
第三步:安裝后續支持包。首先下載下來,地址如圖4:

圖4 下載地址
然后,把這些文件下載到一個目錄中,cd到這個目錄,安裝后,執行:sudo dpkg --unpack --force-architecture lib*
第四步:拷貝tools.jar文件,在http://processing.org/download/ 下載一個processing-2.0b7-linux32,然后找到里面processing-2.0b7javalib ools.jar文件,把這個文件拷貝到java_home/lib中。執行命令:sudo cp java/lib/tools.jar /usr/lib/jvm/ejre1.7.0_10/lib/
第五步:設置環境變量在/etc/profile 文件中加入:
JAVA_HOME=export JAVA_HOME=/usr/lib/jvm/ejre1.7.0_10
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
第六步:修改java文件為可執行,命令如下:
cd java_home/bin
chmod 777 java
通過上述環境配置,java的編譯環境搭建完成,可以通過java程序測試一下。
3.openHAB的安裝與配置
openHAB系統,是一個開放的自動化項目,采用純Java技術方案。Equinox的OSGi與Jetty,一起作為Web服務器運行的核心基礎。系統設計完全開放,匯集不同的總線系統,硬件設備、以及接口協議;系統允許用戶界面設計,具有獨特的外觀和感覺,同時具有強大的自動化邏輯處理能力。此外,系統通過協議綁定,實現總線的事件發送、接收命令和狀態更新。系統結構示意圖如圖5。

圖5 openHAB系統結構示意圖
openHAB采用中間件技術,內置一套建立在傳輸層以上的協議轉換機制,支持數據雙向傳遞(即網關接收到節點發來的監測數據后,預處理形成消息交給消息代理,由消息代理轉給管理應用;而管理應用收到用戶的設置參數或控制命令后,形成消息傳遞給消息代理,再由消息代理發給網關節點)。協議轉換的中間件,既是消息的提供者,也是消息的使用者。中間層為消息代理,完成消息的路由功能,分別接收管理應用、網關節點發來的消息,然后進行轉發,使管理應用與監測網絡的網關間實現數據交互。如圖6。
底層為多個Zigbee監測網絡,負責監測數據的采集與控制。每個Zigbee監測網絡有一個網關節點和若干的數據采集節點。監測網絡采用星型結構,網關節點作為每個監測網絡的基站。網關節點具有雙重功能,一是充當網絡協調器的角色,負責網絡的自動建立和維護、數據匯集;二是作為監測網絡與中間層交互的接口,與中間層的消息代理傳遞消息。

圖6 中間件
上層為openhab服務器,作為人機接口,實時顯示各個Zigbee監測網絡的監測數據;接收用戶的各種設置參數和控制命令。
基本流程:外部節點由Zigbee星型網絡組成,家中電器開關狀態和傳感器的控制信息在網絡中自由傳輸,經由協調器傳送至openhab服務器的網關,再由網關通過WiFi經無線路由連接到外部以太網,用戶可以通過遠程用戶界面端了解家中電器狀態;家庭網關可以通過無線網絡對遠程用戶的控制命令作出判斷和響應,從而開啟或關閉家中的電器。
關于openHAB安裝、配置以及協議綁定的具體操作如下:
(1)用git工具在網站下載系統源碼(https://github.com/openhab/openhab),然后創建一個openHAB文件夾。
(2)下載并安裝Yoxos(https://yoxos.eclipsesource.com/downloadlauncher.html),該軟件包含超過2,000 Eclipse插件,Yoxos發射器可以自動下載所有的插件和所需的依賴,能快速部署軟件運行環境。
(3)創建java工作環境,選擇openhab的項目文件,并導入工作區,選擇openHAB文件夾為根目錄。
(4)編譯運行代碼,生成部分的openhab,找到項目“org.openhab.model.codegen”,準備啟動該文件。選擇“運行-> x產生ABC模型”,按照順序完成相關操作。其中,在第一個代碼生成時,會提示是否下載“ANTLR文件”,選擇“Y”。
(5)一般來說,項目文件在編譯后,都不會有錯誤。如果出現錯誤標記,嘗試“清除”有關的項目。
(6)協議綁定,基于設備通信方式,通常綁定串口協議。
本文提出無線智能網關的設計和實現方案,采用低功耗pcduino核心板、Zigbee協議作為內網通信方式、TCP/IP協議棧的WiFi模塊為網絡的數據出口,以openhab服務器為網關,克服了傳統網關架構下Zigbee傳輸速率較低的瓶頸,利用WiFi和Zigbee全網無線無縫連接。系統測試結果是:該系統可靠性高、協議轉換效率高,抗干擾能力強,同時具有很好的通用性,適合智能家居、工業控制等領域的技術應用。
參考文獻:
[1]彭建,崔更申,陳約林.Zigbee無線網絡協議層在Linux系統中的構建[J].傳感器與微系統,2007,26(8):69~71.
[2]胡彧,楊琳.基于自定義家電管理協議的家庭Web網關實現[J].計算機工程,2009,35(5):271~274.
[3]黃麗瑩.骨干無線網狀網的排隊延遲性能研究[J].計算機應用,2009,29(8):2 179~2 182.