Android手机的智能家居语音控制系统设计

2018-01-15 06:18
单片机与嵌入式系统应用 2018年1期
关键词:下位调用蓝牙

(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技术实现智能应答,结合蓝牙实现数据(指令)无线传输,使用嵌入式技术实现对家居系统的控制、定时等功能。

1 上位机APP开发

1.1 界面设计

本设计包括主界面、蓝牙管理界面、指令管理界面三个界面,分别使用嵌套布局、相对布局、线性布局,使用的控件有Button、TextView、EditText、ListView、togglebutton等。界面设计如图1所示。

图1 界面设计

1.2 程序逻辑设计

1.2.1 语音识别模块

(1) 权限声明

(2) 创建对话框

mDialog=new BaiduASRDigitalDialog(context,params);

(3) 设置回调

mRecognitionListener=newDialogRecognitionListener(){

publicvoidonResults(Bundle results){

ArrayListrs=results !=null?results.getStringArrayList(RESULTS_RECOGNITION):null;

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()遍历数据库进行查询,获取单字节指令。

1.3 Toast提示

Toast可以反映当前控制端的变化,提醒用户当前应用的状态。Toast 提示的内容如下:蓝牙连接状态改变提示、查询指令成功提示和指令发送成功提示等。

2 下位机的设计

2.1 下位机硬件设计

下位机以单片机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 下位机实物图

2.2 下位机软件设计

下位机软件的主要功能包括接收来自上位机的指令、对指令进行判断、或控制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 下位机软件程序流程图

3 系统测试

将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.

猜你喜欢
下位调用蓝牙
蓝牙音箱的直线之美
核电项目物项调用管理的应用研究
发射机房监控系统之下位机
LabWindows/CVI下基于ActiveX技术的Excel调用
简单、易用,可玩性强Q AcousticsBT3蓝牙音箱
适合自己的才是最好的 德生(TECSUN) BT-50蓝牙耳机放大器
紧急:蓝牙指尖陀螺自燃!安全隐患频出
基于系统调用的恶意软件检测技术研究
景洪电厂监控系统下位机数据传输网络改造
围观党“下位”,吐槽帝“登基”