Bluetoothオーディオレシーバーを作る ( ESP32 + PCM5102A )



「Bluetoothを搭載したマイコンである ESP32」と「PCM5102Aを使用したオーディオDACモジュール」を組み合わせ、Bluetooth送信可能なデバイスで再生したオーディオを聴くことができる「Bluetoothオーディオレシーバー」を作成する方法に関するメモを書きとめています。

「Bluetoothオーディオレシーバー」を使用すると、オーディオを再生するデバイス(※1)と、ケーブル接続なしで、イヤホンやスピーカーを使うことができます。
※1 : オーディオを再生するデバイスは、Bluetooth機能が搭載されている必要があります。スマートフォンやタブレットはほとんどの機種でBluetooth機能が搭載されています。パソコンはBluetooth機能が搭載されていない場合はBluetooth USBアダプタによりBluetooth機能を追加できます。

主要部品

マイコン マイコンボードとしては、Bluetoothを搭載したマイコンである ESP32を使用した開発キットである ESP32-WROOM-32 を使用します。
オーディオDACモジュール オーディオDACモジュールとしては、I2S入力をアナログ音声に変換するPCM5102Aを使用したモジュールを使用します。

01.ハードウェア組み立て
ハードウェアを組み立てます。

02.ソフトウェアプロジェクトの作成
Raspberry Pi にセットアップした ESP-IDF(Espressif Iot Development Framework) のサンプルプロジェクトの「a2dp_sink」プロジェクトを流用して、プロジェクト作成、ビルド、フラッシュしていきます。

03.PCM5102A向けのプログラム修正
PCM5102Aのオーディオデータフォーマットの仕様に整合するようにソフトウェアのプログラムを修正します。

04.ボリューム変更シミュレーション機能の無効化
流用したプロジェクトには、10秒ごとにオーディオ送信側のボリュームを少しずつ上げていく「ボリューム変更シミュレーション」機能が実装されていますが、余計な動きなので、無効化します。

05.絶対音量対応
送信側(スマートフォン等)が絶対音量(Absolute Volume)でオーディオを送信している場合は、受信したオーディオデータを、ボリューム設定に応じたデータに変更してから、オーディオDACモジュールに送ります。

06.ボリューム値の復元対応
Bluetoothオーディオレシーバーの電源を入れなおし、Bluetooth機能が搭載されているデバイス(スマートフォンやパソコン)からBluethoothの再接続をした際に、前回のボリューム値が復元されるようにします。

参考