齢寿天任せ

写真付きで日記や趣味を書くならgooブログ

ESP32-DevKitCによるインターネットラジオの製作

2021-03-05 14:28:01 | 電子工作

【最後に追記があります】

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”フォルダに保管してあります。

 


最新の画像もっと見る

19 コメント

コメント日が  古い順  |   新しい順
Unknown (Bay3)
2021-09-15 15:38:12
マイコンを使ったインターネットラジオが作りたくて、色々検索して、こちらにたどり着きました。
私のやりたかった事がすべて網羅されていて、とても参考になります。まるごとパクらせていただきます。
このような情報を公開していただいて、本当に感謝しかありません。
まだ完成はしていませんが、こちらのサイトを参考にして精進します。
ありがとうございました!!
返信する
Unknown (asmnoak)
2021-09-15 20:12:45
コメントありがとうございます。作り上げるために必要な情報は、全てネットから手に入ります。勉強も含めて楽しんでいただけると嬉しいです。
返信する
Unknown (Bay3)
2021-10-10 09:15:53
完成しました!!
https://ameblo.jp/bay-3/entry-12702093806.html

今後も使っていけるインターネットラジオ専用機が出来上がりました。
本当にありがとうございました!!
返信する
Unknown (asmnoak)
2021-10-10 22:38:31
完成おめでとうございます!
力作ですね。素晴らしいです。
お役に立てて、嬉しいです。
返信する
Unknown (satton)
2022-01-13 01:43:01
電子工作の好きな70代の爺さんです aruduino
214 行で ""audio.connecttohost(stations[cur_station]);""
のエラーが出ます 検証 なさったのしょうか

よくわからないので 修正を お願いします
返信する
Unknown (asmnoak)
2022-01-13 13:16:42
ご利用ありがとうございます。ご報告の内容だけでは判断のしようがないのですが、コンパイルは上手く行ったのでしょうか。その後の実行時のエラーでしょうか。手元の環境では問題ありませんし、他の方からも、動作OKのご報告を頂いております。
まずは、簡単な例で試されてはいかがでしょうか。例えば、exampleフォルダのI2Saudio.inoや以下のサイトが参考になります。
https://qiita.com/Geek493/items/6c0f466590ffc7c92d6f
返信する
ありがとうございます (不器用なおやじ)
2023-11-12 21:00:42
ネットラジオを作りたいと思い
こちらにお邪魔しました
 音が聞こえた瞬間 鳥肌が、、、
いい音です
自分は、DAC(PCM5102)で作りました
かっこいい箱に入れて完成させたいと思います
懇切、丁寧な解説ありがとうございます
また お邪魔させていただきます
返信する
Unknown (asmnoak)
2023-11-13 11:20:14
不器用なおやじさん。
コメントありがとうございます。
私も製作してから、ずっと使い続けています。
お楽しみください。
返信する
Unknown (不器用なおやじ)
2023-11-13 21:29:59
お忙しいところコメント頂きありがとうございます
嬉しいです
 一つ質問させてください
ESP-32と液晶SD1306の接続ですが
秋月電子にて購入しました
(ESP32-DevKitC-VE
通販コード M-15674)
D4,D17(TX2) PINが見つかりません
この場合どこに接続すればよろしいでしょうか?
お時間のある時にでもお答え頂くと
ありがたいです
返信する
Unknown (asmnoak)
2023-11-14 18:18:26
ESP32はピン配置が色々あって混乱しますよね。秋月電子さんの通販コードM-15674の写真と回路図から判断すると、それぞれ、4(USBコネクタ側から7番目)、17(同じく9番目)と表示されているピンだと思います。
ちなみに、ESP32には30ピンと38ピンがあって、38ピンは無駄に大きいので敬遠してます。
返信する

コメントを投稿