文献标识码: A
文章编号: 0258-7998(2014)01-0006-03
智能家居(Smart Home)是以物联网(Internet of Thing)为基础,融合计算机、通信、控制技术于一体的现代智慧家居解决方案[1]。随着人们对生活质量和家居安防要求的提高,智能家居系统在室内终端控制方式的基础上又增加了对远程监控的新要求。而嵌入式Web服务器是解决该问题的一种很好的方案。嵌入式Web服务器是指采用嵌入式Web技术,在嵌入式设备上移植的一个支持通用网关接口CGI(Common Gateway Interface)或服务器脚本语言(ASP、JSP、PHP等)功能的轻量级Web服务器。嵌入式Web服务器基于HTTP协议运作,具有标准的接口形式和通信协议,能够向用户提供基于浏览器的统一监控界面,从而将传统的嵌入式设备转变为以TCP/IP为底层通信协议和以Web技术为核心的远程监控设备[2]。嵌入式Web服务器的应用已成为嵌入式系统必然的发展趋势。
本文主要研究Android系统下的i-Jetty服务器在智能家居系统中的应用。Android是一种基于Linux内核的开源嵌入式操作系统,其开源特性和良好的UI系统相比于Windows CE和Linux系统具有一定的优势[3]。因此本文采用Android构建智能家居系统。系统将Android、i-Jetty和嵌入式数据库SQLite三者结合,并以远程控制室内照明、监控室内温度和门窗开关状态为例验证方案的可行性。
1 系统总体设计
系统由中央服务与控制器、控制模块、蓝牙模块、监控终端以及多种传感器和家电组成。中央服务与控制器具有家庭网关、服务器和控制器的功能,可提供自身触摸屏直接监控、互联网远程监控和蓝牙室内近程监控三种监控方式。控制模块与中央服务以及与控制器的蓝牙模块配对组网,通过蓝牙通信接收并执行控制指令,反馈状态信息。系统总体架构如图1所示。
2.1 中央服务与控制器
中央服务与控制器模块采用FriendlyARM公司生产的Mini6410开发板。Mini6410采用ARM11内核的S3C6410A处理器,主频为533 MHz,外设接口包括4个串口、28路GPIO口、1个SPI和I2C接口等。Mini6410支持Android 2.3,并具有以太网接入功能。
中央服务与控制器通过串口连接蓝牙主模块,并与蓝牙终端传感器、外设进行通信;通过i-Jetty服务器将采集的家居环境信息转换为动态网页进行发布,并为用户提供Web控制页面以实现家电的远程控制功能;通过SQLite将相关家居信息进行存储,为用户提供查看室内环境相关历史数据的功能。
2.2 蓝牙模块
蓝牙是一种支持设备短距离通信的无线电技术,具有自动同步、自动联网功能[4]。最新的低功耗蓝牙BT4.0的有效传输距离可达100 m,连接延迟时低于3 ms,这些特点使得蓝牙与智能家居系统的结合更具优势。
本系统采用广州汇承公司生产的蓝牙串口透传模块,分为主模块和从模块两种。主、从模块的硬件一致,协议栈不同。在连接配对过程中,主动发起搜索任务的为主模块。当连接完成后,主、从双方的通信为角色对等的点对点通信。Mini6410通过2个串口分别连接主模块和从模块,其中主模块用于与控制模块通信,从模块用于与手机、平板电脑等手持控制终端通信。蓝牙模块可通过AT命令进行配置。
2.3 控制模块
控制模块包括蓝牙从模块、微处理器和驱动或开关器件(如继电器),通过与中央服务与控制器的蓝牙主模块配对组网,接收并解析中央服务与控制器发来的指令,完成数据采集和设备控制的任务。本系统采用的微处理器为广州周立功公司生产的TinyM0开发板。温度传感器采用DS18B20,霍尔传感器为A04E,传感器及固态继电器与TinyM0的GPIO口连接。
3 软件平台设计
3.1 Android驱动加载及系统移植
Mini6410平台i-Jetty服务程序通过控制平台的串口实现蓝牙通信,因此需要移植Android系统并加载串口驱动。FriendlyARM公司提供了交叉编译工具链arm-linux-gcc、Android系统映像制作工具mktools、系统引导文件superboot以及SD卡烧写工具SD-Flasher,可以方便地实现系统移植。Mini6410平台Android系统移植及驱动加载的过程如下:(1)将编写的驱动文件拷贝到Linux内核的Drivers路径下,修改Makefile和Kconfig配置文件;(2)通过make命令编译Linux内核,生成内核映像;(3)修改Android文件系统中的init.rc文件,增加驱动对应设备的读写权限;(4)在上位机编写JNI程序,并通过Android NDK工具生成Linux平台下的.so文件;(4)将.so文件拷贝到系统库文件路径下,然后生成Android文件系统的映像;(5)将系统引导文件、Linux内核映像、Android文件系统映像烧写至Mini6410。
3.2 i-Jetty与SQLite
i-Jetty是Android系统下的轻量级Web服务器,它将开源Web服务器Jetty移植到Android平台,从而使Android设备可提供Web服务。i-Jetty是一个完全由Java实现的、开源的HTTP服务器和Servlet容器[5],其运行速度快,可以迅速为一些独立运行的Java应用提供网络和Web连接功能。i-Jetty是Google的开源项目,可以从Google官网下载APK安装包直接安装到Android系统上。
相比于常见的Linux平台下的boa、thttpd、mini_httpd、shttpd、lighttpd等嵌入式Web服务器,i-Jetty具有以下优点:(1)由于Android支持Java虚拟机,因此i-Jetty支持采用面向对象思想和多线程技术构建的功能强大的Web服务程序。(2)支持Servlet技术。Java Servlet是采用Java技术的CGI程序[6],相比于其他嵌入式Web服务器的传统CGI技术,Servlet能够更简洁、更高效地生成动态Web页面。
SQLite是一个针对嵌入式设备的轻量级数据库,是一个自包含、无服务器、零配置、事务性的SQL数据库引擎[7]。Android系统集成了SQLite,并提供SQLiteData-
base、Cursor和SQLiteOpenHelper 3个主要的类用于数据库操作。
3.3 通信协议
本系统设计有通信协议用于中央服务与控制器和控制模块间的通信,其格式如图4所示。
软件设计有服务器主线程、串口监听线程、服务子线程和数据保存线程。其中服务器主线程和串口监听线程的程序流程分别如图6和图7所示。
程序开发环境为Eclipse。在Eclipse中新建Android项目和动态Web项目,在Web项目中开发HTML、创建Servlet程序框架并配置web.xml;在Android项目开发中,首先将Web项目中的Servlet框架文件拷贝到源码文件夹下,然后进行控制逻辑的编码开发。Eclipse对Android项目Java文件自动编译,得到.class文件。在PC任意目录下构建Web工程的通用目录结构,将Android项目中编译后的类文件和Web项目中的HTML文件、web.xml文件以及i-Jetty服务器的JAR包拷贝至相应路径下,采用dx命令将工程编译为Android虚拟机识别的字节码文件,然后将整个工程拷贝至Mini6410平台i-Jetty服务器目录下的webapps文件夹下。
4 系统测试
将Mini6410接入互联网,运行Android系统,打开其上的i-Jetty服务器。在浏览器端输入服务网址,打开智能家居系统的登录页面,登录成功后进入主页面,主页面提供家居管理、系统管理和数据管理3项功能。家居管理用于监控室内环境和家居状态;系统管理用于配置系统,如增加监控家电等;数据管理用于查看家居信息历史数据。
进入“家居管理”栏目,可以查看室内温度、门窗开关情况,并可以控制照明灯。管理页面如图8所示。
本文提出了一种基于Android平台i-Jetty嵌入式Web服务器的智能家居系统方案。该方案以ARM开发平台Mini6410为核心,通过移植Android系统、加载串口驱动、安装i-Jetty服务器和SQLite数据库并利用蓝牙组网,实现对家居环境的远程监控。系统主要采用Java语言开发,具有架构简单、开发难度较低的特点,并采用面向对象思想和多线程技术开发复杂应用程序。后续工作将对智能家居系统中的家电蓝牙组网进行研究。
参考文献
[1] 毛明毅,蒋元恒,陈志成.智能家居远程Web管理控制平台的设计与实现[J].微电子学与计算机,2013,30(5):121-124.
[2] 刘志东,纪金水,杨锋英.嵌入式Web服务器技术探究[J].电脑知识与技术,2011,7(27):6612-6613.
[3] 梁坤.一种基于Android系统的键盘模块设计与实现[J].电子技术应用,2013,39(9):15-17.
[4] 王菊.智能家居系统架构、实现与蓝牙技术应用展望[J].电子世界,2012(6):15-16.
[5] 刘伟江,李振汉,唐余亮,等.基于Android的嵌入式Web服务器设计[J].电子设计工程,2013,21(9):4-6.
[6] 李亚娟.嵌入式Web技术应用研究[D].西安:西安电子科技大学,2008.
[7] SQLite.About SQLite[EB/OL].[2013-08-23].http://www.sqlite.org/about.html.