Page 1 of 1
关于蓝牙的禁用与启用的问题
Posted: Thu Oct 21, 2021 1:00 pm
by mnjhuy86
IDF : V3.3.2
硬件:ESP32-WROVER-E
如何实现蓝牙先禁用后。再启用。
我先使用
进行蓝牙禁用
然后然后再
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);
重新设置蓝牙名字和扫描方式。蓝牙能搜索的到。连接的时候也能出现配对。但配对后就掉线了。
这个问题应该怎么解决!
谢谢!
Re: 关于蓝牙的禁用与启用的问题
Posted: Thu Oct 21, 2021 1:26 pm
by ESP_ICY
使用 esp_bluedroid_enable() 前要先调用 esp_bluedroid_init()
Re: 关于蓝牙的禁用与启用的问题
Posted: Thu Oct 21, 2021 1:32 pm
by mnjhuy86
初始化之前都调用过了。
蓝牙都能正常连接了。
然后有事件要控制蓝牙关闭。
关闭后。还会有新的事件启用蓝牙。
这个应该怎么做。
Re: 关于蓝牙的禁用与启用的问题
Posted: Thu Oct 21, 2021 1:52 pm
by ESP_ICY
建议为了减少内存泄漏,每次disable后调用一下deinit,然后下次开启时再init然后enable
Re: 关于蓝牙的禁用与启用的问题
Posted: Thu Oct 21, 2021 11:52 pm
by mnjhuy86
我也试过。初始化的时候能正常连接。但禁用后再启用。能扫描到蓝牙。连接时也有配对。但就是连接不上去。
下面的禁用和启用的函数。
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());
}
}
Re: 关于蓝牙的禁用与启用的问题
Posted: Fri Oct 22, 2021 9:37 am
by ESP_ICY
您好,这边提供给您一个参考测试例程
Re: 关于蓝牙的禁用与启用的问题
Posted: Sun Oct 31, 2021 6:37 am
by mnjhuy86
你好。我试了蓝牙的开关。把蓝牙开关放在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