少走弯路,ESP32 下别混用wifi和蓝牙

发布时间:2023年12月27日

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,

文章来源:https://blog.csdn.net/platform/article/details/135251111
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。