I2S麥克風積木

ESP32的I2S界面,除了可播放音訊當做輸出之外,也可以把I2S界面當做輸入界面,例如麥克風。INMP441是常見的I2S界面麥克風,除了GND和VCC之外,它還有四個接腳,L/R、SCK、WS,以及SD,使用時,必須設定SCK、WS,以及SD的腳位。至於L/R則是聲道的選擇,如果讓這個腳位低電位,那麼這個麥克風便只使用了單聲道(左聲道),如果設定高電位,則是雙聲道,所以這個腳位可以自己視需要選擇接不或接這個腳位。這次為了INMP441所做的I2S積木,除了可錄音(WAV檔)之外,還可以將錄好的聲音上傳到微軟的Azure或是Google進行語音轉文字的辨識,並將辨識結果回傳,可依據回傳結果進行後續的程式運作。I2S麥克風積木位於「吉哥積木」→「ESP32」→「模組」→「I2S麥克風選單內。

用麥克風錄音並辨識文字

辨識語音成為文字,便可以利用辨識後的文字進行後續程式

買到的INMP441麥克風模組,總共六個針腳,需要自行焊接,除了GND和VCC之外,它還有四個接腳,L/R、SCK、WS,以及SD,使用時,必須設定SCK、WS,以及SD的腳位至於L/R則是聲道的選擇,可自行選擇要不要接上腳位。

除了自己焊接之外,如果想要省事一些,也可以購買高雄凱斯電子為了PocketCard所做的音訊擴展板,擴展板上已配置好MAX98357A的音訊輸出,以及數位音訊輸入麥克風(不是INMP441),microSD記憶卡模組,另外還內建了功率很棒的蜂鳴器,一個擴展板搞定所有的事。另外,陳志弘老師一年多前也設計了一個I2S-GO的擴展板,上面也包含MAX98357A的音訊輸出,INMP441的音訊輸入麥克風、microSD記憶卡模組、蜂鳴器、TFT彩色螢幕,也是一個很棒的擴展板。

PocketCard及音訊擴展板

I2S-GO音訊擴展板

一、使用PocketCard進行聲音的錄製並辨識

以下的範例,以PocketCard為例,PocketCard的麥克風腳位,SCK是2、WS是13、SD是15,而microSD記憶卡的模組,CS腳位是4、SCLK是18、MISO是19、MOSI是23,但在這裡只要使用「I2S麥克風 PocketCard音訊板初始化」積木,便可以設定所有的腳位了。

語音辨識是需要收費的,需要註冊並取得金鑰才能得到這個服務,我設計了兩個不同公司的語音辨識積木:

1.微軟的Azure:

Azure的免費額度比較高,每個月有五個小時的免費額度(相關價位請參考:https://azure.microsoft.com/zh-tw/pricing/details/cognitive-services/speech-services/),同樣的,要使用這個服務也必須去Azure註冊並申請金鑰,相關的註冊說明請參閱:https://docs.microsoft.com/zh-tw/azure/cognitive-services/speech-service/overview,比較要注意的是,申請時的服務區域請選擇「東亞EastAsia」,定價層選擇免費(F0)的定價層即可。極力推薦微軟Azure的服務

2.Google

Google的語音轉文字收費標準每個月有60分鐘語音長度的免費額度,超過免費額度之後,每15秒收費0.006美元(相關價位請參考:https://cloud.google.com/speech-to-text/pricing),因為要使用這項服務,必須去Google Cloud Platform(https://cloud.google.com/)去登記帳單資訊,並申請Speech ToText服務的API Key,在程式積木中必須設定這個API Key才可以進行語音辨識,相關的申請步驟可以參閱:http://nerdvittles.com/creating-an-api-key-for-google-speech-recognition/

以下的程式,按下PocketCard的A鍵,便會開始錄製3秒鐘的語音(時間可設定)儲存到記憶卡中,並開始上傳到Azure進行辨識,辨識時要設定API Key,以及要辨識成哪一種語言,辨識的結果是否要包含標點符號等資料。

程式結果:

按下A鍵開始錄音,錄音時間結束,便會直接上傳到Google辨識,辨識結果顯示在OLED上

自行外接麥克風及microSD記憶卡模組進行聲音的錄製並辨識

以下的例子,INMP441麥克風的SCK接到腳位25、WS接到33、SD接到26;microSD記憶卡模組是屬於SPI界面的裝置,預設的SPI接腳,SCLK接到18、MISO接到19、MOSI接到23、CS接到5,記憶卡模組如果是依照這個腳位來接的話,記憶卡模組便不需要做任何設定,但是如果記憶卡不是這麼接的話,便需要使用到「重設SPI」積木,重新設定SPI的腳位,以下的例子,microSD記憶卡模組SCLK接到17、MISO接到2、MOSI接到22、CS接到5。「開發板 重設SPI」積木位於「吉哥積木」→「開發板」→「設定」內。

三、自行外接麥克風進行聲音的錄製到SPIFFS並進行辨識

如果沒有microSD記憶卡模組,也可以選擇錄製聲音到ESP32內部的SPIFFS內,便可以進行聲音錄製及辨識,以下的例子,設定麥克風腳位即可,錄音及上傳時,請指定檔案來源為SPIFFS,便可以利用ESP32內部的檔案系統進行錄音及辨識,不過,SPIFFS是模擬的檔案系統,當使用愈來愈多次時,它的效率會愈來愈慢,這時要將它重新格式化後才能恢復原有的效率,有關重新格式化的部份,請參閱「SPIFFS積木」。

四、使用PocketCard,按下A鍵錄音五秒,按下B鍵播放錄製的聲音

要能把錄製的聲音回放,ESP32也必須連接一個I2S的DAC音訊裝置,以下以PocketCard為例,按下A鍵錄製聲音到SD記憶卡(沒有記憶卡,也可以選擇錄製到SPIFFS),按下B鍵則開始播放剛才錄製的聲音。相關I2S的DAC音訊裝置的使用,請參閱「I2S數位音頻轉換積木」。

、使用PocketCard,按下A鍵直接進行語音辨識

之前的例子進行麥克風語音辨識,都是先錄音存到SD或是SPIFFS後才上傳到Azure辨識,如果想要邊錄音邊上傳,就可以使用「I2S麥克風 直接傳送聲音(Azure)辨識成文字」這個積木,辨識速度會更快。