齢寿天任せ

写真付きで日記や趣味を書くなら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 (不器用なおやじ)
2023-11-20 21:39:45
検索サイトを教えて頂きありがとうございます

探してみます

最終的に組み立て どんな箱に収めようかと
考え始めております

これで ラジコも聞けるといいなぁ~
とふと思いました
返信する
Unknown (asmnoak)
2023-11-19 23:13:03
ご同慶の至りです。ピンの故障は珍しいですね。残念ながら、jazzはあまり聴きませんので、以下で探索してみるのが良いと思います。
https://directory.shoutcast.com/
返信する
Unknown (不器用なおやじ)
2023-11-19 20:18:04
何の問題もなく 動作しております
本体のピンが故障してようです
貴重なお時間を頂き申し訳ありませんでした

ブレッドボード上ですが 選局、音量ボタンを取り付けて 適当なアンプを使い
秋月でついでに購入した
広帯域用スピーカーユニット 7.7cm(77mm) 8Ω 10W
価格 300円でした
値段の割にとてもいい仕事です

そのスピーカーで聞きながら 今
お礼のメッセージを書き込んでいます
感動しております

jazzでおすすめの局などありますか?

本当にありがとうございました
返信する
Unknown (不器用なおやじ)
2023-11-16 21:09:29
貴重なお時間を頂きまして本当にありがとうございます
感謝します

ESP32の故障も考えられるので
週末に 30ピンの esp32を購入して 再度挑戦してみます
併せて結果もご報告いたします
(多分あっさりと動作することを期待しつつ)
返信する
Unknown (asmnoak)
2023-11-16 18:32:53
ご確認、ありがとうございます。だいぶ状況が明らかになりました。まず、SSD1306は動作OKです。アドレスは0X3Cで合ってます。
したがって、問題は clock= 4, data= 17の接続が上手くいっているかどうかです。
原因として、1.接続不良、2.ESP32本体の不良、3.接続間違い、が考えられます。
これを確認するには、上記のプログラムを
U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 4, /* data=*/ 17, /* reset=*/ U8X8_PIN_NONE);
のままにしておいて、線の接続を4と17にして、「Internet Radio」が表示されるかどうか確認する必要があります。
表示されれば、本体(github)のプログラムでも動くはずです。表示されなければ、どこかでの接続不良か、あるいはESP32の不良が考えられます。
clock= 4, data= 17で試してみて、どうしても動作しないのであれば、これらのピンを変更することで対応できます。
21のピンは「 I2C スキャナ」の動作からSDAとして使えているようなので、/* data=*/ 21とします。線の接続も21にしてください。/* clock=*/ は、4のままでも動くかもしれませんが、ダメであれば、18、19を試してみてください。なお、22のピンは、DAC(PCM5102)で使っているので不可です。また本体のプログラムの50行目は、接続したピンに合わせて変更が必要です。
よろしくお願いいたします。
返信する
追伸です (不器用なおやじ)
2023-11-15 22:49:11
追伸です
本体のプログラムの50行目のピン設定を
変更
clock 22
data 21
に変更した所 internet radio を
表示したままになります
それ以外は、表示されません
返信する
Unknown (不器用なおやじ)
2023-11-15 21:55:09
お忙しいところ本当にありがとうございます
感謝しかありません

SSD1306のアドレスは 0X3C でした
プログラムですが 3行目のピン番号を変更した所 表示されました
変更前 U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 4, /* data=*/ 17, /* reset=*/ U8X8_PIN_NONE);
変更後 U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 22, /* data=*/ 21, /* reset=*/ U8X8_PIN_NONE);

変更点
clock=*/ 4→22に変更
data=*/ 17→21に変更
多分ピンの設定違うので出力されていない?

とりあえずのご報告です
返信する
Unknown (asmnoak)
2023-11-15 17:54:53
レスポンスは1日遅れになりますが、OKです。
まず、切り分けのために幾つかご確認をお願いいたします。
接続(VDD=3V3、GND=GND、SCK=4、SDA=17)は大丈夫でしょうか。次にSSD1306のI2Cアドレスは、0X3Cですか?0X3Dのものがあります。
アドレスを調べる方法は以下のサイトをご参照ください。
https://qiita.com/nanbuwks/items/c235f7f867f6139b6c8b
「ESP32 を使って I2C スキャナ」
アドレスが0X3Cであった場合は以下のスケッチを実行して「Internet Radio」と表示されるかご確認ください。
#include "Wire.h"
#include "U8g2lib.h"
U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 4, /* data=*/ 17, /* reset=*/ U8X8_PIN_NONE);
void setup() {
u8g2.begin();
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.drawStr(0,10,"Internet Radio");
u8g2.sendBuffer();
}
void loop() {
}
よろしくお願いいたします。
返信する
Unknown (不器用なおやじ)
2023-11-15 08:06:08
お忙しい所、教えて頂きありがとうございます
ありがとうございます

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

よくわからないので 修正を お願いします
返信する
Unknown (asmnoak)
2021-10-10 22:38:31
完成おめでとうございます!
力作ですね。素晴らしいです。
お役に立てて、嬉しいです。
返信する
Unknown (Bay3)
2021-10-10 09:15:53
完成しました!!
https://ameblo.jp/bay-3/entry-12702093806.html

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

コメントを投稿