Analog Devices のI2SインタフェースのMEMS(Micro Electro Mechanical Systems – マイクロメカトロニクス) マイク ADMP441 から音声をESP32 に入力するプログラムをESP-IDFフレームワークで作成して試した。
「ESP-IDF のサンプルプログラム i2s_adc_dac を試す」で示したサンプルプログラムi2s_adc_dacを基に、i2s_mic_dac を作成し、試した。
i2s_adc_dacと同様に、リセットするとMEMS マイクからI2S でデータを読み込み、フラッシュメモリに書き込んで録音する。その後は、フラッシュメモリに書き込んだデータを再生し、その後に、あらかじめプログラムで用意されているデータを再生することを繰り返す。
ハードウェア
I2Sではステレオを伝送することができるが、今回は、左だけにマイクを接続するとした。
部品
- Espressif ESP32 開発ボード
- WeMos Lolin D32
- MEMS マイクロフォン (I2S)
- 秋月電子 ADMP441 DIPモジュール
- http://akizukidenshi.com/catalog/g/gK-06864/
- Analog Devices のページを参照すると、ADMP441 は廃盤とのこと
- 秋月電子 ADMP441 DIPモジュール
- スピーカ
- 基板取付用スピーカーユニット 8Ω0.08W UGSM23A
- http://akizukidenshi.com/catalog/g/gP-09797/
- とりあえず手持ちのもので。
- 基板取付用スピーカーユニット 8Ω0.08W UGSM23A
ブレッドボード図
実際の配線例
回路図
Fritzingファイル
espidf-i2s-mic-dac.fzz
パーツのFritzingデータ
WeMos Lolin D32
Wemos Lolin D32.fzpz
次のWeMos esp32 Lolinを基に修正を加えた。
WeMos esp32 Lolin
ADMP441 DIPモジュール
次のAnalog Devices AD8226を基に修正を加えた。
Analog Devices AD8226
- Friting の Analog Devices のビンに含まれているパーツ
テスト環境
- Windows 10
- PlatformIO IDE for VSCode
- バージョン: 1.28.2 (user setup)
コミット: 7f3ce96ff4729c91352ae6def877e59c561f4850
日付: 2018-10-17T00:23:51.859Z
Electron: 2.0.9
Chrome: 61.0.3163.100
Node.js: 8.9.3
V8: 6.1.534.41
Architecture: x64
- バージョン: 1.28.2 (user setup)
- フレームワーク
- Espressif 32 (Version 1.4.0)
ソフトウェア
次にあるサンプルプログラムを基にして修正を加えた。
https://github.com/espressif/esp-idf/tree/master/examples/peripherals/i2s_adc_dac
試した環境ではマイク入力の振幅が小さかったので、動作確認のために、マイク出力の24bit の最上位8ビットを利用するのではなく、最上位7ビットを捨てて、その下の8ビットを使うようにして試してみた。マイクに口を近づけてしゃべってみて録音した音が再生されることは確認した。
ADMP441からのデータ読み込み
ADMP441 の出力は 24ビットで出力されることはわかったが、プログラミングのための詳しい資料がみつからずフォーマットがはっきりしなかった。上位ビットから単純に取ると音がおかしい。データを見ると最上位バイトが 0x7f や 0x00 などになっており、最上位1ビットが常に0であった。
次のブログでは4バイトで読み込んだ際に最上位1ビットは捨てるようになっていた。
ESP8266とデジタルマイクADMP441を接続(Arduino SPIライブラリ版)
i2s_config_t の .bits_per_sample に 24 を指定してI2Sから読み込むと4バイト単位(32ビット単位)で読み込まれる。そのデータをバイトオーダーがリトルエンディアン(little endian)表現の整数とみなすと、最上位1ビットが無効で、その後の24ビットが有効なデータ(最下位7ビットは無効)になっている。
1 2 3 |
MSB LSB xooooooo oooooooo oooooooo oxxxxxxx x: 無効 o: 有効 |
プロジェクトファイル
使用したプロジェクトのファイルをGitHubの次のリポジトリに置いた。