如何多次初始化blufi

terryding77
Posts: 5
Joined: Wed Apr 21, 2021 12:56 am

如何多次初始化blufi

Postby terryding77 » Fri Jul 02, 2021 2:50 pm

参照blufi的官方样例,我使用如下代码进行蓝牙和blufi的初始化以及检查连接结果~
现在该部分代码正常运行,可以正常打开蓝牙进行blufi的wifi配对流程
但我发现该部分初始化操作仅可以进行一次,我如果再次调用该部分代码则会提示已经进行过初始化

我现在想要实现的目标是
1. 触发blufi配对的操作可以多次进行(我保证第一次配对结束后再调用第二次,希望第二次配对依然可以正常初始化并执行blufi的回调函数)
2. 配对完成后能完全关闭蓝牙

我想要知道:
1. 是不是下列代码中有部分初始化函数是启动后只能进行一次的(查阅文档确实发现一部分函数仅可运行一次
2. 启动后仅可进行一次的操作是否会消耗较多资源/电力
3. 完全关闭蓝牙以及重新打开蓝牙并进入blufi配对状态分别需要哪些函数

我用到的函数包括
esp_bt_controller_mem_release
esp_bt_controller_init
esp_bt_controller_enable
esp_bluedroid_init
esp_bluedroid_enable
esp_ble_gap_register_callback
esp_blufi_register_callbacks
esp_blufi_profile_init
esp_blufi_profile_deinit
是否还需要其他函数才能完成我的目标

Code: Select all

    
    ESP_ERROR_CHECK(esp_bt_controller_mem_release(ESP_BT_MODE_CLASSIC_BT));

    esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
    ret = esp_bt_controller_init(&bt_cfg);
    if (ret) {
        BLUFI_ERROR("%s 初始化蓝牙控制器失败: %s\n", __func__, esp_err_to_name(ret));
        return false;
    }

    ret = esp_bt_controller_enable(ESP_BT_MODE_BLE);
    if (ret) {
        BLUFI_ERROR("%s 启动蓝牙控制器失败: %s\n", __func__, esp_err_to_name(ret));
        return false;
    }

    ret = esp_bluedroid_init();
    if (ret) {
        BLUFI_ERROR("%s 初始化 bluedroid 失败: %s\n", __func__, esp_err_to_name(ret));
        return false;
    }

    ret = esp_bluedroid_enable();
    if (ret) {
        BLUFI_ERROR("%s 启动 bluedroid 失败: %s\n", __func__, esp_err_to_name(ret));
        return false;
    }

    BLUFI_INFO("BD 地址: " ESP_BD_ADDR_STR "\n", ESP_BD_ADDR_HEX(esp_bt_dev_get_address()));

    BLUFI_INFO("BLUFI 版本 %04x\n", esp_blufi_get_version());

    ret = esp_ble_gap_register_callback(example_gap_event_handler);
    if (ret) {
        BLUFI_ERROR("%s gap 注册失败, error code = %x\n", __func__, ret);
        return false;
    }

    ret = esp_blufi_register_callbacks(&example_callbacks);
    if (ret) {
        BLUFI_ERROR("%s blufi 注册失败, error code = %x\n", __func__, ret);
        return false;
    }

    esp_blufi_profile_init();
    EventBits_t bits = xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, pdFALSE, pdFALSE, portMAX_DELAY);
    if (bits & CONNECTED_BIT) {
        ESP_LOGI("BLUFI", "BluFi连接到Wi-Fi");
        return true;
    } else {
        ESP_LOGE("BLUFI", "未知Wi-Fi连接结果");
    }
    esp_blufi_profile_deinit();

ESP_XuLZ
Posts: 173
Joined: Fri Mar 26, 2021 6:04 am

Re: 如何多次初始化blufi

Postby ESP_XuLZ » Mon Jul 05, 2021 1:36 am

可以按照初始化的流程反方向去初始化,可以尝试如下:
  1. esp_err_t ble_deinit(void)
  2. {
  3.     int ret;
  4.     ret = esp_blufi_profile_deinit();
  5.     if (ret) {
  6.         BLUFI_ERROR("%s deinit  blufi profile failed: %s\n", __func__, esp_err_to_name(ret));
  7.         return -1;
  8.     }
  9.  
  10.     blufi_security_deinit();
  11.  
  12.     ret = esp_bluedroid_disable();
  13.     if (ret) {
  14.         BLUFI_ERROR("%s disable bluedroid failed: %s\n", __func__, esp_err_to_name(ret));
  15.         return -1;
  16.     }
  17.  
  18.     ret = esp_bluedroid_deinit();
  19.     if (ret) {
  20.         BLUFI_ERROR("%s deinit bluedroid failed: %s\n", __func__, esp_err_to_name(ret));
  21.         return -1;
  22.     }
  23.  
  24.     ret = esp_bt_controller_disable();
  25.     if (ret) {
  26.         BLUFI_ERROR("%s disable controller failed: %s\n", __func__, esp_err_to_name(ret));
  27.         return -1;
  28.     }
  29.  
  30.     ret = esp_bt_controller_deinit();
  31.     if (ret) {
  32.         BLUFI_ERROR("%s deinit controller failed: %s\n", __func__, esp_err_to_name(ret));
  33.         return -1;
  34.     }
  35.     BLUFI_INFO("ble deinit completed\n");
  36.     return 0;
  37. }

Who is online

Users browsing this forum: Google [Bot] and 96 guests