今日は、ESP32でI2Sのマイクモジュールを扱う方法について紹介。
前回はI2S出力マイクの紹介でしたが、今回はこのマイクで音声データを取得する具体的な方法を解説していきます。
I2Sって何?
規格の定義
Inter-IC Soundという音声に関する通信規格で、簡単に言うと音声をデジタルデータに変換してシリアル転送するものです。
https://ja.wikipedia.org/wiki/Inter-IC_Sound
I2は頭文字が I の単語が二つ並んでいるからで、読み方は「アイスクエアーエス」とか「アイツーエス」だったりします。
基本的には、以下の信号線3本でデータを転送します。
- LRCLK: ステレオでLRを切り替えるための信号
- SDATA: デジタル音声データのビット列
- BCLK: SDATAのタイミングを決めるクロック信号。シリアルクロックとも呼ぶ
利点
このI2Sですが、最大の利点はクリアで鮮明な音声データを扱える事です。
高音質な音声データ(いわゆるハイレゾなど)の入出力が、組み込み機器でも低価格で可能になります。アナログ出力のマイクでは、電源ラインのノイズやADCの分解能が音声データの品質にも影響を与えますが、I2Sではその心配がグッと下がります。また、省電力、ローコスト、配線の少なさといった利点もあります。
欠点
逆に、欠点は通信処理の複雑さです。
I2Sは先述の通り、音声をデータとクロックの信号線1本ずつでやり取りするため、信号のタイミングはクロック線で分かっても、順次送られてくるビット列を指定する音声の規格(サンプリング周波数、量子化ビット数など)に合わせて処理しないとキチンとした音声データを取得できません。
データの開始と終了、各ビット列データの格納などの処理を一から実装するのは意外と大変です。
http://flac.aki.gs/bony/?p=2996
ですが、ESP32ではI2Sを簡単に扱えるライブラリが提供されています。
ライブラリはArduino IDE(統合開発環境)でESP32用の開発環境をインストールすればデフォルトでついてくるため、特に他のライブラリをインストールする必要はありません。
開発準備
では、必要なソフトウェアを把握したところで、必要なハードウェアを確認します。
今回はESP32と開発環境を駆使してI2S出力の音声データを取得することがゴールです。
主な電子部品は以下の通りです。
- ESP32開発ボード(ESP32 devkitc)
- SPH0641LU4H使用 超音波対応マイクモジュールキット
- ADAU7002仕様ステレオPDMーI2S(TDM)コンバータ
なお、上記の他にブレッドボード、ジャンパーピン/ワイヤー、マイクロUSBケーブルが必要です。
電子回路、およびソフトウェアについては次回以降に解説します。
ESP32開発ボード
ESP32開発ボードとは文字通りESP32を組み込んだマイコンボードです。
入手先などや開発環境についてはこちらの記事をご覧ください。
マイクモジュール(PDM出力)
マイクは、とても小さい(1㎝四方くらい!)このモジュールを使います。音声データの転送形式はPDMですが、次に述べる電子部品でI2Sに変換します。
PDM-I2Sコンバータ
前述のとおり、これがPDMをI2S形式に変換するためのモジュールです。マイクと開発ボードの間に挟むだけで、ソフトウェア上の処理なしにI2Sの音声データへと変換してくれます。
マイクの代替品
ちなみに、マイクとPDM-I2Sコンバータについては、代替品として千石電商などで売られているSipeed社のI2Sマイクモジュールもあります。こちらのモジュールは直接I2Sで出力してくれるので、コンバータ不要でコストも安く抑えられます。
ただし、今回の開発では上記2つのマイクとコンバータを使用したので、このマイクモジュールで動作検証はしていません。
とにかく価格の安さにこだわるならば、AliExpressでの購入もアリです。
実装について
ずいぶん月日が経ってしまいましたが、実装を別記事にまとめました。