Bluetoothスピーカーの自作<ESP32ボード+既製PCM5102 DAC>
少し前からArduinoなどを使った電子工作を始めて、色々調べていくうちに
"ESP32というモジュールを使えばwifiやbluetooth接続ができる"
ということを知り、このモジュールは秋月電子さんで1300円ほどだった(2021/2/28時点)ので早速購入。
ファームウェアのライターとかよくわからないので開発ボードを選択。
ちゃんと技適は通っているようでよかった。
このモジュールはESP-IDFというIDEが用意されているが、Arduino IDEでもデバッグできるらしい。とりあえずArduino IDE でwifi経由でLチカをするプログラムを入れてみた。光った。
やはり電子工作のポイントは実用性。どうせならこれを使ってちゃんと動くものを作りたい。
ということでBluetoothスピーカーに挑戦してみる
(最近スマホをpixel 5に機種変してイヤホンジャックがなくなったっていう理由もある。)
まずこちらのh_nariさんの記事を参考にさせていただきました。
私の電子工作レベルは初歩of初歩なので基礎情報から必要だったのだが、
bluetoothなどを経由して音声(データ)を通信するとき、I2Sという規格を用いるらしい。
ESP32にはI2Sインターフェースが内蔵されているのでこれを用いて音声データを受信できる。加えてすごいのが内蔵DACもあるということだ。
ここで考えてしまうのが
「じゃあ内蔵DAC使えばいいじゃん!?」ということで本題より前に、
◎内蔵DACでのbluetoothスピーカー製作
に挑戦した
〇必要なもの
- ESP32 開発ボード
〇必要環境
- ESP-IDF
インストール後、
%USERPROFILE%\Documents\ESP-IDF\examples\bluetooth\bluedroid\classic_bt\a2dp_sink
のフォルダを作業フォルダにコピーし
idf.py menuconfig コマンドでA2DP Example Configuration->A2DP Sink Output
->Internal DAC チェックを入れる
※追記
youtubeの動画などESP32を用いて音声出力をする動画で見られる現象ではないが、
私の環境ではa2dp_sinkのプログラムでは、音声送信側(スマホ)が自動で音量を調整する現象が発生した。通信中頻繁に音量を変えてしまうのでa2dp_sink内のmain.c の
/* esp_avrc_rn_evt_bit_mask_operation(ESP_AVRC_BIT_MASK_OP_SET, &evt_set, ESP_AVRC_RN_VOLUME_CHANGE);*/
この一行をコメントアウトしたところこの現象はなくなった。
この後
idf.py build
idf.py -p [esp32を接続しているcomポート] flash
のコマンドで書き込み。これでESP32の準備は完了。
この時点でGPIO25,GPIO26からステレオ音声でアナログ信号が出力される。
パワーはないのでイヤホンで聞いたところしっかり音声は再生されていたが16bitの受信データを8bitで出力しているのであまり音質がよいとは言えないものだった。
それでも特に音質の良し悪しは気にしなければ十分なレベルではあった。
これを踏まえスピーカーアンプは一旦中断しDACは外部に用意してスピーカーを製作する方向にシフト。
そして本題
◎PCM5102DACおよびESP32ボード を用いたBluetoothスピーカーの製作
〇必要なもの
・ESP-WROOM-32E
・DACモジュール
素子とか受動部品を選定して、回路書いて、ってやろうとしたけど面倒だったのでAmazonでこちらのDACモジュールを購入。(実はこの後PCB発注やる体たらく)
・スピーカーアンプ
オーディオアンプIC NJM386BDを使用。周辺回路は大体データシート通り。
これら大きく3つのモジュールを接続する回路を書いた。
この回路をユニバーサル基盤に組み、テストしたところ無事に再生できた。
22uF,100uF,470uFは電解アルミコンデンサ
(470uFのAC coupling コンデンサはNichiconのmuse BPシリーズ)
スピーカーは秋月電子で販売されていた8Ω8Wのものを使用
NJM386BDの1番と8番のピンに10uFのコンデンサの両端を接続するとゲインは200まで上げられるらしいが20で十分。
音量制御用のVolumeは10kΩのAカーブのものを使用
〇必要環境
- ESP-IDF
内蔵DACの時に設定したconfigをExternal I2S Codecに変更する
bluetoothスピーカーの基盤で気力のほとんどを使い果たした私は
最後に筐体に着手。塩ビ版を適当にカットして作った。
DACも含めモジュールで買ってしまったので計4000円くらいかな?
PCBとかが安ければESP以外でパターン書いてプリントしてもほぼ同じ金額に収められるかもしれない。先は長そうだ。