,
(1.成都理工大學 信息科學與技術學院,成都 610059;2.上海艾能電力工程有限公司)
智能家居不僅為人們提供了安全的、便利的、舒適的基礎生活設施,而且還能保證人們的居住環(huán)境環(huán)保節(jié)能。但在國內,目前智能家居還只是處于技術推廣階段,并未實際應用于百姓的日常生活中,造成這種狀況的原因有很多方面,比如軟件操作復雜、人機交互性差、價格昂貴等。
Android系統(tǒng)于2007年11月5日由谷歌公司公布以來,其憑借開源、自由的優(yōu)勢,面世以后就受到了移動終端生產商的青睞。Android開發(fā)環(huán)境所需的開發(fā)工具包括Java SDK、Eclipse、Android SDK、Android ADT。其中,Android SDK是Android的專屬軟件開發(fā)包。百度語音SDK Android版(簡稱BDVRClient)是運行在Android 平臺的一體化語音識別解決方案。百度語音合成客戶端Android版SDK(簡稱BDTTSClient)是面向Android移動設備的語音合成解決方案。STC89C52是STC公司生產的一種低功耗、高性能CMOS 8位微控制器,具有8 KB在系統(tǒng)可編程Flash存儲器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應用系統(tǒng)提供了高靈活、超有效的解決方案。
本設計將采用BDVRClient和BDTTSClient方案。系統(tǒng)將人類語音發(fā)送至云端引擎進行處理,返回計算機可讀的字符串輸入,對字符串進行處理,采用TTS技術實現(xiàn)智能應答,結合藍牙實現(xiàn)數(shù)據(指令)無線傳輸,使用嵌入式技術實現(xiàn)對家居系統(tǒng)的控制、定時等功能。
本設計包括主界面、藍牙管理界面、指令管理界面三個界面,分別使用嵌套布局、相對布局、線性布局,使用的控件有Button、TextView、EditText、ListView、togglebutton等。界面設計如圖1所示。
圖1 界面設計
1.2.1 語音識別模塊
(1) 權限聲明
(2) 創(chuàng)建對話框
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初始化與授權等參數(shù)設置
speechSynthesizer = SpeechSynthesizer.getInstance();
speechSynthesizer.setContext(Context);
speechSynthesizer.setSpeechSynthesizerListener(SpeechSynthesizerListener);
AuthInfo authInfo = speechSynthesizer.auth(TtsMode);
speechSynthesizer.initTts(TtsMode);
(3) 參數(shù)設置
設置PARAM_VOLUME、PARAM_SPEED、PARAM_PITCH、PARAM_SPEAKER、PARAM_AUDIO_ENCODE、PARAM_AUDIO_RATE等參數(shù)。
(4) 授權驗證接口
AuthInfo authInfo=speechSynthesizer.auth(TtsMode ttsMode);
(5) Tts初始化接口
int initTts(TtsMode ttsMode);
(6) 合成并播放
調用speak()即可實現(xiàn)合成并播放。
1.2.3 藍牙模塊
(1) 打開/關閉藍牙
獲得藍牙適配器:
blueadapter=BluetoothAdapter.getDefaultAdapter();
調用blueadapter.enable()和blueadapter.disable()打開或者關閉藍牙。
(2) 搜索藍牙
調用diblueadapter.startDiscovery( )發(fā)送廣播搜索藍牙,在發(fā)送廣播之前需要注冊藍牙搜索廣播接收者、定義廣播接收,當廣播的事件是注冊的事件時就會觸發(fā)廣播接收器,然后觸發(fā)廣播接收的onReceiver(),從Intent中獲取設備對象:
BluetoothDevice device=intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
通過listview控件顯示遠端設備列表。
(3) 藍牙配對
藍牙首次配對之后,隨后的通信連接就不必每次都要做確認。
(4) 建立connect線程完成連接并發(fā)送socket連接完成的廣播事件
部分代碼如下:
socket=this.device.createRfcommSocketToServiceRecord(this.myUID);
socket.connect();
Intent tent=new Intent(MainActivity.CONNECT_FINAL_ACTION);
MainActivity.this.sendBroadcast(tent);
(5) 指令發(fā)送
廣播接收onReceiver()中,獲得blueSocket對象:
blueSocket=MainActivity.this.connect_thread.getSocket();
通過blueSocket對象獲取輸出流:
tmpOut=blueSocket.getOutputStream();
通過調用tmpOut.write(bytes[])發(fā)送指令。
1.2.4 SQLite數(shù)據庫模塊
(1) 創(chuàng)建zhiling表
使用SQLiteOpenHelper抽象類創(chuàng)建一個ZHILING.db的數(shù)據庫,然后在代碼中執(zhí)行db.execSQL(CREATE_ZHILING)創(chuàng)建一張zhiling表。
(2) 添加數(shù)據
獲取SQLiteDatabase對象:
SQLiteDatabase db=dbHelper.getWritableDatabase();
然后使用ContentValues來對要添加的數(shù)據進行組裝,最后調用db.insert()將數(shù)據添加到zhiling表中。
(3) 顯示列表
通過SimpleCursorAdapter類與數(shù)據綁定,借助listview顯示數(shù)據。
(4) 數(shù)據庫查詢
使用db.query()遍歷數(shù)據庫進行查詢,獲取單字節(jié)指令。
Toast可以反映當前控制端的變化,提醒用戶當前應用的狀態(tài)。Toast 提示的內容如下:藍牙連接狀態(tài)改變提示、查詢指令成功提示和指令發(fā)送成功提示等。
下位機以單片機STC89C52為核心控制器,通過串口與HC-06藍牙模塊連接,接收來自上位機的指令;P1^7 I/O口與P3^2 I/O連接,可產生外部中斷,用于LED照明系統(tǒng)的定時;P1^0、P1^1、P1^2 I/O口通過限流電阻與LED燈連接構成LED照明系統(tǒng);與LCD1602顯示模塊的連接構成液晶顯示電路;與紅外發(fā)射管和相應的保護電路構成紅外發(fā)射電路等;下位機硬件原理圖(藍牙模塊、LCD1602液晶顯示模塊以相應的接口形式體現(xiàn))如圖2所示。
圖2 下位機硬件原理圖
下位機實物圖如圖3所示。
圖3 下位機實物圖
下位機軟件的主要功能包括接收來自上位機的指令、對指令進行判斷、或控制LED照明系統(tǒng)、或產生中斷進行定時、或控制紅外發(fā)射、或控制液晶顯示。
對于中斷服務程序,首先對指令進行判斷,調用顯示子程序,然后程序延時2分鐘,熄滅對應的LED燈,中斷返回。對于紅外發(fā)送部分,采用定時方式0產生中斷的方式產生載波,使用定時方式1延時的方式實現(xiàn)引導碼、“1”、“0”的發(fā)送。
對于液晶顯示部分,其操作時序為:
① 讀狀態(tài):輸入RS=L,RW=H,E=H;輸出D0~D7=狀態(tài)字。
② 寫指令:輸入RS=L,RW=L,D0~D7=指令碼,E=高脈沖; 輸出無。
③ 讀數(shù)據:輸入RS=H,RW=H,E=H;輸出D0~D7=數(shù)據。
④ 寫數(shù)據:輸入RS=H,RW=L,D0~D7=數(shù)據,E=高脈沖;輸出無。
下位機軟件程序流程圖如圖4所示。
圖4 下位機軟件程序流程圖
將smarthome.apk發(fā)送至Android手機進行安裝,編輯指令列表,將xiaweiji.hex燒寫至單片機,連接電路,接通電源,連接藍牙,部分測試用例和測試記錄見表1。
表1 部分測試用例和測試記錄
[1] 張濤.基于Android的智能家居系統(tǒng)的設計與實現(xiàn)[D].合肥:安徽大學,2015.
[2] 韓迪,李建慶.Android實例詳解項目實訓開發(fā)[M].北京:北京郵電大學出版社,2016.
[3] 侯殿有.單片機C語言程序設計[M].北京:人民郵電出版社,2010.
[4] David Kammer.藍牙應用開發(fā)指南近程互聯(lián)解決方案[M].李靜,等譯.北京:科學出版社,2003.
[5] 王玉鳳.基于紅外、無線通信和語音識別的智能家電網絡控制系統(tǒng)[D].長沙:長沙理工大學,2005.
[6] 北京百度網訊科技有限公司.百度語音識別SDK Android版開發(fā)手冊[EB/OL].[2017-09].http://yuyin.baidu.com/docs/asr/166.
[7] 百度在線網絡技術(北京)有限公司.百度語音合成SDK Android版開發(fā)手冊[EB/OL].[2017-09].http://yuyin.baidu.com/docs/tts.
[8] 鄧奕.Altium Designer原理圖與PCB設計[M].武漢:華中科技大學出版社,2015.