ESP32のブルートゥース機能を使ってみようとサイトを色々めぐりました。
この3番目のサイトが、これでできるのか?いうくらいとてもシンプルなものだったので試してみました。その報告です。使ったのは、
1.FREENOVE ESP32-WROVER-DEV("ArduinoIDE2.1.0"では"ESP32 Wrover Module")
2.PCM5102DACモジュール
3.ヒャッキン 300円(330円)アクティブスピーカー
3番目のサイトから"ESP32-A2DP-main.zip"をダウンロードして、"ArduinoIDE"で
Sketch → Include Library → Add .ZIP Library…
という順に進み、取り込みます。そして、新たに加わったExamplesの
File → Examples → ESP32-A2DP → bt_music_receiver_simple
を開きコンパイルし、ESP32に転送するだけです。
#include "BluetoothA2DPSink.h"
BluetoothA2DPSink a2dp_sink;
void setup() {
a2dp_sink.start("MyMusic");
}
void loop() {
delay(1000); // do nothing
}
こんなに簡単にできるなんて、Phil Schatzmannさんに感謝、感激ですね。もちろん裏側に様々なライブラリが隠されている訳です。試しに少し機能をつけ足そうとすると、実行ファイルのサイズが大きくなって"Sketch too big"と叱られます。そんな時には、
Tools → Partition Scheme
で"Huge APP" を選択、つまり
としてやると、問題なく通るようです。
I2Sのピンが他のピンに変えられるかも試してみました。ライブラリ内では
This creates a new Bluetooth device with the name “MyMusic” and the output will be sent to
the following default I2S pins which need to be conected to an external DAC:
bck_io_num = 26
ws_io_num = 25
data_out_num = 22
と定められてるようです。それを
i2s_pin_config_t my_pin_config = {
.bck_io_num = 4,
.ws_io_num = 2,
.data_out_num = 0,
.data_in_num = I2S_PIN_NO_CHANGE
};
としてみましたが問題なく動作しました。
#include "BluetoothA2DPSink.h"
// I2S PCM5102 への出力
// #define I2S_LRC 25
// #define I2S_DOUT 22
// #define I2S_BCLK 26
BluetoothA2DPSink a2dp_sink;
void setup() {
i2s_pin_config_t my_pin_config = {
.bck_io_num = 4,
.ws_io_num = 2,
.data_out_num = 0,
.data_in_num = I2S_PIN_NO_CHANGE
};
a2dp_sink.set_pin_config(my_pin_config);
a2dp_sink.set_volume(128);// uint8_t 0-255
a2dp_sink.start("MyMusic");
}
void loop() {
delay(1000); // do nothing
}
私の古い"SONY WALKMAN"から"MyMusic"にブルートゥース接続して聴いてみましたが良い音です。ただWALKMANから音量を変えることはできないみたいです。なので動作中に音量を変えたければ、loop()内に何か記述することになるのかと思われます。
駄文を最後まで見ていただきありがとうございました。