本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

ESP32 で WebRadio

手元にあった ESP-WROOM-32 マイコンは mp3 を再生するパワーがあることがわかったので、手っ取り早く確認したかったので、WebRadio を再生するプログラムを動作させてみることにしました。

使用した開発ボードは、 ESP32-DevKitC というものですが、他のボードでも同様に動くと思います。スイッチサイエンスの ESPr Developer 32 も定番の開発ボードです。ESP32 マイコンがどのようなものかは、各所で説明されているのでここでは説明しません。

ESPr Developer 32
スイッチサイエンス(Switch Science)

準備

使用する 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 再生がランクインしているのも納得でした。

電子工作
すらりんをフォローする
すらりん日記

コメント

タイトルとURLをコピーしました