2018年8月31日金曜日

ESP32と外付けDACを組み合わせてBluetoothヘッドホンを作ってみた


背景

ESP32とはWiFiとBluetoothの通信機能を備えたプロセッサです。
DACとはデジタル・アナログ変換回路(Digital to Analog Converter)のことです。

以前の記事(ESP32の内蔵DACを利用してBluetoothスピーカーとして動かしてみた)では、ESP32に内蔵されている8bitのDACを使って音を出しました。

内蔵DACでは音の劣化が激しかったので、外付けDACを買ってESP32と連携させてみました。
連携方法を共有します。

使ったもの

esp-idfをインストールしたPC(Bluetoothが使えるもの)

本家のドキュメントを参考にしながら、esp-idfをインストールしました。
ESP32とBluetooth接続するため、Bluetooth機能が必要です。

ESP32開発ボード

ESP32BBを使いました。
ESP-WROOM-32が載った開発ボード(スイッチサイエンス秋月電子で売っているものとか)なら、この記事の内容を適用できると思います。

外付けDAC

aliexpressで購入しました。
スイッチサイエンスでも買えます。

ジャンパワイヤ + ブレッドボード

外付けDACとESP32を接続するのに使います。
ESP32BBにはブレッドボードが付いているので、この記事ではジャンパワイヤだけ使いました。

ジャンパワイヤ: スイッチサイエンス秋月電子
ブレッドボード: スイッチサイエンス秋月電子

ヘッドホン



外付けDACに接続して使います。
手元で抵抗値を変えられるタイプを使ました。

プログラムをインストール

esp-idfのサンプルプログラムとして、bluetoothのa2dpプロトコルで音声を受信しつつi2sでDACと連携するプログラムがあるので、それを使います。

esp-idf/examples/bluetooth/bluedroid/classic_bt/a2dp_sink

ESP32開発ボードをPCに接続した状態で、下記のようなコマンドを実行してプログラムを書き込みます。
(サンプルプログラムのパスが更新されてからは未検証です。不具合があったらコメントなどで指摘していただけると嬉しいです。)
cd ~/esp/esp-idf/examples/bluetooth/bluedroid/classic_bt/a2dp_sink
make flash

初回のmake flash実行時にesp-idfの設定が出てきますが、特に設定は変えず右ボタンでExitを選択して閉じます。
何か設定を変えたい場合は make menuconfig を実行すると、設定画面を開けます。

回路構成

書き込んだプログラムのREADMEDACモジュールの説明を参考にして、下記のように配線しました。
ESP32 I2S DAC
GPIO22 WSEL
GPIO25 DIN
GPIO26 BCLK
3V3 VIN
GND GND

配線するとこうなりました。



PCとの接続

プログラムを書き込んだESP32を動かせば、ESP_SPEAKERという名前のBluetoothデバイスとして動作します。
PCのBluetooth機能を有効にして、PCとESP_SPEAKERをBluetoothで接続すると、ESP32をBluetoothヘッドホンとして使える状態になります。


音の感想

個人的に音に対してこだわりはあまり無いですが、内蔵DACを試した時とは違い、PCにヘッドホンを直刺ししたときと同じような音が出ていると思いました。

まとめ

外付けDACとESP32を使って、日常的に利用しても良さそうな音質のBluetoothヘッドホンを作れました。

何かの参考になれば嬉しいです。

参考

ESP32でBluetoothスピーカーを作ってみた (I2S編)
ESP32でBluetoothイヤホンを作ってみた


更新履歴

2020.12.30
a2dpのサンプルプログラムのパスが変わっていたので修正しました。
旧: esp-idf/examples/bluetooth/a2dp_sink
新: esp-idf/examples/bluetooth/bluedroid/classic_bt/a2dp_sink

0 件のコメント :