手元にあった ESP-WROOM-32 マイコンは mp3 を再生するパワーがあることがわかったので、手っ取り早く確認したかったので、WebRadio を再生するプログラムを動作させてみることにしました。
使用した開発ボードは、 ESP32-DevKitC というものですが、他のボードでも同様に動くと思います。スイッチサイエンスの ESPr Developer 32 も定番の開発ボードです。ESP32 マイコンがどのようなものかは、各所で説明されているのでここでは説明しません。
準備
使用する GitHub のプロジェクトは、 https://github.com/MrBuddyCasino/ESP32_MP3_Decoder です。
このプロジェクトでは、 Arduino 環境のものではなく、 ESP-IDF 環境を使う必要があるので、まずはその準備からとなります。
普段使いの環境が Windows10 64bit なので、そこで動作するように準備していきます。
ESP-IDF準備
ESPRESSIF のページの Get Started にある、 Standard Setup of Toolchain for Windows の内容を見ながら進めていくことになります。本ページの中で怪しい部分があったら、本家の方を見てください。
ツールチェインをダウンロードしてきます。執筆当時の環境ではバージョンは、 esp32_win32_msys2_environment_and_toolchain-20181001.zip というものでした。
これを適当なフォルダに展開するのですが、本家では “C:\” の下に置くようにして説明されています。自分はそれはちょっと・・・という感じだったので、 d:\ESP32Env というフォルダを作成して、この中に ESP-IDF 開発環境を納めることにしました。
ESP32Env フォルダの中に、ツールチェインを展開して、 ESP32Env/msys32 というようなフォルダ構成となるようにします。
そして、 mys32フォルダの中にある、 mingw32.exe を実行します。
この環境では既に git が使えるようになっているので、以下のようにして esp-idf を git で取得します。
$ cd /d/ESP32Env $ git clone --recursive https://github.com/espressif/esp-idf.git
この環境へパスを通す必要があるので、以下のようなテキストファイル(IDF_PATH.sh)を作成して、 ESP32Env/msys32/etc/profile.d フォルダの中に配置します。
ESP-IDF の場所を指定しているため、自分の環境に合わせてください。
export IDF_PATH="/d/ESP32Env/esp-idf"
この環境は次回 msys32 起動時から読み込まれるので、msys32 を終了して再度起動します。(msys32再起動せずに、上記のシェルスクリプトを実行しても可)。
アンプの準備
ESP-WROOM-32 で本プロジェクトで音を鳴らすのには、スピーカーはもちろんとして、 I2S 対応のアンプが必要になりました。
スイッチサイエンスより “MAX98357A搭載 I2S 3W D級アンプボード” を購入しました。
ESP32_MP3_Decoder準備
/d/ESP32Env の下にプロジェクトを clone してきます。
$ cd /d/ESP32Env $ git clone --recursive https://github.com/MrBuddyCasino/ESP32_MP3_Decoder
コンパイル
ESP32_MP3_Decoder プロジェクトをコンパイルする前に設定する項目があります。
これらの設定項目はテキストベースですが、メニューから設定可能です。以下のコマンドを実行します。
$ cd /d/ESP32Env/ESP32_MP3_Decoder $ make menuconfig
実行すると以下のような画面が出ると思います。
この画面で設定すべき内容は以下の項目です。
- Serial flasher config の中のデフォルトのポート
- WebRadio / Bluetooh Speaker 内の WiFi 設定
Windows 環境ではシリアルポートは COMn の形で指定するため、接続しているデバイスがどの番号かを確認して、 COM5 のように指定します。
また、 ネットワークにアクセスするために、 WiFi アクセスポイントの情報が必要になり、これを WebRadio / Wifi Configuration から設定します。
現状 Audio Output のほうは、I2S がデフォルト値になっていたので、そのままにします。
設定が終わったら、以下のコマンドでコンパイルを行います。
$ make
問題なくコンパイルが完了して、 ESP32-WROOM-32 に書き込むには以下のコマンドを実行します。
$ make flash
動作確認
フラッシュの書込が終わると、再起動されてマイコンは動作状態になっています。D級アンプとの接続を既に行っていれば数秒後に音が鳴り始めます。
ESP32-DevKitC と MAX98357A 搭載 D 級アンプの接続については、以下のようになります。
DevKitC | D 級アンプ |
---|---|
IO22 | Din |
IO25 | LRC |
IO26 | BCLK |
3v3 | Vin |
GND | GND |
SD と GAIN については未接続状態にしています。
この状態で L+R の音声データがスピーカーから出力されます。
感想
思いの外、順調に WebRadio が再生され驚きました。ESP32-DevKitC の DAC を使って、メモリ上においた wav ファイルを再生させた時には音量も小さかったので、 D 級アンプの効果をしっかりと確認できました。mp3 がマイコンでもソフトウェアデコード可能な時代になっていることに進化を感じました。
単に mp3 を再生する部品が必要なら、 DFPlayerMini あたりが、安くて制御もしやすくてよいですが、自分としてはソフトでデコードしている今回のタイプが魅力的に思いました。
どちらの方式でやるにせよ、部品数点と電源、スピーカーで配線が済んでしまい、あとはプログラムで再生・停止などが出来るという状況は、 電子工作入門の定番のネタに mp3 再生がランクインしているのも納得でした。