【最後に追記があります】
ESP32-DevKitC(以下ESP32)を使って、インターネットラジオを作成する実験を行ってみて、結構使えることが分かったので、実用的なものを作成しようと思った。インターネットラジオ局のデータストリーム(MP3)を音声にデコードする部分はライブラリがそのまま利用できるので、インターネットラジオの操作機能を実現する部分(Arduinoのスケッチプログラム)を製作すれば良い。なお、ESP32とはWiFiで接続するために、WiFiのアクセスポイントが必要であり、そのSSDとパスワードは、Arduinoのスケッチ内に記述する必要がある。
目標機能は以下の通り。
・インターネットラジオ局を予め複数設定して置き、切り替えができる。
・音量の調整ができる。
・60分程度で省電力モード(スリープ)になるスリープ機能。
・表示機能を付ける。
さらに、これらを、ブラウザからも操作可能とする。また、新たなインターネットラジオ局を見つけた時に、それが実際に聴けるかどうか確認するため、一時的なURLを設定できる機能も実現することにした。
表示装置には、SD1306 128x64 OLED表示装置を利用した。ESP32にはI2C(アドレスは既定のまま)で接続する。AmazonやAliexpress(※1)で数百円で購入できる。表示される文字数の制限があるので、アーティスト名、曲名の表示は気休め程度である。日本語は表示できない(ブラウザには表示できた)。他に音量、インターネットラジオ局名も表示する。なお、ブラウザからアクセスした場合にも、同様な表示を行う。したがって、この表示装置自体は無くてもよいことになる(起動できたかどうか確認する時など少しだけ不便)。
※1Aliexpressには一般のクレジットカードではなく、プリペイドカード(記名式のもの。匿名のものは利用不可)を使うことを強く推奨。
上記の目標機能の操作は、タクトスイッチ(4個接続)を押して行う。ブラウザから操作する場合には、それぞれのボタンが表示されるので、クリックすればよい。したがって、タクトスイッチが無くても、パソコンやスマホから操作はできる(タクトスイッチは省略可)。結局、最小構成は、ESP32とI2SのDACがあればOKである。
インターネットラジオ局のURLは、shoutcast.com (”LISTEN”メニューをクリック)から、m3uファイルをダウンロード(※2)すると、その中に記述がある。ただし、キチンと再生されたらラッキーである。まず128Kbps、MP3のものを選択すること。データストリームに何かしら細工がしてあるものは残念ながら正しく再生できない(例えばradikoがそう)。また、chunk形式のものは音が途切れる。適切なインターネットラジオ局を見つけるのは、なかなか難しく、苦労が必要。折角、見つけたと思っても、URLが変わることがある。
※2ブラウザによってダウンロードアイコンをクリックしてもダウンロードできないことがある。例えばIEがそう。
実際に使ってみて、十分実用になると感じた。ただ、常時150Kbps程度の通信が必要なので、回線状況によっては、やはり音が途切れることがある。WiFi接続も不安定な場合(距離や競合、電子レンジの影響)は、音切れが生じる。
機能を拡張しながら、色々評価してみて、結局、ブレッドボードから、ユニバーサル基板に実装し直し、MAX4410のヘッドホンアンプを追加後、 写真のように、古いLANルータのケースに収めて実用にしている。電源は、スマホの充電アダプタ(5V)を流用し、古マウスのUSBケーブルで接続。音声出力はオーディオジャック経由でスピーカー(ステレオ)に接続している。さらに興味のある方、Arduinoのスケッチプログラムや操作方法などは、GitHubを参照頂きたく。
【追記】
・このインターネットラジオで2年以上楽しんできた、asia DREAM radioのURLがサーバーの更新で2023/5/5に変更されました。新しいURLは以下の通りです(スケッチプログラムの中に記述してあるURLの書き換えが必要)。
- J-Pop Sakura "http://cast1.torontocast.com:2170/stream"
- Japan Hits "http://cast1.torontocast.com:2120/stream"
- J-Pop Powerplay "http://kathy.torontocast.com:3560/stream"
新しいサーバーは音声が前より途切れがちな感じです。なお、asia DREAM radioサイトのWINAMPの設定ファイルをダウンロードすると拡張子plsのファイルの中にURLが記述されてます。
・Arduino IDEに追加するボードマネージャのesp 32 by Espressif SystemsにはVersionが、2.0.xと1.0.xがありますが、2.0.xでは音がでません。1.0.xを使ってください。1.0.6で動作を確認してます。
・MP3のデコードを行うライブラリは、更新され、かなり変わってます。最新のものを使うとコンパイルエラーになります。当時のライブラリはGitHubのスケッチプログラムの”src”フォルダに保管してあります。