钟良骥,桂学勤,厉阳春,赵君喆
(湖北科技学院 计算机科学与技术学院,湖北 咸宁 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.