杨威,高文华
(太原科技大学 电子信息工程学院,太原 030024)
随着社会电子信息化的不断发展,人们在家居中使用的电器也越来越多,由此带来的安全隐患也有了明显的增多。在这些电器中,一旦出现一些异常,便会给人们带来很大的损失。为了降低电器的不合理使用带来的异常情况,就要求在异常发生时用户能及时得到信息,并通过实时监控,采取一定的操作排除异常。因此,智能家居系统的作用是非常巨大的。
在智能家居控制系统中,核心设备是家居智能控制终端。综合目前的研究现状,主要有以下几种方案:第一种是采用键盘、红外遥控器、触摸屏和LCD显示器等设备对家电进行控制。当前智能家居控制系统大都采用此种控制终端,使用此种方式需要分别对控制终端的软件与硬件进行设计,设计复杂,成本高。此外,使用此种控制终端只能进行本地控制,不能实现远程控制。第二种是采用家庭或者办公电脑作为智能家居控制系统的控制终端。使用这种控制方式的缺点是,只能用固定点对家居进行控制,控制终端不能移动,不够方便。第三种是采用手机作为控制终端,使用手机通过无线网络(WiFi、蓝牙、GSM等)对家居系统进行控制,可以真正做到方便、快捷、触手可及。但目前采用这种方式的智能家居系统还不是很多,而且大部分操作繁琐,没有良好的用户体验[1]。
本文解决了嵌入式智能家居系统、ZigBee无线通信[2]、家居控制协议等相关技术难点,分析了各自的基本特点和所要实现的基本功能,并在此基础上提出了基于Linux平台的嵌入式智能家居系统的整体设计方案。
根据全面感知、可靠传递和智能处理的功能需求,可将智能家居系统划分为感知层(家电信息采集终端)、网络层(家庭网关)和应用层(包括PC机网页和手机客户端)3个部分,其整体框架结构如图1所示[3]。
其中,感知层的核心功能是实现数据的采集,主要通过各类传感器来完成数据的获取,最终将获取到的数据通过无线网络[4]打包发送到网络层的家庭网关中。网络层需要实现一个基于嵌入式Web服务器的家庭网关,一方面,用来作为连接家庭内网与Internet外网的接口,实现家庭内网和Internet的数据通信功能;另一方面,用来统筹来自感知层的数据和来自应用层的命令。应用层则需要实现一个网页客户端和手机客户端界面,一方面用来加工处理来自服务器端的数据;另一方面,用来实现人机交互,通过客户端界面向服务器端发送控制命令。
图1 系统整体框架结构图
智能家居系统的硬件系统[5]主要包括S5PC100平台(以下简称A8)、11C14平台(以下简称 M0)和ZigBee模块3个部分。其中,S5PC100开发平台是基于三星公司Cortex-A8内核的S5PC100处理器设计而成的,支持多种格式的硬件编解码,如:MPEG-1/2/4、H.263/H.264等,该平台主要通过开发的系统软件实现对M0平台的控制。11C14平台基于LPC11C14微控制器 (ARM Cortex-M0内核),具有低功耗、低成本等优点。同时,该平台具有丰富的硬件资源,集成了传感器模块(包括三轴加速度传感器、光敏传感器、温度传感器、湿度传感器等)、RFID设备模块、ZigBee无线通信模块和OLED显示模块等。该平台主要用于模拟家庭中的信息采集和执行单元。ZigBee模块采用的是CEL公司的ZICM2410,带有USB转串口芯片,可以方便地连接PC机或其他带有USB主机接口的设备,实现组网通信。
(1)U-Boot移植
U-Boot的功能是把内核放到DRAM(Dynamic Random Access Memory)中运行。网上下载的U-Boot对开发平台只有通用性代码,不支持和识别特定开发平台上的一些硬件和功能。因此,需要添加对这些硬件的识别、初始化及其相应功能的实现[6]。
U-Boot的移植过程可以分为两个阶段,其中,第一阶段主要完成基本的硬件设备初始化,准备RAM(Random Access Memory,随机存储器)空间加载第二阶段代码,复制第二阶段代码到RAM中,设置堆栈指针SP,跳转到第二阶段代码的C入口点;第二阶段主要完成汇编语言跳转到main()入口函数,初始化本阶段将要使用的硬件设备,检测系统的内存映射,加载内核映像文件和根文件系统映像文件,设置内核启动参数和调用内核。
(2)Linux内核移植
Linux内核是一种源码开放的操作系统,采用模块化的设计。在此只保留了必需的功能模块,删除了冗余的功能模块,并对内核重新编译,从而使系统运行所需的硬件资源显著减少[7]。本设计中内核的移植主要包括:网卡驱动的添加、NAND Flash驱动的添加、添加对YAFFS2文件系统的支持、添加USB设备驱动、添加LCD设备驱动、添加SD卡设备驱动。
(3)根文件系统制作
如果没有根文件系统,其他的文件系统就不能进行加载。根文件系统包括Linux启动时所必须的目录和关键性文件,以及使其他文件系统得以挂载的必要文件。制作根文件系统主要包括:添加内核菜单选项、建立目录结构、添加命令程序、拷贝C库、编写系统启动文件、配置主机的NFS。
本系统是在A8、M0及PC等设备的基础上,基于互联网、物联网、传感器等技术并结合物联网新型概念[8]设计的,使用户能够对家庭内部情况进行实时地掌握和控制。本系统主要由前端数据中心(A8)、远程监控终端(M0)和服务器端(PC)组成。
首先,数据接收模块接收M0通过ZigBee传输上来的实时环境参数(如温度、湿度、光感数据等),并通过接收端的ZigBee经USB转串口操作,把采集到的环境参数发送给A8,由M0的接收请求线程从串口读取消息,并交给数据处理模块。数据处理模块解码接收到信息后,激活数据库线程以保存数据,激活内存数据刷新线程以更新实时环境信息,并对环境参数进行判断处理,决定是否进行报警。另外,在构建的嵌入式Web服务器上,用户可以通过网络,利用PC机对家居信息进行监控;通过Web页面上的控制按钮,监控设备可以识别出用户指令并进行相应的动作。系统各模块进程间关系如图2所示。
图2 系统各模块进程间关系图
该服务器主要用于将摄像头采集的视频或者图片显示到网页和LCD(Liquid Crystal Display,液晶显示器)上,这里采用 MJPG-streamer作为视频流服务器[9]。MJPG-streamer采用的是V4L2(Video 4Linux 2)接口,可以通过文件或者是HTTP的方式访问Linux UVC兼容摄像头。视频流服务器将摄像头捕获的图像存入global buffer缓冲区,当客户端有访问请求时,服务器便将global buffer缓冲区中的图像数据连续地发送给客户端。该程序中的server_pthread函数使用多线程技术,为每一个连接请求的客户端创建一个线程。该线程独立地与客户端进行通信,发送图像数据。
此外,MJPG-steamer还用来从网络摄像头采集图像,并将它们以流的形式通过基于IP的网络传输到浏览器的网页上。由于MJPG-steamer可以通过利用网络摄像机的硬件压缩功能来降低服务器CPU的开销,而无需为视频帧压缩浪费大量的资源,因此它为嵌入式设备和一些常规服务器提供了一个轻量级且较少CPU消耗的方案。MJPG-steamer功能强大,但为了符合本项目的需要,仍需对其进行修改,添加我们想要实现的功能。在本设计中,需要向MJPG-steamer视频流服务器的添加LCD输出插件,其代码如下:
该服务器主要负责为网页提供家电的实时状态信息,同时也为Android手机客户端提供服务,让Android手机客户端具有实时显示和远程控制家电的能力,其关系如图3所示。
图3 家电物联网服务器整体关系图
在网页上显示信息主要是通过.xml文件实现的。首先,网页通过BOA服务器,调用CGI(Common Gateway Interface,通用网关接口)程序控制网页线程,并发送命令给单板。然后,单板将采集到的数据发送给家电物联网服务器,服务器通过向.xml文件中写入采集到的数据,实现网页的实时信息动态显示。当网页客户端在浏览器中发送请求(如设置报警温度等)时,BOA服务器会调用CGI接口解码,区分提交过来的信息,然后把这个信息发送到单板,实现对单板的控制。Android手机客户端与家电物联网服务器的通信则主要是通过套接字进行的。
Android是一个专门为移动电话而设计的开放源码的操作系统[10],它将开辟新的应用,使家居智能化运用于普通家庭。Android客户端控制系统采用模块化的设计思想,主要包括应用层UI(User Interface,用户界面)、JNI(Java Native Interface,Java本地接口)、HAL(Hardware Abstraction Layer,硬件抽象层)和底层驱动等的设计。Android应用程序由一个或多个组件构成,组件包括activity、service等,每个组件在应用程序中完成不同的任务,可以被单独激活,也可以由其他应用程序激活,其具体流程如图4所示。
图4 应用层UI程序流程图
其中,HAL层包括LED灯、蜂鸣器和按键等设备,主要用于实现供JNI调用的接口。在函数实现中,HAL利用底层驱动提供的接口(即ioctl)来控制寄存器,实现对设备的控制操作。JNI层通过封装将Framework层调用的接口关联到JNI层,每个设备都有自己唯一的设备ID。应用层UI显示来自M0的模拟量,主要用于管理A8上各种设备的工作情况,可以实现LED控制、按键检测、蜂鸣器控制、A/D转换、温度传感器的数据读取和方向传感器模拟值的处理等功能,其控制程序客户端主界面如图5所示。图中,上侧为项目菜单栏,通过不同项目菜单下的信息和控制按钮,可以实现对家居设备的远程实时监控;中间部分是对不同设备的控制开关,通过这些开关可以实现对警报灯、电风扇和蜂鸣器等设备的控制,并可以根据需要对报警温度值进行设置;最后,通过对下侧不同测量点的选择,可以实现对不同位置房间的监控。
将设计的Android手机客户端软件安装后,经反复测试,手机可以通过无线网络实现对家居设备的控制。同时,也可以通过Internet远程监控网页实现对家居设备的控制。通过本系统,可以实现对家居设备的集中管理和控制,随时随地掌控家中的状态,得到家中的最新状况。
此控制系统采用当前较新的控制方式——远程监控网页和智能手机软件控制,与其他终端控制方式相比优势明显。同时,设计开发的手机软件具有通用性强、易于移植、市场应用价值高、易于推广等特点。本系统的设计不仅涵盖了Linux系统开发的软硬件技术,同时也包含了嵌入式产品设计的各种综合素质和多项技能,具有一定的实用价值。
图5 客户端主界面
[1] 王朝华,陈德艳,黄国宏,等.基于Android的智能家居系统的研究与实现[J].计算机技术与发展,2012,22(6):225-228.
[2] 顾牧君.智能家居设计与施工[M].上海:同济大学出版社,2004.
[3] 俞文俊,凌志浩.一种物联网智能家居系统的研究[J].自动化仪表,2011,32(8):56-59.
[4] 花铁森.智能家居系统核心技术探讨[J].智能建筑电气技术,2009,3(1):92-98.
[5] Wayne W.Computers as Components:Principles of Embedded Computing System Design[M].San Fransisco:Morgan Kaufmann,2001.
[6] 韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008.
[7] W Richard Stevens,Stephen A Rago.Advanced Programming in the UNIX Environment[M].2版.北京:人民邮电出版社,2006.
[8] 朱仲英.传感网与物联网的进展与趋势[J].微型电脑应用,2010,26(1):1-3.
[9] 李岗,糜元根.一种支持B/S模式的网络摄像机的实现[J].计算机工程与科学,2012,34(3):108-112.
[10] 杨丰盛.Android应用开发揭秘[M].北京:机械工业出版社,2010.