DIY了一个 尖叫卡顿,ESP32启动的时候播放一首在线歌曲:
等播放完成后切换到成蓝牙音箱模式,可以接受手机蓝牙的歌曲,同时可以显示歌词:
想法是美好的,总是出错:
i2s_pin_config_t my_pin_config = {
.bck_io_num = 32, // 输入 BCLK
.ws_io_num = 33, // 输入 LRC
.data_out_num = 22, // 输出 DIN
.data_in_num = I2S_PIN_NO_CHANGE};
a2dp_sink.set_pin_config(my_pin_config);
a2dp_sink.start("my music");
蓝牙并不能工作正常,由于有下面的报错,所以以为是I2S设备设置冲突导致
(185203) I2S: register I2S object to platform failed
[185226][E][BluetoothA2DPSink.cpp:243] init_i2s(): [BT_AV] i2s_driver_install failed
各种调,后来才发觉是wifi和蓝牙冲突导致的,I2S虽然failed了,但是依然是正常的。
乐鑫官方说wifi和蓝牙是可以共存的,但是要设置什么参数CONFIG_ESP_COEX_SW_COEXIST_ENABLE
RF 共存 - ESP32 - — ESP-IDF 编程指南 latest 文档
这里有说明,当然这说的是非arduino模式。
查了很久后发现乐鑫对一个国外用户回复在arduino方式下模式是支持wifi和蓝牙共存的,不需要再额外设置什么参数。
I want to know about the coexistence use of WIFI/BLE on the ESP32 - ESP32 Forum
乐鑫官方回复:
乐鑫虽然这么说,但是实际上是存在问题的,同时使用WIFI和A2DP会不停重启或者压根找不到蓝牙,会有各种报错:
Guru Meditation Error: Core 0 panic'ed (StoreProhibited). Exception was unhandled.
单独启动蓝牙后打开wifi设置成sta都默认不会出现错误,但是蓝牙链接的时候立马报错,报了一个缓存区不足的问题。
最后只能曲线救国,在蓝牙设置前关闭了WIFI:
WiFi.disconnect();
WiFi.mode(WIFI_OFF);
delay(500);
i2s_pin_config_t my_pin_config = {
.bck_io_num = 32, // 输入 BCLK
.ws_io_num = 33, // 输入 LRC
.data_out_num = 22, // 输出 DIN
.data_in_num = I2S_PIN_NO_CHANGE};
a2dp_sink.set_pin_config(my_pin_config);
a2dp_sink.start("my music");
注意:没有验证最简单的蓝牙调用和Wifi调用能否并存。
没有进一步探求原因,但是建议能别混用就别混用,当然由于蓝牙和wifi对应的库太大,我的分区表是改过的,不知道这会不会有影响:
board_build.partitions=mydefault.csv
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x300000,
spiffs, data, spiffs, 0x310000,0xE0000,
coredump, data, coredump,0x3F0000,0x10000,