,
(1.成都理工大学 信息科学与技术学院,成都 610059;2.上海艾能电力工程有限公司)
智能家居不仅为人们提供了安全的、便利的、舒适的基础生活设施,而且还能保证人们的居住环境环保节能。但在国内,目前智能家居还只是处于技术推广阶段,并未实际应用于百姓的日常生活中,造成这种状况的原因有很多方面,比如软件操作复杂、人机交互性差、价格昂贵等。
Android系统于2007年11月5日由谷歌公司公布以来,其凭借开源、自由的优势,面世以后就受到了移动终端生产商的青睐。Android开发环境所需的开发工具包括Java SDK、Eclipse、Android SDK、Android ADT。其中,Android SDK是Android的专属软件开发包。百度语音SDK Android版(简称BDVRClient)是运行在Android 平台的一体化语音识别解决方案。百度语音合成客户端Android版SDK(简称BDTTSClient)是面向Android移动设备的语音合成解决方案。STC89C52是STC公司生产的一种低功耗、高性能CMOS 8位微控制器,具有8 KB在系统可编程Flash存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供了高灵活、超有效的解决方案。
本设计将采用BDVRClient和BDTTSClient方案。系统将人类语音发送至云端引擎进行处理,返回计算机可读的字符串输入,对字符串进行处理,采用TTS技术实现智能应答,结合蓝牙实现数据(指令)无线传输,使用嵌入式技术实现对家居系统的控制、定时等功能。
本设计包括主界面、蓝牙管理界面、指令管理界面三个界面,分别使用嵌套布局、相对布局、线性布局,使用的控件有Button、TextView、EditText、ListView、togglebutton等。界面设计如图1所示。
图1 界面设计
1.2.1 语音识别模块
(1) 权限声明
(2) 创建对话框
mDialog=new BaiduASRDigitalDialog(context,params);
(3) 设置回调
mRecognitionListener=newDialogRecognitionListener(){
publicvoidonResults(Bundle results){
ArrayList
if(rs!=null){ } } };
mDialog.setDialogRecognitionListener(mRecognitionListener);
(4) 调用mDialog.show()开始识别
BDVRClient在开始识别后,会启动录音、预处理、上传到服务器并获取识别结果。
1.2.2 语音合成模块
(1) 权限声明
(2) Tts初始化与授权等参数设置
speechSynthesizer = SpeechSynthesizer.getInstance();
speechSynthesizer.setContext(Context);
speechSynthesizer.setSpeechSynthesizerListener(SpeechSynthesizerListener);
AuthInfo authInfo = speechSynthesizer.auth(TtsMode);
speechSynthesizer.initTts(TtsMode);
(3) 参数设置
设置PARAM_VOLUME、PARAM_SPEED、PARAM_PITCH、PARAM_SPEAKER、PARAM_AUDIO_ENCODE、PARAM_AUDIO_RATE等参数。
(4) 授权验证接口
AuthInfo authInfo=speechSynthesizer.auth(TtsMode ttsMode);
(5) Tts初始化接口
int initTts(TtsMode ttsMode);
(6) 合成并播放
调用speak()即可实现合成并播放。
1.2.3 蓝牙模块
(1) 打开/关闭蓝牙
获得蓝牙适配器:
blueadapter=BluetoothAdapter.getDefaultAdapter();
调用blueadapter.enable()和blueadapter.disable()打开或者关闭蓝牙。
(2) 搜索蓝牙
调用diblueadapter.startDiscovery( )发送广播搜索蓝牙,在发送广播之前需要注册蓝牙搜索广播接收者、定义广播接收,当广播的事件是注册的事件时就会触发广播接收器,然后触发广播接收的onReceiver(),从Intent中获取设备对象:
BluetoothDevice device=intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
通过listview控件显示远端设备列表。
(3) 蓝牙配对
蓝牙首次配对之后,随后的通信连接就不必每次都要做确认。
(4) 建立connect线程完成连接并发送socket连接完成的广播事件
部分代码如下:
socket=this.device.createRfcommSocketToServiceRecord(this.myUID);
socket.connect();
Intent tent=new Intent(MainActivity.CONNECT_FINAL_ACTION);
MainActivity.this.sendBroadcast(tent);
(5) 指令发送
广播接收onReceiver()中,获得blueSocket对象:
blueSocket=MainActivity.this.connect_thread.getSocket();
通过blueSocket对象获取输出流:
tmpOut=blueSocket.getOutputStream();
通过调用tmpOut.write(bytes[])发送指令。
1.2.4 SQLite数据库模块
(1) 创建zhiling表
使用SQLiteOpenHelper抽象类创建一个ZHILING.db的数据库,然后在代码中执行db.execSQL(CREATE_ZHILING)创建一张zhiling表。
(2) 添加数据
获取SQLiteDatabase对象:
SQLiteDatabase db=dbHelper.getWritableDatabase();
然后使用ContentValues来对要添加的数据进行组装,最后调用db.insert()将数据添加到zhiling表中。
(3) 显示列表
通过SimpleCursorAdapter类与数据绑定,借助listview显示数据。
(4) 数据库查询
使用db.query()遍历数据库进行查询,获取单字节指令。
Toast可以反映当前控制端的变化,提醒用户当前应用的状态。Toast 提示的内容如下:蓝牙连接状态改变提示、查询指令成功提示和指令发送成功提示等。
下位机以单片机STC89C52为核心控制器,通过串口与HC-06蓝牙模块连接,接收来自上位机的指令;P1^7 I/O口与P3^2 I/O连接,可产生外部中断,用于LED照明系统的定时;P1^0、P1^1、P1^2 I/O口通过限流电阻与LED灯连接构成LED照明系统;与LCD1602显示模块的连接构成液晶显示电路;与红外发射管和相应的保护电路构成红外发射电路等;下位机硬件原理图(蓝牙模块、LCD1602液晶显示模块以相应的接口形式体现)如图2所示。
图2 下位机硬件原理图
下位机实物图如图3所示。
图3 下位机实物图
下位机软件的主要功能包括接收来自上位机的指令、对指令进行判断、或控制LED照明系统、或产生中断进行定时、或控制红外发射、或控制液晶显示。
对于中断服务程序,首先对指令进行判断,调用显示子程序,然后程序延时2分钟,熄灭对应的LED灯,中断返回。对于红外发送部分,采用定时方式0产生中断的方式产生载波,使用定时方式1延时的方式实现引导码、“1”、“0”的发送。
对于液晶显示部分,其操作时序为:
① 读状态:输入RS=L,RW=H,E=H;输出D0~D7=状态字。
② 写指令:输入RS=L,RW=L,D0~D7=指令码,E=高脉冲; 输出无。
③ 读数据:输入RS=H,RW=H,E=H;输出D0~D7=数据。
④ 写数据:输入RS=H,RW=L,D0~D7=数据,E=高脉冲;输出无。
下位机软件程序流程图如图4所示。
图4 下位机软件程序流程图
将smarthome.apk发送至Android手机进行安装,编辑指令列表,将xiaweiji.hex烧写至单片机,连接电路,接通电源,连接蓝牙,部分测试用例和测试记录见表1。
表1 部分测试用例和测试记录
[1] 张涛.基于Android的智能家居系统的设计与实现[D].合肥:安徽大学,2015.
[2] 韩迪,李建庆.Android实例详解项目实训开发[M].北京:北京邮电大学出版社,2016.
[3] 侯殿有.单片机C语言程序设计[M].北京:人民邮电出版社,2010.
[4] David Kammer.蓝牙应用开发指南近程互联解决方案[M].李静,等译.北京:科学出版社,2003.
[5] 王玉凤.基于红外、无线通信和语音识别的智能家电网络控制系统[D].长沙:长沙理工大学,2005.
[6] 北京百度网讯科技有限公司.百度语音识别SDK Android版开发手册[EB/OL].[2017-09].http://yuyin.baidu.com/docs/asr/166.
[7] 百度在线网络技术(北京)有限公司.百度语音合成SDK Android版开发手册[EB/OL].[2017-09].http://yuyin.baidu.com/docs/tts.
[8] 邓奕.Altium Designer原理图与PCB设计[M].武汉:华中科技大学出版社,2015.