蒋志伟,王 伟,刘 姗,王 凯

(河北工业大学 电子信息工程学院,天津 300400)

人类社会和现代科技力量的快速发展逐渐改变着传统的生活方式,计算机技术、智能控制技术、现代通信技术等都已经进入到快速发展的时代。人们对所居住的环境要求不再是一个简单休息的地方,而是追求一种更加智能化、人性化、“以人为本”的生活环境[1]。

现如今,以低功耗的嵌入式ARM为代表的处理器迎来了一个高速发展的环境,处理速度和控制能力也有了前所未有的提升,众多学者也提出了网关控制器采用ARM芯片的观点。ARM芯片不仅可以搭载Linux操作系统,而且在家庭内部网络中支持ZigBee的无线传感网络,在家庭外部通信网络中支持以太网、GSM/4G网络、WiFi、GPRS等的接入,很好地实现了整个智能家居系统的通信环境。网关作为数据交换的核心,用于解决异构网络互联互通的问题,实现协议转换的研究[2]。

1 智能家居系统总体设计方案

本文设计的智能家居系统遵循可靠性、可拓展性、实时性、易操作性、性价比高的原则[3]。智能网关选择OK6410开发板平台,外接4.3寸显示器,通过Qt Creator开发工具对显示器的界面进行设计,包括信息的显示、家电的控制等功能;结合嵌入式系统,运用ZigBee无线传感技术组合搭建家庭内网,完成ZigBee的组网以及对协调器和终端节点的程序设计;通过TCP/IP通信协议与移动端组成家庭外网的设计,实现网关无线传输实时数据到移动手机端;通过配置内核移植USB转串口驱动,系统运行时,可以直接通过USB接收串口的数据。整个系统完成了硬件与软件设计,图1为智能家居系统设计框图。

图1 智能家居系统设计框图

2 硬件设计

2.1 智能网关模块设计

智能家居系统的网关采用OK6410开发板,处理器采用的芯片为S3C6410。S3C6410处理器是三星公司基于ARM11的高性能、低功耗的RSIC通用微处理器,采用64/32位内部总线架构,融合了AXI、AHB、APB总线,内置了很多强大的硬件加速器[4]。S3C6410包括优化的外部存储器接口,接口分别为DRAM和FLASH/ROM/DRAM端口[4]。智能网关及其外围拓展模块如图2所示。

图2 智能网关及其外围拓展模块

在智能家居控制系统设计中选用了嵌入式Linux操作系统[5],在Ubuntu 12.04下搭建ARM交叉编译器环境,使用gcc 4.3.2交叉编译器。安装重启后,若出现gcc version 4.3.2(Sourcery G++Lite 2008q3-72),表示成功了。另外,还需要移植tslib库,该库是触摸屏校准时需要的库文件,如对触摸屏的数据进行过滤、去抖动等。安装tslib前需要安装autoconf、automake和libtool包,用vi编辑器打开/etc/profile文件,配置环境变量,并在其末尾添加命令,具体内容如下:

export PATH=/usr/local/arm/4.3.2/bin:$PATH

export TOOLCHAIN=/usr/local/arm/4.3.2

export TB_CC_PREFIX=arm-linux

export PKG_CONFIG_PREFIX

=$TOOLCHAIN/arm-none-linux-gnueabi

搭建好交叉编译环境后就可以进行内核移植,步骤如下:

1)解压源码,tar-xzvf linux-3.0.10.tar.gz。

2)配置编译平台,修改体系结构和交叉编译链变量定义,ARCH?=arm;CROSS_COMPILE?=arm-none-linux-。

3)配置内核,使用makemenuconfig的配置页面。

4)Linux驱动,如NAND FLASH驱动、USB OTG驱动、GPRS驱动等。

经过以上的编译并通过USB烧写,最后将嵌入式Linux系统移植到开发板上,系统可以稳定地运行。

2.2 ZigBee模块设计

ZigBee核心芯片选用的是德州仪器设备公司开发的用于2.4 GHz IEEE 802.15.4/ZigBee的片上系统解决方案的CC2530芯片[6]。本文ZigBee网络采用的网络拓扑为树型结构[7]。协调器节点程序设计:整个ZigBee网络的核心就是协调器节点,它主要完成对整个网络的组建、终端节点的加入、网内地址的分配、网络邻接表的更新以及收发数据等。协调器通过广播将指令发送给终端节点,终端节点根据指令的内容对传感器进行操作,然后以点播的方式再将采集到的数据发送给协调器。协调器节点工作流程如图3所示。

图3 协调器节点工作流程

终端节点程序设计:终端节点的程序主要负责多种传感器的数据采集、控制多种设备以及触发报警等多项任务,其中包括温湿度检测、烟雾浓度检测、人体红外检测、风扇灯管的开关等。在终端节点的设计中为了降低功耗,可以设置工作睡眠模式,通过需要执行的事件进行唤醒。终端节点工作流程如图4所示。

图4 终端节点工作流程

对ZigBee输出功率的修改方法为:在ZigBee协议栈文件中找到mac_radio.c文件,并找到函数macRadioUpdateTxPower,增加如图5所示代码,macPhyTxPower=0xf0,其中0xf0为功率值,默认值为0x32;接着在要初始化的代码里调用此函数,用户可以根据家庭的情况来改变ZigBee的输出功率。

图5 调用函数代码图

2.3 USB转串口设计

为了设备可以更加高效和准确,ZigBee协调器采用了USB转串口芯片CH340,CH340G内置了独立的收发缓冲区[8],支持单工、半双工或者全双工异步串行通信,可以用于升级原串口外围设备,或者通过USB总线为计算机增加额外串口[9]。本文设计使用的串口设备为/dev/ttyUSBS1。

USB转CH340串口驱动的移植步骤如下:

1)在配置ARM的内核代码目录中检查是否有USB设备的ID,如果没有则添加USB设备的信息。

2)配置内核的串口驱动,进入Device Drivers;选定USB Generic Serial Driver;在 Winchipherd CH341 Single Port Serial Driver中按M键选择;然后返回内核目录下运行make menuconfig进行编译。

3)编译无错后会在kernel/drivers/usb/serial目录下生成ch341.ko文件,将其放到开发板然后运行insmod ch341.ko命令,将ZigBee的USB插入开发板的串口上,系统可识别到设备节点。

整个智能家居系统的数据通信方式采用串行通信接口,所以需要在协调器中添加与ARM智能网关对应的串口通信程序,从而向智能家居主机发送和接收数据,其协议格式如表1所示。

表1 串口与协调器协议格式

3 软件设计

3.1 智能网关设计

在智能家居系统中,智能网关是实现通信的桥梁,起着承上启下的作用[10],所以需要在网关中设计一个统一的通信协议。对于通信协议不同的设备收集到的信息,通过网关封装成一个形式的数据包,之后可以解析后发送给不同协议的设备或者将信息发送给用户。每个设备之间协调工作,不会互相影响,设备之间具有耦合性低、内聚性高的特点。智能网关主程序流程如图6所示。

图6 智能网关主程序流程

网关硬件上电启动系统后,会进行一系列的初始化,并且设计两个循环线程,其中一个循环是串口不断接收和更新ZigBee协调器的数据,当收到传感器的数据后,协调器通过串口上传到网关进行解析;另一个循环是通过Socket接收网络或者智能网关发来的数据,对数据进行解析后,按照ZigBee需要的格式重新打包,然后通过串口发给ZigBee协调器,再发送到相应的终端节点。

3.2 通信模块设计

在整个智能家居系统设计中,网关会接收到多个模块的信息,所以数据是否能够保证正确的传输取决于通信协议。在整个系统中,一方面,智能网关要和ZigBee协调器通过无线通信进行数据的收发和指令的下达;另一方面,智能网关又通过TCP/IP网络协议和移动端组成外部网络。TCP通信协议使用C/S模式,通过指定的IP地址实现客户端和服务器之间的通信[11]。在Linux中基于Qt的网络编程环境中,主要通过Socket接口实现对数据的进封装,并且在使用Qt的网络套接字需要在.pro文件中加入一句:QT+=network。在客户端中使用QTcpSocket类创建套接字对象,连接服务器后使用write函数发送数据,当Socket接收缓冲区有新数据时,发出readyRead()信号,从而为该函数添加槽函数读取数据。在服务器中创建QTcpServer对象,侦听一个端口,当客户端通过这个端口访问服务器,会发出newConnection()信号,因此为该信号添加槽函数,从而实现两个通信进程间的连接。图7为QT TCP操作流程。

图7 QT TCP操作流程

3.3 移动终端设计

移动终端的设计选择Android的手机客户端[12],基于TCP/IP网络通信协议,使用Socket网络编程,实现用户通过手机终端APP远程对系统进行检测和控制[13]。图8为Socket通信模块程序框架。在图8中,当ARM与移动终端建立连接后,用户通过手机UI界面的广播方式发送数据给Socket对象;然后Socket会启动一个新的进程,将信息与ARM服务器之间进行读取和收发;最后把数据再以广播的方式返回到安卓客户端进行显示。软件主要实现以下功能:

图8 Socket通信模块程序框架

1)对UI界面的设计和操作;

2)实现与ARM服务器之间的通信;

3)从Socket对象中对数据进行读写操作。

用户可以通过打开手机APP来获取收到的数据,如家庭内部的温湿度、烟雾浓度、光照度等信息;同时可以操作室内的家居、切换室内情景模式。通过远程的操控,用户在外面就可以很好地了解到家里的情况。

4 系统测试

测试工作主要是为了检查软件功能的正确性和软件各项性能的符合性。整个嵌入式系统可以正常稳定地运行,通过应用程序的集成将一个通用的软硬件平台转换成一个可以完成特定内容的专用平台;Qt程序移植到智能网关,经过各项功能进行调试、测试,各个界面、控件、部件显示正常,具体各个控件的功能正常,与其他部件可以协调工作;ZigBee通过串口调试,电路及协议栈工作正常,组网完成,ZigBee网络数据可以正常传输;通过对智能网关和传感器节点长时间通电工作,并且频繁改变物理量的值和终端节点频繁加入和退出ZigBee网络,验证了整个系统的工作状态良好,能够长时间的稳定运转。系统性能测试参数如表2所示。

表2 系统性能测试参数

经过测试可知,所设计系统满足了功能设计要求,实现了自动化管理的目标,并且在系统的性能和稳定性上也达到了预期的设计目标,初步实现了智能家居系统的功能。

5 结 语

本文设计一种以ARM11为核心的智能家居系统,对于智能网关的研究有一定的意义。目前,国际上并没有一套统一网关协议的标准,所以设计一套具有很好的实用性和兼容性的网关系统可以更好地推动智能网关的发展。通过对整个系统的测试可知,以智能网关为核心的各个模块可以有机地结合在一起,实现了相互通信和实时对家居环境进行本地控制和远程检测,证明了所设计系统可以很好地运行。