FB友の投稿で、 WeActStudio の I2SSpeakerModuleV1 と、ESP32 の組み合わせで、格安なのに高音質なBluetooth 対応アクティブスピーカーにできるということを知ったので、制作の備忘録としてメモに残しておく。
I2SSpeakerModuleV1 について
WeAct Studioが github で公開している I2S Speaker Module V1 という基板で、I2S 接続で入力されるデジタル音声データをステレオアナログ信号に変換するDAC(デジタルオーディオコンバータ)と、4Ω・2.8W のステレオアンプが一つになったもの。DAC+AMPが100円玉程度の大きさに収まっているのが素晴らしい。
100円玉と比べると小さいことが判る。
しかも、 Aliexpress では150円程度と格安で買える。
以前に登場してよく使われている I2SのDAC + AMP としては、MAX98357A搭載 I2Sオーディオモジュールというものがある(モノラルで4Ω、3.2W)。
WeAct Studio のものに使用されている PCM5100A デュアル PA は MAX98357A よりも高い音質を備えていて、価格が安いのも魅力。
ESP32と組み合わせる
開発元の、 WeAct Studio が公開している github のサイト
https://github.com/WeActStudio/WeActStudio.I2SSpeakerModuleV1
には、Arduino 用のサンプルコード(スケッチ)が公開されている。
このため、Bluetooth が使える ESP32 WROOM02 系ならどれでも使えるようだ。手元に WeMOS D1 mini ESP32 が有ったので、それを使うことにした。
D1 mini などのESP32は、国内のネット通販では結構な値段がしますが、アリエクスプレスなどでは500円くらいで購入できるので、両方購入しても千円以内でできる。
配線
I2S Speaker Module(Ampと略) とESP32 との接続は、次のとおり5本だけ。
AMP | ESP32 |
---|---|
VCC | VCC |
GND | GND |
BCK | IO16 |
DIN | IO17 |
WS | IO21 |
配線への注意
- ESP32側は、ピン番号ではなくて信号ピン番号なので注意
- github 内のサンプルコードとは違うピン番号を使用している
(D1 mini 側の配線がまとまる位置にしているため) - SDとMCは配線しない
- スピーカー端子への配線は左右(L,R)、プラス、マイナスに注意
ソースコード
配線を上記のようにしたので、github のサンプルコードを次のように変えて使用する。
#include "AudioTools.h"
#include "BluetoothA2DPSinkQueued.h"
#include "A2DPVolumeControl.h"
I2SStream i2s;
BluetoothA2DPSinkQueued a2dp_sink(i2s);
void setup() {
auto cfg = i2s.defaultConfig();
cfg.pin_bck = 16;
cfg.pin_ws = 21;
cfg.pin_data = 17;
// cfg.pin_mck = 0;
i2s.begin(cfg);
a2dp_sink.set_volume(20);
a2dp_sink.start("MyMusic");
}
void loop() {
}
開発環境
ESP32の開発環境は Arduino IDE が一般的だが、最近は VSC (Visual Studio Code) を macOS で利用した。(Aruduino IDEではライブラリーが無いエラーに悩まされた)
VSCに PlatformIO プラグインをインストールして使う。
上記のソースをコンパイルするのに必要な PlatformIO の定義ファイル
”platformis.ini" は次のとおり。必要なライブラリへのURLを記載。
[platformio]
description = A2DP Example
default_envs = esp32dev
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps = https://github.com/pschatzmann/ESP32-A2DP
https://github.com/pschatzmann/arduino-audio-tools.git
build_flags = -DCORE_DEBUG_LEVEL=2
monitor_speed = 115200
monitor_filters = esp32_exception_decoder
完成したもの
手持ちのスピーカー端子が大きかったので、それに合わせてケースを 3Dプリンターで作成。それぞれの基盤は平らな部分を両面テープで固定。
(この画像は2個作ったうち、コネクターを設置して上記と異なる配線をしたもの。その後、上記の配線を直付けしてみたので、その配線をおすすめする。)
おまけ
だいぶ前に同様の目的で購入した Bluetooth Amp. と並べてみる。
右側のものは、リチウムイオン電池が付いていて、充電回路(USB端子)も付いていて良いのだが、技適マークが付いていないため、実験後は使用していない。また、Bluetooth 接続時にけたたましい音量で中国語を叫ぶのも嫌!(多分、「接続したよ!」と言っているのだろうが、音量が大きすぎ)
左側が今回作成したもの。
リチウムポリマー電池と制御ボードもあり、組み込むことも考えたが、USBの電源アダプターをスイッチボットのプラグミニ経由でコンセントに繋ぐと、電源のオン・オフもリモートでできるのが便利だと思った。
作ってみたくなった方へ
参考までに購入先情報を。(私が購入したもの)