在學習地理和音樂的知識時,我的腦海里突然冒出一個想法:能不能制作這樣一塊地圖板,在說出其區域名稱后,該區域的LED燈立即閃爍,并播放該區域的代表民歌?在家人的支持下,我開始了有關語音交互和民歌播放地圖板的制作實踐。
一、構思設計
語音芯片使用LD3320 Board,開發平臺使用入門級的雙核開源平臺Fireduino IDE,存儲器用Micro SD Card(TF-Card)模塊,再加上一個音頻輸出模塊和小喇叭。結構如圖1所示。
軟件流程的構思如下:對著語音模塊說出一個省級地區的名稱,然后播放該地區的代表民歌,與此同時,地圖板上對應的省份區域內的LED燈開始閃爍。當使用者說出“暫停”后,停止播放當前歌曲并等待下次語音播放。
二、硬件設計
硬件設計中的主控板選擇了Fireduino 控制板。這塊控制板擁有雙核Cortex-M3處理器,集成高質量音頻Codec和Wi-Fi模組,具備良好的IOT擴展性能,能完美兼容Arduino IDE和Arduino標準接口,并支持FireBlock圖形化編程軟件。
一塊Fireduino控制板=2×Arduino UNO+Wi-Fi模塊+音頻模塊+RTC模塊+Flash模塊。
主芯片采用Rockchip雙核Cortex-M3主控芯片RKNanoD,它擁有超高的運行頻率,并且板載8M字節的大容量SPI Flash。
硬件設計中的語音識別部分采用LD3320 Board模塊。該模塊采用SPI通信方式,其芯片具有非特定人語音識別技術,不需要用戶進行錄音訓練,只需把識別的關鍵詞以字符串的形式傳送進芯片,即可在下次識別中生效。
比如,用戶在51等MCU的編程中簡單地通過設置芯片的寄存器,把諸如“你好”的識別關鍵詞的內容動態地傳入芯片,芯片就可以識別設定的關鍵詞語了。同時,可在用戶自由編輯的50條關鍵詞語中進行識別,終端用戶可根據場景需要,隨時編輯和更新這50條關鍵詞語的內容。
以上兩大模塊只需使用9根杜邦線連接,再將SPI控制線的3根線一一對應接上,SS芯片選擇線接9號引腳,IRQ外部中斷引腳接2號引腳,WR串并口選擇線接地選擇SPI方式控制即可。
三、軟件程序
以江蘇省為例。對著語音模塊說出“江蘇”,此時開始播放歌曲《茉莉花》,播放過程中說出“暫停”,暫停當前歌曲,再說出“繼續”,繼續播放歌曲,說出“停止”,終止播放當前歌曲。終止播放歌曲后,說出其他省份才開始播放當地代表歌曲。
1.偽指令
需要初始化的內容包括:串口、TF卡功能、Audio功能、LD3320模塊。
添加識別語句:如“江蘇”等各省份的名字。
死循環處理:如果說出“程序開始”,那么跳出死循環,否則繼續等待。
2.主程序
判斷選擇(識別語句)→判斷省份→播放民歌并驅動閃爍顯示→若暫停,停止解碼→若繼續,恢復解碼→播放結束退出循環。
Fireduino關于Audio的例程中有針對查詢解碼的例程,且暫停、恢復、停止的解碼都有相關的函數,只需按照偽程序的思路編寫就可以完成。
四、調試過程
Fireduino控制板與電腦的USB連接,根據官方維基百科的提示來安裝驅動,上位機Arduino IDE選擇端口后下載Blink例程,可以看到板上的LED燈開始閃爍,說明程序下載正確。再插上TF卡和小喇叭,根據官方的播放音樂驅動進行循環播放。
1.調試TF卡和小喇叭
先在TF卡中下載一個名為test.mp3的音頻文件,然后模仿官網例程操作。
以上程序的說明為:
(1)初始化串口,以便后續打印調試信息。
(2)初始化TF卡,后續需從TF卡讀取音樂文件用于解碼。
(3)初始化Audio,并且采用AUDIO_SD 方式。
(4)如果初始化Audio 成功,播放MP3文件。
短暫調試過后,如果聽到聲音,說明TF卡和小喇叭已調試成功,然后開始調試LD3320芯片模塊。
2.使用Arduino UNO板對LD3320進行開發
接好線后,下載語音模塊的官方例程,再接一個LED燈在8號腳上,編譯程序并下載好后,對著模塊說出“開燈”,LED燈點亮,說明例程沒有問題。說出“關燈”,LED燈熄滅。
在Arduino UNO調試成功后,再將LD3320與Fireduino連接并調試。
3.再次調試
在詳細檢查官方的驅動文件后,發現官方的Arduino驅動采用模擬SPI的方式進行,且函數名字也相同,與Fireduino的SPI函數有沖突。為解決這個問題,將LD3320.h和LD3320.cpp的驅動文件中關于SPI部分的文件采用硬件SPI的方式后,才將程序燒錄進去。之后多次調試還是沒有成功。
經過反復實驗后發現,Fireduino是ARM內核,且運算頻率高達200MHz,delay()函數過于短暫,LD3320對不上Fireduino的SPI握手協議。為解決這個問題,需增加驅動中需要延時的地方的時長,并反復調試直至成功。
至此,Fireduino的TF、Audio與LD3320全部調試成功。