嵌入式Web和ZigBee的智能家居系统方案
智能家居系统是将相对独立的家用电器构成一个统一的系统,进而实现对这些设备和家庭环境的智能管理、远程监控和资源共享。其目的是为人们提供一个安全、舒适、高效和便利的生活环境。本文介绍一种基于嵌入式Web和ZigBee技术的网络化智能家居系统的设计和实现方案。
1、系统结构和功能介绍
系统有远端PC、嵌入式网关、USB摄像头和ZigBee组成的家庭内部无线网络四部分组成。设计思想是在每一个家庭设备上都装上ZigBee模块和相应传感器来组成一个终端节点,用来实时监控设备的状态,并且把采集到的数据以无线方式发给ZigBee协调器,这样就由ZigBee协调器和各终端设备组成了一个无线连接的星型结构的家庭内部网络。嵌入式网关是系统的中枢,可以把USB摄像头采集的视频信息和来自协调器接收的终端节点信号传送到Internet上,这样就把内部网络连接到互联网上。特别是USB摄像头的使用,让用户可以直观的看到家里的一切变化,弥补了大部分智能家居系统只可以查看家庭设备数字信息的不足。用户可以通过远程PC机访问家庭内部网络,查看家庭设备的数字信息和视频信息,实现远程监控的目的。
2、系统硬件设计
2.1核心处理器模块
本系统选用S3C2440A作为核心控制器,它是Samsung公司推出的一款基于ARM920T核的处理器,采用了16/32位RISC处理器,具有外部存储器控制器,LCD控制器,4通道DMA控制器,三通道UART,两通道SPI,两路全速USB主设备芯片,带有MMU虚拟存储器单元,这一特性可以移植linux系统和建立Web服务器,主频400MHz,有130个I/O端口和24路外部中断源,有多种通信接口,体积小,功耗和成本低,可靠性高,特别适合作为嵌入式微处理器。
2.2存储模块
NANDFLASH存储模块选择Samsung公司生产的K9F1208U0M-YCB064 M*8bits的高性能存储芯片。掉电后信息不会丢失,用于存储启动代码、内核和文件系统。
SDRAM是系统的内存,它不具有掉电保持数据的特性,其存取速度大大高于Flash存储器,在系统中主要作程序的运行空间、数据和堆栈区。系统中SDRAM选用K4S561632C-TC75芯片。K4S561632C-TC75的存储容量为16M*16位(32M字节),数据宽度为16位,由于S3C2440A是32位的,外部总线也是32位的,为了最大限度发挥处理器的性能,本系统选用两片K4S561632C-TC75芯片并联起来,以构成32位内存系统。
2.3以太网接口
系统选用CS8900A芯片建立网络接口。CS8900A是Cirrus公司生产的一款单芯片、全双工、全面支持IEEE802.3标准的高集成以太网控制器。在本系统中网络控制器发挥着重要作用,它负责将监控数据发送到Internet,并把来自Internet的控制指令传送至底层。
2.4摄像头选择
对于图像采集传感器,采用以中星微公司的ZC301感光芯片为核心的USB摄像头作为图像采集模块。中星微301系列高清芯片拥有影像光源自动增益补强技术,自动白平衡、边缘增强以及伽马矫正等先进的摄像控制技术。
2.5ZigBee模块
无线收发芯片采用Chipcon(已于2006年被TI公司收购)公司生产的CC2430.CC2430芯片除了整合ZigBee射频(RF)前端、内存和微控制器外,还具有128KB可编程内存和8KB的RAM、模拟数字转换器(ADC)、定时器(Timer)、AES-128协同处理器、看门狗定时器以及21个可编程I/O脚等。因此选择CC2430做为无线收发部分,使用起来非常容易上手。由于CC2430的高度集成度,外围需要很少的器件可以组成最小系统。它结合Chipcon公司全球先进的ZigBee协议栈、工具包和参考设计,展示了领先的ZigBee解决方案。其产品广泛应用于汽车、工控系统、家居系统和无线传感器网络等领域。
3、系统软件设计
系统软件主要包括移植Linux操作系统,USB摄像头驱动的编写,ZigBee协调器工作程序和终端设备的收发程序,嵌入式Web服务器的移植等等。
3.1移植Linux操作系
本系统选用2.6版本的Linux内核,首先从内核源码。在编译内核前先要修改根目录下的Makefile文件:
ARCH=arm
CROSSCOMPILE=arm-linux-gcc
然后运行makemenuconfig进入配置菜单,选择需要的选项,配置完成后保存退出,依次执行内核编译命令:makedep;makeclean;makezImage编译成功后会在/linux/arch/arm/boot/下找到编译好的内核镜像文件zImage.然后可以用Bootloader菜单命令把内核镜像烧写到NANDFLASH中。
3.2USB摄像头程序
在Linuxkernel源码目录中driver/usb/usb-skeleton.c提供了一个基础的USB驱动程序。通过它仅需要修改极少的部分,就可以完成一个USB设备的驱动。重新编译内核生成摄像头驱动文件,然后执行insmod加载USB摄像头驱动,Linux系统就在/dev目录下注册了USB视频设备/dev/video0.
摄像头驱动程序安装好后为了进行视频采集必须加入Video4Linux模块,Video4Linux是Linux中关于视频设备的内核驱动,它为针对视频设备的应用程序提供一系列接口函数。对于USB口摄像头,其驱动程序中需要提供基本的I/O操作接口函数open、close、read、write等的实现。对中断的处理实现,内存映射功能以及I/O通道的控制接口函数ioctl的实现等,并把它们定义在structfile_operation中。这样当应用程序对设备文件进行诸如open、close、read、write等系统调用函数时,Linux内核将通过file_operation结构体访问驱动程序提供的函数。