基于Android 客户端的智能家居App 设计

2019-11-05 11:15凌敏罗浩武邹阿金黄健明
现代计算机 2019年27期
关键词:家居客户端智能家居

凌敏,罗浩武,邹阿金,黄健明

(1.广东海洋大学电子与信息工程学院通信工程系,湛江524088;2.广东海洋大学电子与信息工程学院电子工程系,湛江524088)

0 引言

随着智能家居技术的逐步发展,家居智能化正在渐渐影响着人们的生活,各类智能家居设备可以给人们提供舒适、安全、方便的居住环境。移动互联的高速发展,使得人们随时随地都可以通过移动设备与他人联系。眼下正发展得如火如荼的5G 技术,凭借其速度快、网络容量大、时延低等优点,势必能彻底改变智能家居终端的部署与服务方式[1],从而使智能家居得到更进一步的推广。

为了顺应移动端技术的发展,便于在家中随时使用手机操控家居设备,本文设计了一款可与家中设备进行交互的、集众多传统遥控器功能于一身的手机App,同时还具备语音控制、远程监控等功能,使得用户只需要一款App,就可以实现对家中所有设备进行监测与控制。

1 系统总体设计

对于家居设备的监控管理,传统的遥控器虽然在一定程度上可以满足人们的需求,却有其局限性。例如:不同的家电需要配备不同的遥控器,导致了遥控器的冗余,管理困难;除此之外,传统遥控器所能控制的空间范围是有限的,人们通常无法在室外通过遥控器操控家中设备,也无从知晓设备的运行状况。

为了克服以上缺陷,本文提出一种解决方案,可集众多传统遥控器的功能于一体,方便用户操作,提升用户体验。

本系统的整体架构是配置云服务器作为中转站,硬件设备由支持TCP/IP 通信协议的ZigBee、Wi-Fi 和4G LTE 通信模块组成;智能家居App 则通过Socket 与云服务器连接。二者通过同时连接云服务器实现远程连接,从而进行通信和数据传输。系统总体架构如图1所示。

通过结合4G LTE 无线通信技术和ZigBee 无线通信技术,ZigBee 终端节点采集室内的温度、湿度、湿度、污染物的气体浓度、光照强度、当前天气状况等信息,将这些信息联网发送到云服务器中,云服务器再转发到App。

App 接收到数据后经过处理显示到界面上,用户打开App 即可远程获取室内的温度、湿度、烟雾浓度、光照强度等信息,同时能够远程改变室内各种家电的状态、切换室内情景模式。通过这款智能家居App,用户即使出门在外也能方便了解室内环境情况、改变室内家电状态。

图1 系统总体架构

2 系统功能设计

2.1 Android客户端开发环境

本Android 客户端的开发环境为Android Studio3.3,是谷歌公司在IntelliJ IDEA 的基础上,推出的一个Android 集成开发工具。开发语言为面向对象的编程语言Java,故必须安装支持Java 程序开发和运行的JDK(Java Development Kit),还需要有JRE(Java Runtime Environment)的支持[2]。数据库方面,选择了遵守ACID(即原子性、一致性、隔离性和持久性)的关系型数据库管理系统SQLite,由于其零配置、速度快、占用内存小、开源等优点,使得其成为许多嵌入式设备存储数据的第一选择[3]。

2.2 客户端功能模块设计

Android 客户端系统设计主要包括用户UI 设计、通信模块设计、数据库设计、语音控制模块设计四个模块。

2.3 客户端UI设计

(1)用户登录注册界面设计

登录注册布局文件均使用了RelativeLayout 作为整体布局,利用EditText 实现用户名和密码的输入框,利用Button 来触发注册和登录的具体操作。注册和登录界面如图2 所示。

图2 注册和登录界面

(2)用户主控界面设计

本系统的主控界面按功能可分为控制界面和监控界面。

监控界面如图3 所示,采用LinearLayout 作为整体布局,通过EditText 显示家居设备的运行状态及运行参数。

控制界面如图4 所示,采用LinearLayout 作为整体布局,通过GridLayout 实现网格布局,使用RecylerView来实现内容的滚动。用户可点击按钮,实现模式的切换和对家居设备的控制。

2.4 通信模块设计

通信模块基于TCP 协议和C/S 模型进行设计。TCP 协议全称为传输控制协议(Transmission Control Protocol),因为其具有面向字节流和连接的服务、可靠传输、全双工等特点[4],已经成为使用非常普遍的网络协议;C/S 模型即客户端(Client)和服务端(Server)模型,TCP 编程主要基于C/S 模型[4]。

智能家居App 的服务端创建一个服务程序,搭载在云服务器上,等待客户端连接。客户端根据IP 地址和端口与服务器建立连接后,对服务器的响应进行数据处理。

图3 监控界面

图4 控制界面

服务端实现步骤如下:

(1)实例化ServerSocket 对象,等待客户端连接;

(2)与客户端连接成功后,与之进行通信。

Android 客户端实现步骤如下:

(1)开启异步线程,通过IP、端口号与远程服务器连接;

(2)从Socket 对象中获取输入输出流从而进行数据的读写操作;

(3)基于数据,在异步线程中对UI 界面进行操作;

(4)读写行为结束,关闭输入输出流;

(5)关闭Socket。

服务端与客户端通信流程如图5 所示。

图5 服务端与客户端通信

2.5 数据库设计

SQLite 作为Android 操作系统体系结构的重要成员,对于所有Android 系统应用程序都可用。由于其可移植性好,Android 针对其封装了专属的API[5],例如SQLiteOpenHelper,通过该接口可以实现数据库、表的创建与升级。不管如何进行封装,本质上都是构建SQL 语句并且提交到SQLite 中执行,最终得到需求结果[3]。

为了可以灵活地操作和管理数据库,App 的数据库模块选择自定义一个继承自SQLiteOpenHelper 的数据库操作类DBHelper,在该类中实例化实际操作数据库的SQLiteDatabase 对象,重写继承的方法,并封装增删改查等一系列操作。

具体操作如下:

(1)创建数据库

定义全局变量SQLiteDatabase,在数据库操作类的构造函数中,使用sqLiteDatabase = dBHelper.getWritableDatabase()创建一个可读写操作的数据库。

(2)创建表

首先定义创建表的SQL 语句,在复用的onCreate(SQLiteDatabase sqLiteDatabase)中调用sqLiteDatabase.execSQL(sql)方法,将SQL 语句作为参数传入,从而创建所需要的表。

(3)升级数据库

当数据库中的字段或者表结构有所变化的时候,重写的onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion,int newVersion)方法会被调用,根据版本号升级数据库。

(4)添加数据

为了避免繁琐的操作,首先实例化一个可以存储键值对数据的ContentValues 对象;然后将要添加进数据库的数据封装在ContentValues 实例里;最后执行SQLiteDatabase 的insert 函数将数据插入对应的表中。也可以自定义添加数据的SQL 语句,使用sqLiteDatabase.execSQL(sql)进行添加。

(5)查询数据

使用sqLiteDatabase.query()遍历表进行查询。

(6)删除数据

调用SQLiteDatabase 的delete()方法;也可以自定义删除数据的SQL 语句,使用sqLiteDatabase.execSQL(sql)进行删除。

表1 和表2 分别是该系统的用户信息表和家居实时数据表。

表1 用户信息表

表2 家居实时数据表

2.6 语音控制模块设计

随着物联网的不断普及,通过语音实现智能家居控制已成为一种发展趋势,对于有老人和小孩的家庭来说,语音控制显得更加轻松高效。百度提供的语音识别功能强大,不但可以将录音转化为文字,还在线支持普通话、英文、粤语和四川话[6],适用于多种情况;对于识别出来的文字,可以进行分词及找出意图和词槽[6]。本App集成了百度语音识别的API,将用户的语音转化成计算机可读的字符串发送给硬件设备,硬件与App 客户端同时对用户的语音输入做出响应。

语音控制实现步骤如下:

(1)搭建开发环境

要使用百度官方提供的API,首先需要下载相应的jar 包和so 库文件,并部署到项目正确的位置下。

(2)权限设置

为了实现语音控制操作,需要在AndroidManifest.xml 文件中设置允许App 使用麦克风、录音、存储等权限。若Android 系统版本为6.0 以上,还需要在源文件中动态申请权限。

(3)初始化并配置语音解析器

初始化:

SpeechSynthesizer mSpeechSynthesizer =SpeechSynthesizer.getInstance();

注册自定义的监听器:

mSpeechSynthesizer.setSpeechSynthesizerListener(new MyListnener());

配置在语音开发者平台上注册应用得到的appId、apiKey 和secretKey:

mSpeechSynthesizer.setAppId(appId);

mSpeechSynthesizer.setApiKey(appKey,secretKey);

初始化tts:

mSpeechSynthesizer.initTts(TtsMode.MIX);

(4)初始化EventManager

EventManager eventManager = EventManagerFactory.create(getContext(),”asr”);

(5)初始化事件监听EventListener,在继承的onEvent 方法中做回调处理;

(6)注册自定义的监听事件

EventManager.registerListener(eventListener);

(7)发送事件

识别结束后,调用eventManager.send(SpeechConstant.ASR_STOP,null,null,0,0)停止识别。将识别出的字符串转换后发送给云服务器,云服务器再转发到硬件设备上,后者接收到指令后会做出对应的处理。

3 结语

随着物联网技术和5G 技术的不断发展,智能家居在未来势必会走进寻常百姓家,变得越来越平民化。本文开发的智能家居App 系统将软件客户端和硬件设备通过云服务器这座桥梁,实现了远程连接,从而可以对家居设备进行远程控制和监控,解决了市场上由于家居品牌不同、控制方式不同所带来的种种问题,实现了只需下载安装一款App,就可以与家中所有设备实现交互;配置的语音控制模块,使得交互方式变得更方便和友好。

猜你喜欢
家居客户端智能家居
你的手机安装了多少个客户端
“人民网+客户端”推出数据新闻
——稳就业、惠民生,“数”读十年成绩单
专题《面向智能家居的理论与实践创新》
打造日常家居“氛围感”
智能家居在室内设计中的应用研究
智能家居行业仍无“独角兽”
台北家居
智能家居未来感初体验
媒体客户端的发展策略与推广模式
新华社推出新版客户端 打造移动互联新闻旗舰