ESP32のWiFi機能を使ってネットワークラジオを作る
PCM5102チップの入手
PCM5102というDACチップの再生音が良いとネット上での噂なので、ボード化されたモジュールをaliExpressで1つ入手しました。これを使ってどのような音出しができるのか調べてみると、SDカードに記録したMP3形式ファイルの再生や、ネットワークラジオのストリーム再生ができるようでした。手元に古いESP-WROOM-32のジャンク基板が眠っていましたので、これを生き返らせてWiFi接続機能を使ったネットワークラジオを作ってみました。ネットワークラジオの再生システムの構成は以下のページ1の情報やソースコードを参照させてもらいました。
PCM5102ボードについて
データシート2を参照すると、届いたPCM5102ボードでは、以下のように端子を利用し、ジャンパーを設定する必要がありました。
(1) 6ピンの端子
-
SCK:PCM5102のSystem clock input、外部クロックを供給する端子ですが、チップ内部のPLLで生成したクロックを使用するモード"System Clock PLL Mode"を使う場合には、単にGNDに接続しておけばよいようです。
-
BCK:PCM5102のAudio data bit clock input、I2SのBCK信号です。
-
DIN:PCM5102のAudio data input、I2SのDATA信号です。
-
LCK:PCM5102のAudio data word clock input、I2SのLRCK信号です。
-
GND:グランド。
-
VIN:電源、PCM5102ボードには定電圧レギュレータが載っており12Vまで供給可能。3.3Vでの供給でも問題なく動きました。
(2) 9ピンの端子・・・今回は使用しません。
(3) 3.5mmステレオジャック・・・ここからステレオアナログ信号を取り出しオーディオアンプに入れます。
(4) 基板裏のジャンパー(写真1の赤枠箇所)
-
H1L:PCM5102のFLT(Filter select)ピンの設定、L(Normal latency)側にハンダを盛ればよい。
-
H2L:PCM5102のDEMP (De-emphasis control for 44.1kHz sampling rate)ピンの設定、L(OFF)側にハンダを盛ればよい。
-
H3L:PCM5102のXSMT (Soft mute control)ピンの設定、H(soft un-mute)側にハンダを盛ればよい。
-
H4L:PCM5102のFMT (Audio format selection)ピンの設定、L(I2S)側にハンダを盛ればよい。
(5) 基板表のジャンパー(写真2の赤枠箇所)
PCM5102のSCKをGNDに接続するためのジャンパー。“System Clock PLL Mode"を使用するのでハンダを盛ってジャンパーすればよい。
ESP32の接続方法
4種類のWiFiネットワーク、8種類のステーションをブレッドボード上のジャンパーで選択できるようにしました。またOLEDによりステーション名とストリーム名が表示できるようにしました。
(1) PCM5102との接続
IO25(10番ピン)をDIN、IO26(11番ピン)をLCK、IO27(12番ピン)をBCKに接続します。
(2) OLEDとの接続
IO21(33番ピン)をSDA、IO22(36番ピン)をSCLに接続します。
(3) WiFiネットワークセレクタ
IO12(14番ピン)、IO32(8番ピン)による2bitのデジタル入力にジャンパーでHIGH、LOWを設定することで4通りのWiFiネットワークを選択できるようにします。
(4) ステーションセレクタ
IO2(24番ピン)、IO15(23番ピン)、IO4(26番ピン)による3bitのデジタル入力にジャンパーでHIGH、LOWを設定することで8通りのステーションを選択できるようにします。
ESP32ボードの外観(表、裏)を写真3、写真4に示します。
ブレッドボードでの組み立て
回路図を図1、ブレッドボード上の配線を写真5(各ボードの実装位置を緑枠、ボードのヘッダピンの挿入位置を赤枠で示す)、PCM5102ボード、OLED、ESP32ボードを搭載した様子を写真6に示します。電源は3.3Vを供給します。
スケッチ
ESP32に書き込むスケッチは、上記ページに掲載されているスケッチを参考に、OLEDに表示するためのコード、WiFiネットワークを選択するためのコード、ステーションを選択するためのコードを追加しました(スケッチ1)。なお、ArduinoIDEでのコンパイルにはESP32-audioI2Sというライブラリが必要ですが、githubからzipファイルでダウンロードしてインクルードします。
試聴とI2S信号の観測
WiFiネットワークの状態やステーションによって、うまく繋がらなかったり、音が途切れたりすることがありますが、うまく繋がれば、非常にクリアな音で再生しました。一方、ESP32とPCM5102の間のI2Sインタフェースではどのような信号が送られているのかPCM5102ボードのDIN、LCK、BCKの各端子をオシロスコープでモニタしてみました(波形1、波形2)。波形1はDINとBCK、波形2はDINとLCKです。このような無機質な波形からクリアな音楽が再生されるのは何とも不思議な感じがしました。