关于蓝牙的禁用与启用的问题

mnjhuy86
Posts: 26
Joined: Fri Jun 05, 2020 8:10 am

关于蓝牙的禁用与启用的问题

Postby mnjhuy86 » Thu Oct 21, 2021 1:00 pm

IDF : V3.3.2
硬件:ESP32-WROVER-E

如何实现蓝牙先禁用后。再启用。

我先使用

Code: Select all

  esp_bluedroid_disable();
进行蓝牙禁用
然后然后再

Code: Select all

esp_bluedroid_enable();
        esp_bt_dev_set_device_name("ESP_SINK_STREAM_DEMO");
        esp_bt_gap_set_scan_mode(ESP_BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE);
重新设置蓝牙名字和扫描方式。蓝牙能搜索的到。连接的时候也能出现配对。但配对后就掉线了。
这个问题应该怎么解决!
谢谢!

ESP_ICY
Posts: 404
Joined: Mon Aug 23, 2021 11:10 am

Re: 关于蓝牙的禁用与启用的问题

Postby ESP_ICY » Thu Oct 21, 2021 1:26 pm

使用 esp_bluedroid_enable() 前要先调用 esp_bluedroid_init()

mnjhuy86
Posts: 26
Joined: Fri Jun 05, 2020 8:10 am

Re: 关于蓝牙的禁用与启用的问题

Postby mnjhuy86 » Thu Oct 21, 2021 1:32 pm

初始化之前都调用过了。
蓝牙都能正常连接了。
然后有事件要控制蓝牙关闭。
关闭后。还会有新的事件启用蓝牙。
这个应该怎么做。

ESP_ICY
Posts: 404
Joined: Mon Aug 23, 2021 11:10 am

Re: 关于蓝牙的禁用与启用的问题

Postby ESP_ICY » Thu Oct 21, 2021 1:52 pm

建议为了减少内存泄漏,每次disable后调用一下deinit,然后下次开启时再init然后enable

mnjhuy86
Posts: 26
Joined: Fri Jun 05, 2020 8:10 am

Re: 关于蓝牙的禁用与启用的问题

Postby mnjhuy86 » Thu Oct 21, 2021 11:52 pm

我也试过。初始化的时候能正常连接。但禁用后再启用。能扫描到蓝牙。连接时也有配对。但就是连接不上去。
下面的禁用和启用的函数。

Code: Select all

void bt_enable(void)
{
    esp_bluedroid_status_t status;
    status = esp_bluedroid_get_status();
    ESP_LOGI(TAG, "%u", status);
    if (status != ESP_BLUEDROID_STATUS_ENABLED)
    {
        ESP_ERROR_CHECK(esp_bluedroid_init());
        ESP_ERROR_CHECK(esp_bluedroid_enable());
        esp_bt_dev_set_device_name("ESP_SINK_STREAM_DEMO");
        esp_bt_gap_set_scan_mode(ESP_BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE);
    }

}
void bt_disable(void)
{
    esp_bluedroid_status_t status;
    status = esp_bluedroid_get_status();
    ESP_LOGI(TAG, "%u", status);
    if (status == ESP_BLUEDROID_STATUS_ENABLED)
    {
       ESP_ERROR_CHECK(esp_bluedroid_disable());
       ESP_ERROR_CHECK(esp_bluedroid_deinit());
    }

}

ESP_ICY
Posts: 404
Joined: Mon Aug 23, 2021 11:10 am

Re: 关于蓝牙的禁用与启用的问题

Postby ESP_ICY » Fri Oct 22, 2021 9:37 am

您好,这边提供给您一个参考测试例程
Attachments
gatt_server_service_table.zip
(107.02 KiB) Downloaded 767 times

mnjhuy86
Posts: 26
Joined: Fri Jun 05, 2020 8:10 am

Re: 关于蓝牙的禁用与启用的问题

Postby mnjhuy86 » Sun Oct 31, 2021 6:37 am

你好。我试了蓝牙的开关。把蓝牙开关放在app_main程序中能正常开关。但是我新建一个任务。进行关闭时就会出现问题

Code: Select all

Guru Meditation Error: Core  0 panic'ed (Interrupt wdt timeout on CPU0)
Core 0 register dump:
PC      : 0x400923dc  PS      : 0x00060934  A0      : 0x8009173e  A1      : 0x3ffb7d00  
A2      : 0x3ffb7998  A3      : 0x00060920  A4      : 0x00000001  A5      : 0x0000abab  
A6      : 0xb33fffff  A7      : 0x00000002  A8      : 0x0000abab  A9      : 0x3ffb7d00  
A10     : 0x0000cdcd  A11     : 0x00060923  A12     : 0x00060920  A13     : 0x00000001  
A14     : 0x000000fe  A15     : 0x00060023  SAR     : 0x0000000f  EXCCAUSE: 0x00000005  
EXCVADDR: 0x00000000  LBEG    : 0x40093da4  LEND    : 0x40093daf  LCOUNT  : 0xffffffff  

后来发现把sd卡初始化程序关闭也能正常关闭蓝牙

Code: Select all

    //esp_periph_config_t periph_cfg = DEFAULT_ESP_PERIPH_SET_CONFIG();
    //esp_periph_set_handle_t set = esp_periph_set_init(&periph_cfg);
    //ESP_LOGI(TAG, "[1.0] Initialize and start peripherals");
    //audio_board_sdcard_init(set);
  
或者把关闭任务创建在cpu0上运行也能关闭蓝牙。
出现问题的函数是esp_periph_set_destroy

Code: Select all

[0;32mI (5641) BT_SINK: esp_periph_set_destroy[0m
Guru Meditation Error: Core  0 panic'ed (Interrupt wdt timeout on CPU0)
Core 0 register dump:
PC      : 0x400923d4  PS      : 0x00060434  A0      : 0x8009173e  A1      : 0x3ffb7d00  
A2      : 0x3ffb7998  A3      : 0x00060420  A4      : 0x00000001  A5      : 0x0000abab  
A6      : 0xb33fffff  A7      : 0x00000002  A8      : 0x0000abab  A9      : 0x3ffb7d00  
A10     : 0x0000cdcd  A11     : 0x00060423  A12     : 0x00060420  A13     : 0x00000001  
A14     : 0x000000fe  A15     : 0x00060023  SAR     : 0x0000000f  EXCCAUSE: 0x00000005  
EXCVADDR: 0x00000000  LBEG    : 0x40093da4  LEND    : 0x40093daf  LCOUNT  : 0xffffffff  

Who is online

Users browsing this forum: Baidu [Spider] and 167 guests