Android技术在物联网家居控制系统中的应用研究
2016-02-07宋坤伟
◆宋坤伟 杜 彬
(山西职业技术学院 山西 030006)
Android技术在物联网家居控制系统中的应用研究
◆宋坤伟 杜 彬
(山西职业技术学院 山西 030006)
随着网联网技术与移动终端技术的快速发展,两者的结合已成为未来发展的必然趋势。本文就基于物联网的智能家居控制系统在移动控制端的应用进行了梳理与研究,主要针对当下应用非常广泛的Android移动平台,在智能家居控制系统中网络端与移动客户端的通信机制、手势识别机制进行了研究与优化。在信息交互方面利用Socket机制实现了高效的双向通信;在手势识别方面采用矢量特征编码方式进行手势匹配与判断。
智能家居控制;Android;Socket机制;手势识别
0 前言
当前智能家居作为家庭物联网的典型应用,进入了越来越多的家庭中,智能家居实现的基础就是对不同功能与类型的家电进行集中控制。家具控制的主要功能就是用户在家庭内部的任意地点使用控制设备通过家庭无线网络实现对各种集成了嵌入式芯片的智能家电如:电视、冰箱、照明系统等进行远程开启、关闭与设置等操作。与过去的专用遥控设备相比,智能手机因其小巧的体积、友好便捷的操作模式与强大的处理能力在对各种智能家电的控制中具有显著的优势,已成为家居控制系统的主要用户终端。目前,在手机操作系统市场上Google公司的开源操作系统
Android占有76%的份额,在现有的各种智能家居控制系统中,对基于Android平台的移动终端设备的支持也成为系统的基础必备功能之一。
1 智能家居控制系统的体系结构
智能家居控制系统主要由手机控制端与服务端两部分构成,分别由多个模块构成。
图1 智能家居控制系统结构
1.1 手机控制端
基于Android开发平台实现并生成APP应用,主要功能是从服务端读取智能设备的基本信息、工作状态的数据并呈现给用户,以及对用户的操作指令进行解析并将结果发送至服务端用于控制智能设备。主要包含以下三个部分:
(1)家电控制模块:基于智能手机上的及速度传感器与陀螺仪等硬件设备,对用户的手势指令进行识别并将结果转换为控制命令发送给服务端,服务端进一步对命令进行解析以用于实现对智能家电设备的控制。
(2)入网设备配置模块:从服务端读取已接入网络中的智能家居设备信息并在用户手机上创建一个智能家居设备列表,供用户选择要控制的设备并发送操作命令和配置参数。
(3)交互模块:通过家庭Wi-Fi网络接入系统服务端,发送控制命令或读取设备的工作状态。
1.2 服务端
服务端的功能主要由三个子模块负责完成:
(1)Wi-Fi服务:为移动终端设备提供基于Wi-Fi网络的系统访问接口,用户使用手机在家庭内部的任何位置都能访问系统。
(2)命令解析:对用户通过手机端发送过来的指令数据包进行解析,读取用户指定的设备名称、操作命令、设置参数等数据并转发给命令处理模块。
(3)命令处理:根据用户的控制命令对其所指定的设备实现相应的功能,该模块的任务是对不同的家电设备发送相应的控制命令并由家电上的嵌入式芯片负责执行,该模块是系统的核心部分。
2 Android系统客户端与服务器端的通信机制
现下的移动终端设备主要是采用无线方式进行网络访问,因此Android系统早已将wifi模块集成在了客户端系统中,只要处在家庭内部的wifi覆盖范围内,即可移动终端设备与服务器端建立网络连接。具体的数据交互则通过Socket机制来实现,Socket机制遵循TCP/IP 协议,采用全双工通信方式可以很方便的实现移动终端与服务器端的数据同步实时交互,在很大程度上缓解了移动终端访问网络的延时问题,因此现有的很多基于移动终端的网络服务都应有了Socket机制。
Socket机制主要是通过两种套接字机制来实现网络数据的双向交互,一种叫数据报套接字,一种是TCP套接字。其中TC P套接字也称为流式套接字,利用TCP端口建立数据的双向交互通道,通信质量稳定、可靠,非常适于智能家居环境中的实时信息监控类的数据传输。
建立Socket流式套接字,需通过JavaScript脚本调用来实现,其中JavaScript脚本中的 InetAddress 类,用于实现目的IP地址的封装;getHostName()方法用于读取到本机ID;getHostAddress ()方法用于获取本地主机的IP地址。在Socket机制下实现Andr oid客户端与服务器端通信的过程如下:
(1)先由服务器端创建serversocket 对象,在新建立的sock et端口上进行监听;
(2)serversocket端口上侦听到事件请求,调用serversocket. accept()方法接收请求,并返回对应的socket对象;
(3)客户端创建socket 对象,与服务器端的serversocket对象相对应,绑定要连接的服务器IP地址和端口号;
(4)若与服务器连接成功,返回一个socket 对象,若连接失败,返回异常信息提示;
(5)数据流的输入与输出,移动客户端与服务器端建立连接后,当产生数据交换时,客户端将通过通过调用Socket 类中的g etInputStream()方法读取到输入数据流,通过调用Socket 类中的getOutputStream()方法发送输出数据流。
需要注意的是,由于在本系统中需要将Android 智能手机作为移动终端,通过wifi设备连接到家庭内部wifi,这涉及到对A ndroidManifest.xml 文件的权限设置,相应的权限配置核心语句示例如下:
连接到网络之后,即可利用Android 智能手机采用数据流输入输出方式与智能家居管理服务器进行数据交互。
3 Android移动终端的手势控制识别
手机端控制功能的实现主要是通过对用户的手势识别来产生相应的控制命令的,只有尽可能提高控制命令的准确性,才能对家电实现有效的管理控制。如何提高控制命令的准确性,这取决于智能手机的手势识别机制,移动终端上的手势识别主要依靠与手机内置的加速传感器和陀螺仪,手势识别的主要过程包括手势设计、动作执行、手势轨迹还原、手势匹配等步骤。手势的准确识别结合控制命令的有效发出,以及家具设备最终执行命令产生操作的结果就构成了完整的智能家居系统控制过程。如图2所示:
图2 手机端智能家居设备控制过程
鉴于移动终端设备的计算处理能力较弱等原因,本系统考虑采用计算较为简单的矢量特征编码方式进行手势识别匹配计算,具体实现过程包括以下几个步骤:
(1)对常用的几种手势进行特征编码,在对手势运动的起点到终点的方向进行矢量编码,坐标系每隔π/8标记一次角度,代表了16 个不同的方向。最终每一个手势都会由相应的特征编码与方向编码组成一个编码序列来表示。
(2)手势的每一组方向矢量编码的方法如下:
先获取手势每一组成部分的起点和终点,采集其坐标值,分别以(qx,qy)和(zx,zy)来表示;
计算手势每一组成部分斜率的方向绝对值IDirection;
(3)与用户操作手势对应矢量编码方法简述如下:
①获取该手势在手机屏幕上的起始和终止坐标点,分别设为(Sx,Sy)和(Ex,Ey);
②得出该手势绘制图案所形成的斜率绝对值Direction;
③基于以上获取的斜率值来确定该手势在第一象限的矢量编码VecCode,例如:0≤Direction<tan(π/16),则 VecCode=0;如果tan(π/16)≤Direction<tan(3π/16),则VecCode=1;以此类推;
④根据手势坐标值确定该手势的所在象限,若是第二象限,则VecCode=8-VecCode;若是第三象限,则VecCode=8+VecCode;若是第四象限,VecCode=(16-VecCode)%16;
⑤匹配过程完成,VecCode 就是笔画的矢量编码。
(4)将计算得出的手势编码序列与之前获取的手势编码序列进行排列比对,从而匹配出最相似的标准手势。
在Android系统中建立手势识别机制主要是借助Android开发平台中几个类来实现,一个是GestureRecognition类,用于……;SensorData作为内部类,用于获取手机终端的加速度传感器和陀螺仪采集到的数据;内部类TrajectoryReproduce经过对手势编码序列的匹配绘制还原出用户的手势轨迹;最后通过内部类GestureMatch中的方法调用产生相应的控制命令,并发送到指定的被控制设备。
4 结论
本文在物联网家居控制系统的开发应用中结合基于Android平台的移动终端对其进行控制和操作,对于Android移动控制终端与智能家居系统服务器端的构建模型、通信方式、手势控制识别等方面进行了设计与实现,为此类系统的开发提供了参考模型。
[1]陈俊亚.智能控制家居的设计与实现[D].山东大学,2015.
[2]林杰.基于Android的照明控制技术[J].计算机与数字工程,2014.