Diary of Engineering

@edf_player

Bluetoothスピーカーの自作<ESP32ボード+既製PCM5102 DAC>

少し前からArduinoなどを使った電子工作を始めて、色々調べていくうちに

"ESP32というモジュールを使えばwifibluetooth接続ができる"

ということを知り、このモジュールは秋月電子さんで1300円ほどだった(2021/2/28時点)ので早速購入。

ファームウェアのライターとかよくわからないので開発ボードを選択。

f:id:edf_player:20210328193456j:plain

ESP-WROOM-32E

ちゃんと技適は通っているようでよかった。

 

このモジュールはESP-IDFというIDEが用意されているが、Arduino IDEでもデバッグできるらしい。とりあえずArduino IDEwifi経由でLチカをするプログラムを入れてみた。光った。

 

やはり電子工作のポイントは実用性。どうせならこれを使ってちゃんと動くものを作りたい。

 

ということでBluetoothスピーカーに挑戦してみる

(最近スマホをpixel 5に機種変してイヤホンジャックがなくなったっていう理由もある。)

 

まずこちらのh_nariさんの記事を参考にさせていただきました。

qiita.com

 

私の電子工作レベルは初歩of初歩なので基礎情報から必要だったのだが、

bluetoothなどを経由して音声(データ)を通信するとき、I2Sという規格を用いるらしい。

ESP32にはI2Sインターフェースが内蔵されているのでこれを用いて音声データを受信できる。加えてすごいのが内蔵DACもあるということだ。

*1

 

 

ここで考えてしまうのが

「じゃあ内蔵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 チェックを入れる

f:id:edf_player:20210329001126j:plain

menuconfig

※追記

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発注やる体たらく)

f:id:edf_player:20210329010538p:plain

PCM5102 DAC

 ・スピーカーアンプ

オーディオアンプIC NJM386BDを使用。周辺回路は大体データシート通り。

f:id:edf_player:20210329011544p:plain

NJM386BD application circuit

これら大きく3つのモジュールを接続する回路を書いた。

f:id:edf_player:20210329020439p:plain

Bluetooth Speaker Circuit

この回路をユニバーサル基盤に組み、テストしたところ無事に再生できた。

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スピーカーの基盤で気力のほとんどを使い果たした私は

最後に筐体に着手。塩ビ版を適当にカットして作った。

f:id:edf_player:20210329021605j:plain

bluetooth speaker

DACも含めモジュールで買ってしまったので計4000円くらいかな?

PCBとかが安ければESP以外でパターン書いてプリントしてもほぼ同じ金額に収められるかもしれない。先は長そうだ。 

 

 

*1:basics:

I2Sインターフェースでは音声データはデジタル情報で通信をする。

音声として出力するにはこれをDACなどでアナログ情報にする必要がある。