見出し画像

ESP32でBluetooth/AirPlayスピーカーを作る

この前、ちとNoteっぽくない事を書いてしまった(移動済み)ので、ちょっと口直しに別の事を書こうと思ったのですが、3Dプリンタは今、おやすみ中なので、最近ハマっていたESP32について少し。

はじめに

以前はやっていたラズパイ・オーディオ。僕もVolumioを持っていてメインに使っていました。しかし、この数年、海外のサイトを見てみると、どうもラズパイより小さいESP32で同じようなことをするのがはやっているようです。

ESP32は切手大のWIFI付CPUモジュールで、最近のIOTデバイス、例えばスマートプラグなどに使われている物です。この小さいESP32にストリーミング音楽サーバーのsqueezeliteを移植した squeezelite-esp32 が今回作った物です。

これは基本的にはLogitech Media Server という音楽ストリームを扱う物ですが、色々拡張されていて、現在ではBluetooth、AirPlay、Spotify Connectの接続もできるようになっています。今回私はBluetoothを少し試してみたぐらいで、ほとんどAirPlayで使っています。

ESP32には色々なヴァリエーションがありますが、Squeezelite-esp32ではちょっと大きめのRAMの容量が必要で、外部RAM(PSRAM)が4Mb以上なければいけないようです。たまたま手元に秋月電子のESP32-WROVER-Eピッチ変換キット (¥560)というものがあったのですが、それなら8MbのPSRAMが載っているので大丈夫そうです。


PCM5102Aモジュール

DACにVolumioと同じPCM5102Aを使用

その他にもDACも必要ですが、これはAliExpressで探した所、以前Volumioで使った、まあまあ音も良いと言われていた PCM5102A というDACの安いモジュールが、4〜500円ぐらいで手に入るので買ってみました。

このDACモジュール、ちょっと使う時に注意が必要で、買ってきたままだと使えません。前後にある5箇所のパッドをハンダでショートさせなければいけません。詳しくはこの Stack Overflow をみてもらえると分かると思います。簡単に言うと、表の1つはショート。裏の4つは、H3LだけH側にショートで、あとは全部L側です。(ちなみに回路図は、このmacsbug さんの記事に載っています)

そしてこのDACとESP32をI2Sで接続するのですが、これは適当なGPIOをDAC側の3入力に入れてあげます。RCK(ステレオ左右の選択)、DIN(データ)、BCK(クロック)の3つです。(SCK=システムクロックは表のパッドをショートさせたので必要ない)


もうこれだけで最低必要な配線は終わりです。(あっ、電源はESP32に3.3V、DACに5Vが必要です)

自分の場合には、これ以外に、アンプの電源も自動的にON/OFFしたかったので、別のGPIOからの線を手元にあったリレーのモジュールに繋げて、100V電源をON/OFFさせています。

ちなみに下の写真ではリレーではなく小さなディスプレイを繋いでいますが、これを付けると処理が遅くなるのか、音が時々途切れるようになったので外してしまいました。(もしかしたら設定を間違えた?かもしれない)

ブレッドボードでプロトタイプ中

ファームウエアのコンパイル(必要なかった)

ファームウエア、Squeezelite-esp32のコンパイルは正攻法で、このgitリポジトリをcloneしてきて、ESP32の開発環境ESP-IDFでコンパイルしています。(git のsubmoduleを使っているので、clone時に--recursiveを付けるのをお忘れなく)

で、パソコンにUSBシリアルケーブルを繋いで、ESP32をプログラムします。リポジトリ内に flash_cmd.txt と言うファイルがあって、そこにコマンドが書いてありました。

しかし!後からこんな面倒な事をしなくても、もっと簡単にできる事に気づいてしまいました。なんと squeezelite-esp32-installer と言うWebページから、直接USBシリアルを介してコンパイル済みのSqueezelite-esp32をESP32にプログラムできるそうです。つまりUSBシリアルに繋いだESP32さえあれば、ブラウザだけでファームウエアを流し込めるのです。(Web-Serialと言うブラウザの機能を使っているらしい)電子工作の世界も進化しているようですね。

ファームウエアが焼けたらもう立ち上げて大丈夫です。電源をいれると(よくあるWIFI-IOTデバイスのように)仮のWIFIネットを立ち上げるので、パソコンからそれに繋いで、ドキュメントに書いてある192.168.4.1にブラウザでアクセスします。すると近くのWIFIの一覧が出てくるので自分のWIFIに接続すればWIFI設定は終わりです。(割り振られたIPアドレスを控えておくのをお忘れなく。)

Squeezelite-esp32のWeb UI

もう一度リブートして自分のWIFIネットに繋がったら、またブラウザでアクセスします。ここで色々とSqueezelite-esp32の機能を設定できるのですが、DACとの接続GPIOの設定をしなければなりません。残念な事にこのDACとの接続は標準のページにはなく、NVS Editor(低レベル設定UI?)と言うページから設定しなければなりません。このページは最初は表示されておらず、Creditページから有効化します。

NVS Editorにはたくさんの項目がありますが、DACとのI2S接続は dac_config と言う設定をします。ちなみに私はこの設定をコンパイル時にしてしまったので、ここからしていないのですが、もしするならこんな感じになると思います。

"dac_config": "model=I2S,bck=5,ws=25,do=26"

  • bck : BCK(クロック)に繋いだGPIO番号

  • ws:RCK(ステレオ左右の選択)に繋いだGPIO番号

  • do:DIN(データ)に繋いだGPIO番号

ちなみに、アンプのON/OFFをするなら、以下のような設定をします。(GPIO26の場合)

"set_GPIO": "26=amp",

あとは、DACの出力をアンプ・スピーカーに繋ぐだけです。これで、BluetoothやAirplayで音を鳴らせるようになりました。

完成したSqueezelite-esp32

終わりに

いやはや、切手大のIOTモジュールでWIFIスピーカーができるなんて素晴らしいですね。部品代も全部で2000円弱くらいでラズパイよりも格安でした。音もVolumioの時と遜色なく綺麗に鳴っています。

もうこのぐらいの価格(量産したら原価 数百円?)なら、AirPlayのマルチスピーカー対応機能で左右のスピーカー1つずつにつけても良いぐらいです。なんなら部屋のすべてのスピーカーを全部WIFIで鳴らしても良いかもしれません。

一つ将来的にやってみたいのは、Squeezelite-esp32以外にもある別のESP32音楽ストリーム再生クライアントで、Snapcast client for ESP32 と言うものがあるようです。これはSnapcastと言うマルチスピーカー対応ストリームサーバーのESP32クライアントです。Airplayなどは対応していないようですが、SnapcastはすでにVolumioに入っているので、うちもで使えそうです。

それにこれ、実はESP32をDSPに見立ててフィルタを実現できるのですが、READMEによると Bi-amp と言う種類が書いてあります。音楽スピーカーには大抵、低音ウーハーと高音ツイーターの2つのスピーカー・ユニットが付いていますが、高級なスピーカーはこの2つを別回路・別アンプ(Bi-amp)に繋いで互いの影響を避ける設計なのですよね。それがESP32で簡単・安価に実現できるなんて素晴らしいじゃないでしょうか?

いいなと思ったら応援しよう!