智能家居系统,是指采用先进的计算机技术、网络通信技术、智能控制技术、无线传感网络技术,将与家居生活有关的各种设备有机地结合在一起,为人们提供高效的家居环境[1]。本文基于ARM920T内核的S3C2440、嵌入式Web服务、QT技术、无线组网技术,设计了智能家居监控系统,系统由智能家居主机、ZigBee/Wi-Fi无线传感控制网络、智能家居客户端软件组成,实现用户能够以远程登录模式连接到智能家居主机上,通过ZigBee和Wi-Fi无线网络实现对家居环境和家电信息工作状态的实时查询和远程监控,对实现智能化的家居环境有一定的实际意义。
1 智能家居系统总体方案智能家居监控系统采用层次化设计,以ARM平台构建的智能家居主机为核心,以ZigBee组建的无线传感控制网络为家庭内部网络,使用QT技术编写智能家居客户端软件,整个系统分为三层结构,如图 1所示。系统分为家庭内部网络和家庭外部网络,内网是指使用ZigBee协议建立的无线传感控制网络,它控制家用电器节点和家居环境采集传感器节点;外网是指Wi-Fi热点和Internet网络,智能家居客户端软件与智能家居主机通过外网连接[2]。内网和外网之间是由智能家居主机相连接并且进行信息的交互。
智能家居主机是一个家庭内部网关[3],是家庭环境监测系统和控制系统的重要组成部分,主要连接由ZigBee组建的传感控制网络和Internet网络,实现异构网络之间数据的转发和控制协议的解析。智能家居无线传感网络中所有传感器采集到的数据和家用电器控制的相关信息都是先传输到智能家居主机,PC客户端软件通过IP地址和端口访问智能家居主机获取用户所需的家居信息,或者通过主机向家庭内部的无线网络中的控制设备和家用电器发送控制指令。ZigBee组建的网络中本身有一套传输协议[4],但只适用于家庭内部无线传感网络中数据的发送和接收,用户要发送控制命令,就必须通过智能家居主机,实现协议的解析和转发。智能家居主机需要能够接入Internet网络,此时需要使用gSOAP工具在智能家居主机上添加简单对象访问协议(Simple Object Access Protocol,SOAP);ZigBee与智能家居主机通信采用串口的方式,智能家居主机需要有串口通信的模块;智能家居主机需要保存家庭内部传感器和家用电器的控制信息,就需要数据存储模块。综合以上分析,本设计的智能家居主机必须包含以下几个模块:S3C2440最小系统、触摸屏模块、ZigBee控制协议收发模块、嵌入式Web服务、因特网接入模块、数据存储模块。
1.2 智能家居内部网络设计家庭环境监测和控制网络使用ZigBee来组建家庭内部的传感控制网络;对于远程的PC用户采用Wi-Fi热点或者Internet进行连接,实现客户端用户对家居环境进行远程监测和控制。ZigBee终端节点上可以搭载常用的控制设备和传感器模块(如窗帘、烟雾报警器、人体红外感应、火焰传感器、温度传感器),组成基于ZigBee的无线传感控制网络。
2 智能家居主机硬件电路和软件设计 2.1 智能家居主机硬件电路设计智能家居主机的硬件设计主要包括主控芯片S3C2440、电源模块电路、串行通信接口电路、USB接口电路、FLASH存储电路、LCD触摸屏接口电路的设计,下面给出主控芯片S3C2440、串行通信接口电路、USB接口电路的设计。
2.1.1 主控芯片S3C2440S3C2440是三星公司生产的一款小体积、低功耗、高性能的微处理器,采用ARM公司设计的16/32位的ARM920T 的RISC处理器。ARM920T采用了最新的高级微控制器总线架构并且自带有内存管理单元和具有高速的处理计算机能力,有效地降低了系统的功耗。S3C2440涵盖了所有常用的硬件接口和总线,集成有LCD控制器,GPIO端口多达130个,中断控制源有60个。S3C2440内部集成的片内资源非常丰富,具体硬件的结构如图 2所示。
本设计的串口通信电路用于PC端的串口调试与智能家居主机进行全双工串口通信,而智能家居主机和协调器之间的串口通信可以采用交叉串口线进行连接,系统采用的是USB转串口与协调器进行连接。S3C2440提供三个通道的通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART),编写程序时,需要设定所使用的UART对CPU发送数据传输请求的方式是中断还是直接存储器访问(Direct Memory Access,DMA),配置串口相关控制寄存器。本设计采用的串口通信芯片为MAX232,串口通信接口电路如图 3所示,其中所有电容的容值均为0.1 μF。
本设计中USB端口主要用于下载程序和连接外部USB设备。S3C2440支持两种USB接口[6]:一种是USB Host,它通过一个USB Hub芯片扩展为4个USB Host接口,扩展的USB接口是对等的,只需要在内核中添加了对应设备的驱动程序,在扩展的USB接口上就可以正常地使用该设备;还有就是USB Slave接口,它主要用来下载软件,将程序下载到目标板的NandFlash。USB接口的电路如图 4所示。
系统采用开源的U-Boot作为开机前的引导加载程序。U-Boot在引导和加载内核之前,完成了对相关硬件的初始化,并且将内核启动需要的参数通过相关机制传递给内核。U-Boot源码的目录结构主要分为与芯片有关的代码目录以及与芯片无关的代码目录,移植U-Boot所需要修改的源码都在前者所包含的Board目录和CPU目录当中。具体的过程如图 5所示。
系统采用友善之臂公司提供的arm-Linux-gcc-3.4.5 。Linux内核移植需要预先修改好顶层Makefile和Flash分区并且使用make menuconfig配置内核从而修改.config文件[7]。Linux内核中本身就支持S3C2410,就芯片的内部设备而言差别不大,只需要在S3C2410代码的基础上作适当的修改即可适用于S3C2440。本设计中Linux内核移植需改DM9000网卡驱动和LCD液晶触摸屏驱动,另外要配置USB外设驱动使得内核可以支持USB设备,并且使得内核支持根文件系统。
2.2.3 制作根文件系统文件系统的目录结构如表 1所示。目前适合使用在嵌入式Flash设备上的根文件系统的格式有yaffs、jffs2、ntfs、root_qtopia,系统选用yaffs格式的文件系统。构建根文件系统首先建立动态链接库,随后使用make menuconfig配置并且交叉编译Bosybox。安装完成Bosybox后,就会创建文件系统的常用目录/bin、/sbin、/usr/bin,及其内容。此时,就要手工建立etc目录下的配置文件,需要使用vim编辑器修改etc/fstab、etc/profile、etc/init.d/rcS文件。最后使用命令解压yaffs文件系统制作工具,并且使用chmod+x命令对yaffs2工具mkyaffs2image增加可执行权限,至此就可以使用命令#mkyaffs2image fs_root_Smart_home fs_root_Smart_home.yaffs2生成yaffs2映象文件。将制作好的文件系统发在/work/nfs_root目录下,通过操作U-Boot控制界就可以将根文件系统下载到ARM开发板Nandflash中。操作的命令如下:
1) Nfs 0x32000000 172.16.2.158 :/work/nfs_root/Smart_Home_Version_1.yaffs;
2) nand erase.part root;
3) nand write.yaffs 0x32000000 0x560000 $filesize。
2.3 智能家居主机驱动程序设计 2.3.1 USB转串口驱动本设计使用的串口设备为/dev/USBttyS0。串口驱动程序的底层是终端tty_driver程序,由于Linux内核已经将tty核心层和tty驱动层给实现了,需要做的就是实现串口核心层的uart_ops、uart_ports、uart_driver等结构体实例[8]。串口设备的驱动程序框架如图 6所示。
为了方便连接,协调器直接使用PL2303芯片与智能家居主机进行通信,那么需要添加PL2303驱动。内核文件目录drivers/serial/中已经提供了串口驱动程序,所以在使用内核提供的串口tty_driver后,完成串口驱动的工作主要如下。
1) 需要定义结构体:mini2440_uart_driver、mini2440_uart_ops、mini2440_uart_port,在适当的位置初始化结构体。
2) 依据应用程序的要求,要实现mini2440_uart_ops中的功能函数,这才是编写串口驱动程序的主要工作。
2.3.2 USB无线网卡驱动USB无线网卡驱动从实际的应用来看,包含两部分驱动:USB驱动和网卡驱动。USB设备驱动结构从下往上依次是USB总线控制器、总线驱动、USB驱动;网络设备驱动结构从底层到顶层依次为媒介层、网络驱动层、设备接口层和协议层。由于USB设备需要支持热插拔,USB驱动程序就会调用设备探测(probe)函数来检测被传递进来的信息。USB设备驱动程序,通过URB(USB Request Block)调用数据传输函数实现USB接口和网卡之间的数据交换[9]。
本设计使用较新的内核Linux-3.4.2 ,已经包含了常用的无线网卡驱动;为了提高开发的效率,选用TP-LINK公司的TL-WN721N无线网卡,其VID为0x148f,PID为0x3070,这样不必从头开始编写无线网卡的驱动程序,只需要配置Linux内核,使其支持无线网卡即可。配置内核之前,需要配置开发环境,使得物理机、宿主机和目标机在同一个IP网段。进入到内核目录drivers/net/wireless/中,使用PID查找配置选项。经grep "0x3070" * -nR命令搜索后,得到rtlWiFi/rtl8192cu/sw.c:273:{RTL_USB_DEVICE(USB_VENDER_ID_REALTEK,0x3070,rtl92cu_hal_cfg)},打开rtlWiFi/rtl8192cu/Makefile确定需要配置的选项为CONFIG_RTL8192CU。配置成功后使用make uImage命令就可以生成需要的内核镜像文件。使用开源的无线网络配置工具wpa_supplicant可以对无线网卡进行测试和配置。它可以用来扫描附近的无线网络;开启连接无线网络;停止使用无线网络;设置热点。
3 智能家居无线传感控制网络设计 3.1 ZigBee无线传感控制网络设计ZigBee网络采用的网络拓扑为树型结构,整个无线传感网络由1个ZigBee协调器、2个路由器节点、6个终端传感器节点组成。其中终端节点主要是温湿度采集节点、火焰检测节点、人体红外检测节点、烟雾检测节点、窗帘控制节点、灯光控制节点。
3.1.1 协调器节点软件设计协调器给终端节点发送命令数据采用的是广播的方式,终端节点通过判断发送命令的内容,找到相对应的节点后,将传感器采集到的信息以点播的方式传送给协调器[10]。协调器中还需要添加与智能家居主机间的串口通信程序,能够向智能家居主机发送和接收数据。在Z-Stack协议栈中,对于网络的建立和管理是由操作系统抽象层(Operating System Abstraction Layer,OSAL)来对系统的初始化函数、扫描信道函数、网络建立函数、数据的发送和接收函数进行统一调度,其具体的软件流程如图 7所示。
路由器作为一种中介,其作用是增加协调器节点和所有的终端节点的通信距离,实现在多跳中的数据转发。路由器节点发现网络后会自动发出绑定申请加入网络,绑定成功后协调器和终端节点发送信息会被路由器自动接收并且转发,路由器节点的软件流程如图 8所示。
终端节点主要完成对智能家电设备的控制和传感器数据的采集[11],包括电动窗帘控制、人体红外检测、火焰检测、烟雾检测、温度检测、湿度检测。为了降低功耗,终端节点可以设置工作在睡眠模式,由需要执行的事件唤醒,因此,终端节点就使用一块电池供电。其程序工作流程如图 9所示。
下面以电动窗帘控制节点设计为例进行介绍。
电动窗帘由佳丽斯电机、同步带静音轨道、窗帘主体和墙上控制器组成。本设计中要实现对窗帘的智能控制,实际上就是设计智能家居主机控制电机的正转和反转,通过滑轮拉动窗帘自动打开或者关闭。佳丽斯电机有三个接线柱:公共端(M_Blue)、正转(M_Brown)和反转(M_Black)。公共端接入220 V交流的零线,正转和反转引脚分别通过继电器接入到220 V交流的火线,具体的电路如图 10所示。
考虑到CC2530抗干扰性能,本设计采用外接单片机STC12C5A60S2进行辅助设计。智能家居主机对电动窗帘的控制命令,采用CC2530与STC12C5A60S2通过串口通信的方式来传递。为了能够实时地查询窗帘开合的状态,提高系统控制的可靠性,在电动窗帘节点处设计了窗帘开合度检测模块,利用红外对管进行开合度检测。开合度测量原理:每间隔一段距离在窗帘轨道上安装一个红外发射对管(发射接收距离小于10 cm),当有窗帘覆盖时,红外接收器收到信号,说明窗帘已经合上,状态为关闭。电动窗帘节点通过STC12C5A60S2上的3个引脚连接进行开合度的检测,无窗帘覆盖时红外传感器信号为空。除无线控制外,窗帘旁装有手动开关,采用触摸开关控制。有线控制可以任意控制窗帘的开合度,无线控制只能调整窗帘的开合度为预先设定的值。在有线控制和无线控制同时响应时优先执行有线控制。
3.3 智能家居系统数据通信协议设计在智能家居系统中常用的传感器数据有很多,常用的执行控制类数据也有很多。实际的应用中,按照常用设备的类型总体分为3个部分:感知型传感器类(0x01) 、执行控制类(0x02) 和多媒体类(0x03) ,占用一个字节;按照通信数据的位数可以分为:开关量(0x01) 和数据量(0x02) ,占用一个字节。所有的终端子节点加入传感网络时不仅协调器会为它分配一个地址,智能家居主机也会为它注册一个节点编号。所以,对于ZigBee网络中的任何一个节点可用ID号来表示,节点ID说明如表 2所示。
智能家居主机和ZigBee协调器之间通信方式有:SPI、IIC、串口。为了便于整个系统数据通信格式统一,本设计采用串行通信接口作为整个智能家居系统的数据通信方式。智能家居主机和协调器之间通信具体数据帧如表 3。起始特征字的第1个字节固定为0xFFFA,它用来判定接收的数据是否在同一个网络内;第2个数据有智能家居主机定义;第3个数据是协调器自动分配的16位段地址。
终端节点设定只能使用点对点通信方式,只有协调器有发起群发和广播的权限,无线通信的数据帧结构如表 4。
扩展板与CC2530小系统串口通信协议如表 5所示。
终端节点的类型主要有3类,选取了感知型传感器类和控制类的节点进行分析,如表 6所示。智能家居无线传感和控制网络中,数据通信方式主要有三种:广播、点播和组播。本实例中点播用于终端子节点和协调器进行通信。广播用于协调器节点发送数据,网络中其他的节点都可以接收到协调器发送来的数据,所有的子节点设备根据发送的数据和命令判断是否响应协调器节点。组播用于对预先选取的一部分节点发送数据,只需要将这些节点标有相同的组号,进行数据发送时制定组号即可。
智能家居无线传感控制网络首先要测试每个节点能够加入到ZigBee网络中;其次协调器能够通过广播的方式对网络中所有终端节点广播命令消息,终端节点收到命令之后,能够将采集到的信息以点播的方式传给协调器;此外,协调器也能够直接控制终端节点。对整个智能家居系统而言还需要对ZigBee的通信距离进行测量,合理地布局各个节点的位置。
4.1 智能家居内部网络组网测试Z-Sensor Monitor是TI公司开发的网络测试软件,可以用于星型网络、树型网络、Mesh网络的测试。它与协调器之间数据的传送是通过串口通信发送,协调器中本身就记录有网络中个节点的设备类型和地址,这样整个ZigBee无线网络的拓扑结构就会显示在软件的界面中。ZigBee无线网络中,协调器工作后会自动创建传感网络,其他的子节点上电后,会自动地发送请求并加入到网络中,测试程序将终端节点内部的温度传感器采集的数据发送给协调器,路由节点完成数据的多跳传输,协调器节点连接串口后就会将网络中各节点的信息发送给上位机软件Z-Sensor Monitor,成功解析后的数据显示在PC屏幕上。测试中,使用了1个协调器节点、1个路由节点和4个终端子节点。子节点可以将采集到的温度数据传输到协调器中,最终显示在PC的上位机软件Z-Sensor Monitor中。测试结果如图 11所示。
主要测试协调器以广播的形式发送命令消息,对应的终端节点收到消息后将采集到的温度数据和段地址发送给协调器,在PC端的串口测试软件中显示。发送的命令中,第一位S代表发送,第二位数字代表自定义的终端节点,第三位代表传输的数据是温度(T)。测试中仅以温度为例将终端节点采集的温度消息以点播的方式发送给协调器,协调器就会把各个终端节点的收到的命令数据、采集节点处温度和节点入网时自动分配的地址发送给串口。测试结果如图 12所示。
客户端要远程地查询家居环境和控制家电设备,就需要在智能家居主机中建立Web服务,而此系统则采用gSOAP工具包开发Web Service。gSOAP工具包能够提供XML(Extensive Markup Language)到C/C++语言的映射,基于XML的数据结构,能够跨越不同的操作系统和语言环境,对于开发者而言,只需要用C/C++编写应用程序,而不需要知道细节,就能够实现一个Web Service程序和客户端程序[12]。
整个系统平台分为三个部分:ZigBee无线传感控制网络、智能家居主机(ARM开发板)和智能家居客户端软件。首先,配置ZigBee网络,先选择一个模块作为协调器节点烧入协调器程序,之后依次打开其他的各终端节点模块,当其加入到主协调器组建的ZigBee网络时,自身的入网指示灯就会亮起,表明成功加入ZigBee网络。协调器通过USB串口芯片PL2303与智能家居主机先连接,通过USB转串口来完成智能家居主机与ZigBee网络间的数据通信。客户端软件是用QT编写的,可以直接在PC上运行,通过网络IP和端口如:172.20.46 .230 :8888与智能家居主机进行连接。在连接之前,还需要配置无线路由器的DMZ主机的IP为172.20.46.230,此时就把智能家居主机的IP和端口号映射到wan的端口上,当开启智能家居主机Web Service,设置网络端口、USB转串口的设备名称,具体命令:./smart_home_server/dev/ttyUSB0 8888。
打开PC上的QT客户端软件,输入智能家居主机IP和端口号,连接成功后应用软件就可以与智能家居主机通信。主界面可以显示ZigBee网络的传感器数据,还可以控制ZigBee网络的终端设备。连接成功的主界面如图 13所示。
在室内灯光控制功能中,可以对LED1~LED8共8盏灯实现开关控制,同时可以根据自己的需要同时打开所有的灯,关闭所有的灯。在窗帘控制功能中,可以控制电动窗帘的电机是正转还是反转,同时还可以预先设定窗帘的开合度为全开、全闭、1/3开、1/3关。在室内温湿度采集功能中,可以预先设定要采集设备的节点号,就会显示对应节点的温度,同样湿度采集显示界面中也可以显示预先设定节点的湿度。实验中还对人体检测节点进行测试,检测距离设定为3 m,广角为100°,当检测到有人进入感应区时,此时当房间照明比较暗的情况下灯会自动打开。
本文采用ZigBee技术组建的无线传感控制网络为家庭内部网络,以ARM平台构建的智能家居主机为核心,使用QT技术编写智能家居客户端软件,设计出一套实时性好、高智能化且易于扩展的智能家居无线控制系统方案,实现了家居生活的智能化,并经过后期的实验,验证了该系统的可行性和实用性。但是整个系统在功能上还有待完善:
1) 视频监控是整个智能家居的重要部分,本文在这方面涉及得比较少。后续还要增加视频监控功能,通过硬盘录像机可以远程地监控和保存家居环境信息。
2) 智能家居系统容易遭受到网络通信干扰和外来入侵。对整个系统而言,必须有完善的安全机制,这方面是今后一个重要的研究方向。
3) 在ZigBee无线传感控制网络中,可以增加一些功耗处理机制,提高终端节点电池的使用寿命。
[1] | LI B, YU J. Research and application on the smart home based on component technologies and Internet of things[J]. Procedia Engineering, 2011, 15 : 2087-2092. doi: 10.1016/j.proeng.2011.08.390 |
[2] | 郭稳涛, 何怡刚. 智能家居远程监控系统的研究与设计[J]. 计算机测量与控制, 2011, 19 (9) : 2109-2112. ( GUO W T, HE Y G. Smart home remote monitoring system of research and design[J]. Computer Measurement and Control, 2011, 19 (9) : 2109-2112. ) |
[3] | 满莎, 杨恢先, 彭友, 等. 基于ARM9的嵌入式无线智能家居网关设计[J]. 计算机应用, 2010, 30 (9) : 2541-2544. ( MAN S, YANG H X, PENG Y, et al. Design of embedded wireless smart home gateway based on ARM9[J]. Journal of Computer Applications, 2010, 30 (9) : 2541-2544. doi: 10.3724/SP.J.1087.2010.02541 ) |
[4] | LI P F, LI J K, NIE L H, et al. Research and application of ZigBee protocol stack[C]//ICMTMA 2010:Proceedings of the 2010 International Conference on Measuring Technology and Mechatronics Automation. Piscataway, NJ:IEEE, 2010:1031-1034. |
[5] | 罗景泉, 鄢萍, 张研, 等. 一种B/S模式下车间层数据传输方案的研究与应用[J]. 重庆大学学报:自然科学版, 2012, 35 (S1) : 6-10. ( LUO J Q, YAN P, ZHANG Y, et al. Research and application of a B/S mode to get off the layer data transmission scheme[J]. Journal of Chongqing University (Natural Science Edition), 2012, 35 (S1) : 6-10. ) |
[6] | JIANG T, YANG Z. Research on mine safety monitoring system based on WSN[J]. Procedia Engineering, 2011, 26 : 2146-2151. doi: 10.1016/j.proeng.2011.11.2418 |
[7] | 李佳佳, 马永杰. Linux系统在S3C2440上移植的分析与实现[J]. 计算机系统应用, 2012, 21 (10) : 214-216. ( LI J J, MA Y J. The analysis and implementation of Linux system on S3C2440 system[J]. Computer Systems & Applications, 2012, 21 (10) : 214-216. ) |
[8] | 周峰华, 潘文亮, 刘军亮, 等. Linux下ARM和单片机的串口通信设计[J]. 仪表技术, 2011, 32 (8) : 27-32. ( ZHOU F H, PAN W L, LIU J L, et al. The design of serial communication of ARM and single chip microcomputer under Linux[J]. Instrumentation Technology, 2011, 32 (8) : 27-32. ) |
[9] | 赵秋亮, 李良儿, 刘玉良. USB无线网卡的Linux驱动移植[J]. 单片机与嵌入式系统应用, 2012, 12 (1) : 66-68. ( ZHAO Q L, LI L E, LIU Y L. USB wireless network card Linux driver porting[J]. Microcontrollers & Embedded Systems, 2012, 12 (1) : 66-68. ) |
[10] | 任珍文, 黄玉清. 基于CC2530的无线传感器网络监控平台[J]. 电子技术应用, 2012, 38 (10) : 122-125. ( REN Z W, HUANG Y Q. Monitoring platform of WSN based on CC2530[J]. Application of Electronic Technique, 2012, 38 (10) : 122-125. ) |
[11] | 杨松, 胡国荣, 徐沛成. 基于CC2530的ZigBee协议MAC层设计与实现[J]. 计算机工程与设计, 2013, 34 (11) : 3840-3844. ( YANG S, HU G R, XU P C. Design and implementation of MAC layer in ZigBee based on CC2530[J]. Computer Engineering and Design, 2013, 34 (11) : 3840-3844. ) |
[12] | BERTRAM J, KLEINER C. Secure Web service clients on mobile devices[J]. Procedia Computer Science, 2012, 10 : 696-704. doi: 10.1016/j.procs.2012.06.089 |
[13] | BLANCHETTE J, SUMMERFIELD M. C++ GUI Programming with Qt4[M]. nd ed. Upper Saddle River, NJ: Prentice Hall, 2008 : 415 -416. |
[14] | DALHEIMER M K. Programming with QT:Writing Portable GUI Applications on UNIX and Win32[M]. Sebastopol, CA: O' Reilly, 2010 : 318 -319. |
[15] | 杨柳, 岳坤, 庞和明, 等. QT/Embedded及嵌入式Linux在智能监控系统控制中的应用[J]. 计算机应用, 2010, 30 (S1) : 289-291. ( YANG L, YUE K, PANG H M, et al. Application of Qt/Embedded and embedded Linux in intelligent monitoring system[J]. Journal of Computer Applications, 2010, 30 (S1) : 289-291. ) |