摘要:家电控制是智能家居系统的重要组成部分,而随着智能手机的普及和3G网络技术的快速发展,以智能手机作为智能家居远程控制的终端设备是一个非常理想的选择。目前在全球范围内,Android是一个市场占有率高,免费,开放的智能设备操作系统。因此,本系统以Android智能终端作为客户端,使用UDP网络传输协议,以实现家电远程控制系。
关键词:Android;家电控制;智能家居;UDP协议
在科学技术飞速发展的今天,人们的物质条件和生活水平都在不断地提高,人们对家居环境的要求也在不断地增长。家居不仅要舒适更加需要安全和便捷。远程家电控制,使人们可以随时随地控制家中设备,给人们带来便捷的生活方式。传统的智能家居系统中,大多基于Int ernet的远程控制,并采用PC做监控终端,受到Internet地域的限制,使用起来不是很方便。但随着智能手机的普及,由于手机体积小便于携带,智能手机作为智能家居的控制终端是大势所趋。
1 Android介绍
Android是Google公司在2007年11月正式推出的一款开源的操作系统。Android系统在它推出后仅仅两年的时间,就打败了称霸智能手机市场10年的诺基亚Symbian成为全球最受欢迎的手机操作系统。
1.1 Android的安全机制
Google为Android引进了以下特有的安全机制:应用程序权限机制,组件包装和数字签名。
(1)应用程序权限机制
Android把每个权限定义成一个字符串,开发过程中可以通过在XML Manifest文件中进行权限的声明和请求。权限定义分为两个类别,一类是应用程序在执行时所需要请求的权限,另一类是被其他组件请求的权限。
(2)组件包装
Android通过定义组件的“exported”属性来实现把组件包装在程序内容内。将“exported”属性设置为“false”就是拒绝被其他外部程序调用。
(3)数字签名
Android的所有应用程序必须有数字证书,这个数字证书是可以自签名的。
1.2 Android的系统框架
如图1所示Android的系统框架由4个部分组成:Linux内核层、系统运行库层、应用程序框架层和应用程序层。
(1)Linux内核层
Android的Linux内核层是基于Linux2.6的,它是介于硬件层和其他软件组的一个抽象层次。提供内存管理、安全性、进程管理、驱动模型、网络组等核心服务。
(2)系统运行库层
这一层分成两个部分,系统库和Android运行时库。
系统库是应用层框架库的支撑。它起到了纽带的作用。它主要负责2D和3D绘图、显示合成和支持多种常用的音频、视频格式录制和回放等功能。
Android运行时库又包括核心库和Dalvik虚拟机两部分。核心库提供了Java语言核心库内的大部分功能;Dalvik虚拟机是Android重新设计的一款虚拟机。Dalvik可以在消耗较少的资源情况下,使一台设备同时运行多个虚拟机程序。
(3)应用程序框架层
应用程序框架层为开发者提供开发所需的各种API,常用的组件有:UI组件、Content Providers(提供一种使应用程序之间可以实现数据互相访问和共享的服务)、资源管理(管理字体、图片、组件ID等)、活动管理(它管理了整个程序的生命周期)等。
(4)应用程序层
应用层是和用户交互的一个层次,用户可以看得见和操作的一些应用。Android本身提供了桌面,联系人,拨打电话,浏览器等很多基本的应用程序。开发人员可以使用应用框架提供的API编写自己的应用程序。
2 智能家居远程家电控制系统的组成
整个系统主要包括3个部分:远程控制终端(Android手机或者平板电脑),服务器和家电控制器。先由远程终端发送带有控制命令的数据包到服务器,当服务器收到控制指令之后,再由服务器发送控制命令到相应的家电控制器上。图2是远程家电控制系统的结构图。
在本文中,主要介绍控制终端的设计,下面简单地介绍一下服务器和家电控制终端。服务器收到命令数据时,通过设备类型和子设备号来识别是哪个设备的控制命令,然后将相应的控制命令发送到相应的控制器上。具体的帧格式定义,会在下一章节中讲解。对于家电控制器,分为两种。一种是简单控制电路的通断来控制电器的控制器,主要可控制灯光、冰箱、排风扇等家电,一种是模拟红外遥控器发出信号的控制器,主要可控制空调、电视机等使用红外遥控器的家电。我们有了家电控制器之后,就可以在不对家电做任何的改动的情况下,对家电进行控制。
3 终端程序设计
3.1 传输协议的选择
在智能家居中的应用原则中,TCP和UDP作为目前最常用到的网络通信协议,可以看出TCP是基于连接的协议,UDP是一个无连接的、不可靠的协议,相对于基于流传输的TCP而言,UDP是基于消息传输的,整体上具有传输速度快等优点。通过研究可以看出家用电器的控制信息特点是数据量小,控制信息短,适合用于传送少量数据、对可靠性要求不高的应用环境,因此更适合采用简单的、面向数据报的UDP协议。
3.2 应用层帧格式的定义
由于目前智能家居没有统一的标准,各个不同的系统都是自己定义各个设备的通信协议。表1是本系统家电控制系统应用层报文帧格式的定义。
(1)报头:固定为0x66、0xAD两字节,表示一个报文帧的开始。
(2)数据长度:从报头段0x开始算到命令数据段的最后一个字节总和。表示整个帧的字节数。
(3)路由地址:这个数据位是对路由进行选择。根据部署的网络不同的位置,选择链路质量最好的路由节点进行数据传输。
(4)设备类型:表示家居设备的种类,我们将家电控制系统固定为0xF4。
(5)子设备号:此字段为家电控制系统里的设备分配唯一的地址,这样我们可通过设备类型段和子设备号两个字段唯一标识某个家电设备,便于控制信息的准确有效送达到控制器。
(6)命令数据:装载具体的家电控制命令,告诉家电控制器收到数据之后需要对家用电器做哪些操作。
3.3 Socket套接宇
在网络层通过传输层进行数据通信时,常常会遇到多个应用程序提供并发服务的问题,为了区别不同的应用程序进程间的网络通信和连接,就需要使用socket套接字这个接口。对于使用不同的协议通信,TCP是使用socket对象来实现,而UDP是使用DatagramSocket对象来实现。由于我们远程家电控制系统使用的是UDP协议,在这里我只介绍DatagramSocket。
DatagramSocket是用于连接两个端点的分组投递服务,是由Android系统提供的一个公共类。根据编程人员所给的参数,它可以建立与任意可用端口或者与给定端口的连接。
这里我们需要了解的方法有close()、receive(Datagram Packet pack)和send(DatagramPaeket pack)。它们分别是关闭套接字、接收数据报和发送数据报。
从上文我们可以看到发送和接收数据报时,我们接收到的是一个DatagramPaeket对象。所以在这里必须得提到的就是用来存储数据报数据的final类DatagramPacket。DatagramPacket有多个构造方法,但是它的每个构造方法中一定包括byte[]buf和int lcnsth这两个参数。buf是用来存储所要传输的数据,length是表示传输的数据的长度。当然你在创建DatagramPaeket对象时,还可以指定接收端的IP地址和端口号。
发送数据报的代码为:
其中portNumber是指服务器的端口号,message是根据应用层帧格式得到的控制命令,serverAddr是指服务器的IP地址。
3.4 软件设计流程
图3是整个基于Android远程控制系统软件设计流程图。
为了方便地适用于不同的家电控制系统,我们将服务器的IP地址以一个由用户输入的方式来完成,这样当在一个新的地方安装整套系统时,在无需改变Android安装包的情况下,自己输入新的系统的服务器IP即可实现远程控制。
4 测试结果
本家电控制器在完成设计、调试后,在实际展厅进行控制实验表明该设计可以完成预定功能。在长期的实践和全面测试的过程中,证实本套系统可完成以下功能并且性能稳定。
(1)空调控制:空调开关,模式转换,扫风功能,调节风速;
(2)电视控制:电视遥控(开关、选台、音量调节、电视菜单),电视导航(包括各地省级市级电视台电视节目预告),电视游戏;
(3)灯光控制:各个房间灯光的开关;
(4)风扇控制:各个房间风扇的开关。
如图4所示,是手机控制界面图。从左到右依次是空调控制界面,电视控制界面,灯光和风扇控制界面。
5 小结
本文简要的介绍了基于Android的智能家居远程家电控制的终端设计和关键技术,包括Android的安全机制和内核分析,远程家电控制系统的组成,每个组成部分的功能,应用层帧格式的定义,传输协议的选用以及软件设计流程。并在最后展示了测试结果,证明了基于Android远程家电控制的可行性。与传统的基于Internet的远程家电控制系统相比,基于Android手机的控制系统有着巨大的优势和前景。