ESP32でI2Sを使ってみる

ESP32はWiFiやBluetoothが使える高機能なボードです。I2S(Inter-IC Sound)というサウンドをデジタル通信できる機能も持っていて、I2S対応のマイクモジュールやアンプモジュールを接続してArduino IDEで制御することができます。

OLYMPUS DIGITAL CAMERA

ESP32のプログラムガイド」や「ESP32のI2Sマイク研究」、「I2Sマイク、ESP32、Arduino、SPH0645LM4H」などの記事を参考にしながら試してみました。

結論から書くと、マイクからの入力をイヤフォンで聞くことができましたが、音質がどうこうというレベルにはなっていません。タイムラグをまったく感じないのは今後に期待できるかもしれません。

興味のある方への参考と、自分のための備忘録

ESP32は「 MH-ET LIVE MiniKit」を使用しました。マイクは「Sipeed 1マイクモジュール」2個、アンプは「GY-PCM5102」を使用しました。

ESP32のI2Sは2本あり、入力か出力どちらかを選択できます。今回はI2S_0をマイク入力、I2S_1をアンプ出力に使います。それぞれバッファメモリが使えますので、マイクの入力バッファからデータを読んで、32ビット符号付整数に変換して、処理(たんなる掛け算)して、バイト配列に戻してから、アンプ出力のバッファに書き込みます。delay()を入れずに繰り返して呼び出していますが、アンプ出力を見る限りではバッファがうまく丸く収めてくれているようです。

OLYMPUS DIGITAL CAMERA

マイクモジュールの配線
DA — IO18(1kΩでGNDに接続)
CK — IO23
LR — L:3.3V, R:GND
WS — IO19
V — 3.3V
G — GND

OLYMPUS DIGITAL CAMERA

アンプモジュールの配線
SCK — GND
BCK — IO16
DIN — IO21
LCK — IO17
GND — GND
VIN — 3.3V

OLYMPUS DIGITAL CAMERA