I2S麥克風分貝計

ESP32的I2S界面,除了可播放音訊當做輸出之外,也可以把I2S界面當做輸入界面,例如麥克風。INMP441是常見的I2S界面麥克風,除了GND和VCC之外,它還有四個接腳,L/R、SCK、WS,以及SD,使用時,必須設定SCK、WS,以及SD的腳位。至於L/R則是聲道的選擇,如果讓這個腳位低電位,那麼這個麥克風便只使用了單聲道(左聲道),如果設定高電位,則是雙聲道,所以這個腳位可以自己視需要選擇接不或接這個腳位。I2S的麥克風除了當做聲音的輸入裝置,可以進行語音錄製或是通話之外,透過一些數學的計算,還可以把I2S麥克風當成分貝計,量測環境音量,而且量測的單位是dBA,不是只那種只能量類比訊號的簡單的麥克風可以比擬的,於是便把I2S麥克風的量測分貝的功能做成了積木,I2S麥克風分貝計積木位於「吉哥積木」→「ESP32」→「模組」→「I2S麥克風分貝計」選單內要使用這個積木,吉哥積木至少需要更新到20220503的版本

這些積木使用到的演算法及函式,是使用Ivan Kostoski提供的方法,想要參閱的,請參考他的這一篇Hackaday上的文章,https://hackaday.io/project/166867-esp32-i2s-slm

I2S麥克風分貝計

範例一:以PocketCard為例

以下用PocketCard當做例子,在初始化區塊內使用「I2S分貝計 PocketCard音訊板初始化」便可以設定好腳位,按下A鍵便會開始偵測,可以設定多久量測一次,時間單位是秒,如果希望比一秒的時間還短,可以用小數設定。按下B鍵則停止偵測環境音量。可以使用「I2S分貝計 正在量測中?」來判斷是否在量測,才來顯示量測到的環境音量,單位是dBA。

ESP32有雙核心,分別是核心0和核心1,一般ESP32的程式都是在核心1運作,核心0是閒置的,因為量測環境音量還滿耗資源,如果你的程式很複雜,那麼便可以考慮把量測環境音量的工作讓它在核心0運作(積木的預設也是在核心0),核心1就可以專注地執行你原本在「重複執行」區塊中的程式。


程式結果:

範例二:自行設定腳位

如果想要自己設定腳位,在初始化區塊可以使用「I2S 分貝計 初始化 SCK...WS...SD」這個積木來設定腳位,這裡也可以選擇你使用的I2S麥克風的型號,如果都沒有列在上面,便選擇「未知」這個選項。