

1台目のインターネットラジオは、スピーカーが左右外向きになって付いています。そのため、音が拡散するのでBGM用としては最適なインターネットラジオとなっています。ほぼ一日中鳴らしていますが、まれに無音(曲名を取り損なう? 原因不明)になるときがありますが、まあ愛嬌と言うことでそのまま使っています。
それでもう少し音楽を聴くためのラジオにできないか、との思いで2台目を製作しました。やはり手軽に聴けるということで、小型でスピーカ一体のラジオです。
適当なケースがないかと探していたら、ヤフオクで使えそうなスピーカーBOXキットが出品されていました。左右にバスレフ方式のスピーカーBOXがあり、中央が空洞です。ここに電気回路を押し込めばインターネットラジオができあがります。材質は6mm厚のMDFで横幅は300mm。2~3インチのスピーカユニットが取付けられます。今回スピーカユニットは磁石がネオジムの2.5インチの物を使用しました。

(上から見たスピーカーBOXの内部)
スピーカーBOXの組み立ては初めてなので道具の持ち合わせがありありません。取り合えず100均で強めのゴム輪を買って固定してみましたが、やはりしっかりしたクランプが必要でした。出来上がりは、いかにも自作、という、いつものマアマアのできですね。色は艶消しブラックのスプレーで重ね塗装しました。フロントパネルはプリント基板です。
天板のスピーカーグリルは低域用のウーハーではなくタダの放熱穴です。最初は特に問題なく鳴っていましたが、長時間鳴らしているとWiFIが途切れて音切れが発生しました。何だろうと電気回路を外に出して原因を探していうちに問題なくなります。WiFiモジュールが結構熱くなっていたので放熱器を取付けたら問題なくなりました。密閉構造のため天板に放熱穴を空け、また熱が循環するように底板にも穴を空けています。この対策で中に入れてもWiFiの途切れはなくなりました。
1台目を使用していて、できれば仕様変更したい、と思っていたことがあります。インターネット放送は情報が良く変わります。実際1台目では受信できない放送局や、音が変と思ったらスクランブルが掛かっている放送局があります。この情報を変更するには、その都度ケースを分解して、マイコンに新たな情報に修正したプログラムを書き込まなければいけません。
なので、受信できる放送局は簡単に変更できる仕様にしたい、ということで、今回は放送局名とURLの情報はSDカードに書き込む方式にしました。
1台目のインターネットラジオは開発者の電気回路とプログラムをそのまま使わせて頂きましたが、SDカード追加となると変更が必要です。まずマイコンのSeed XIAO ESP32S3はポート全部を使用していて空きがありません。マイコンはESP32-S3-WROOMに変更します。このマイコンにはポート(GPIO)数が36もあります。最初は2個のSPI(SDカード用とTFT液晶用)、I2C(DAC用)、エンコーダ、スイッチを各配線がやりやすいように適当にポート割り付けをしました。これがコンパイルエラーを起こし、悪戦苦闘の始まりです。AIのGeminiは、エラーが出るごとに、そのポートは使わない方が良い、とかいろいろ言ってきます。このマイコンの一部ポートは、内部メモリーなどと共用になっているみたいで、使い方に制限があるようです。最終的にはSDカードとTFT液晶のSPIは共用で、各CSを制御する方式にしました。
SDカードには、放送局名とURLをテキスト形式で書き込んであります。電源入れたときにSDカードからテキストファイルを読み込み、マイコンの内蔵メモリーに書き込みます。

(SDカードに書き込んだ放送局の一部)
(内部の電気回路)
一番下のジャノ目基板にスイッチング電源があります。出力が3Wx2(E級アンプのPAM8403)なので結構小さな電源で間に合います。その上の緑色のプリント基板にマイコンとDAC基板が載せてあります。アナログアンプ基板はフロントのボリュームに付いています。PCM5120AのDAC基板モジュールとPAM8403のアナログ基板モジュールは中国製です。部品代よりも安く手に入ります。
一応完成し特に問題なく鳴っています。音はと言えば、やはり低域の不足感はありますが、1台目よりは帯域が広いように感じます。ただ、もともと音源はMP3なので、こんな物かと思って聴いています。

(フロントパネル、コミュニティFMを受信中、左下にSDカード)

(接続図、CR類は除いています)
カード型のリモコン送信機が手元にありましたので、リモコン操作ができるようにプログラムに追加しました。フロントパネルの液晶の右隣にある穴がIR受光部です。
操作できるのはチャンネルとボリュームです。+キーを押すと音量がUpします。ーキーを押すとDownします。チャンネルの変更は数値でダイレクトに指定できるようになりました。例えば、6chを選択するときは、0キーに続いて6キーを押します。1桁目のあと2秒以内に2桁目を指定します。2秒を過ぎると無効となります。また、登録されていないチャンネル番号を選択しても無効になります。リモコンではダイレクト指定が2桁なのでチャンネル数は99までとなりますが、実際はSDカードに100チャンネル以上書き込めば受信できます。左右の早送りキーを押すと、チャンネルが一つずつUp/Downします。
やはりリモコン操作ができるのは便利ですね。

SDカードには83局の放送局が書き込まれています。一つ一つ聴いてみたら、結構
音切れするチャンネルがありました。83chの内、9chで音切れしました。内訳はビットレートが192kのチャンネルが5チャンネル、128kのチャンネルが4チャンネル。192kでも音切れしないチャンネルは沢山あります。
この件は、オリジナルの開発者のコメント欄で話題になっていました。どうも送られてくるデータ量が細い(遅い)ので、いくらバッファーを増やしても対策にならないようです。試しにバッファーを増やしてみましたが症状は同じでした。流れてくるデータ量が少ないので当たり前です。
Geminiに聴いてもこれといった改善案はないようで、結局音切れする放送局は諦める、と言うことになります。チャンネル情報はSDカードに書き込まれていますので、音切れするチャンネルは削除しました。変更が楽なので助かります。

時計機能を追加しました。ラジオを聴かないときは置き時計となります。
AFアンプ基板には2連ボリュームの他に、絞り切るとカチッとクリックが入るスイッチがあります。ラジオなどで電源をON/OFFするスイッチ用かと思います。
今回はこのスイッチを利用して、音量ボリュームを絞り切ると時計機能が動作するようにしました。プログラムは、時刻情報を取得するためにNTPサーバーに接続するよう追加しました。
表示は、年月日、曜日、時分となります。時分は見やすいように大きいフォントで表示させています。最初は秒まで表示させていましたが、見ててうるさいのでコロンの点滅に変更しました。
時分のフォントを7セグ風にしてみました。
この機能を追加してメモリーがギリギリになりました。音切れという問題もありますが、このインターネットラジオの製作はこれで完成です。