乐鑫技术交流
直播中

张杰

7年用户 1284经验值
私信 关注
[问答]

idf-V4.3如何在wifi_prov之后重新初始化BLE?

在wifi_prov_mgr例程(bluedroid ble方式)添加如下代码,配网完成后BLE初始化失败,系统重启。注释掉wifi_prov,则可以正常运行,请问如何在wifi_prov流程完成后正常使用BLE。
        //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();        ESP_ERROR_CHECK(esp_bt_controller_init(&bt_cfg));        ESP_ERROR_CHECK(esp_bt_controller_enable(ESP_BT_MODE_BLE));        ESP_ERROR_CHECK(esp_bluedroid_init());        ESP_ERROR_CHECK(esp_bluedroid_enable());

回帖(1)

听风说梦

2024-6-19 16:46:03
在ESP-IDF V4.3中,要在WiFi Provisioning(wifi_prov)之后重新初始化BLE,您可以按照以下步骤操作:

1. 首先,确保您已经完成了WiFi Provisioning。在完成配网后,调用`esp_wifi_prov_finalize()`函数,这将停止配网服务并释放相关资源。

```c
esp_err_t ret = esp_wifi_prov_finalize();
if (ret != ESP_OK) {
    ESP_LOGE(TAG, "esp_wifi_prov_finalize failed");
    return;
}
```

2. 接下来,释放经典蓝牙(Classic Bluetooth)占用的内存。在调用`esp_bt_controller_mem_release()`函数之前,确保已经将蓝牙模式设置为`ESP_BT_MODE_BLE`。

```c
esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
bt_cfg.mode = ESP_BT_MODE_BLE;
ESP_ERROR_CHECK(esp_bt_controller_init(&bt_cfg));
ESP_ERROR_CHECK(esp_bt_controller_enable(&bt_cfg));
ESP_ERROR_CHECK(esp_bt_controller_mem_release(ESP_BT_MODE_CLASSIC_BT));
```

3. 然后,初始化BLE控制器和堆栈。

```c
ESP_ERROR_CHECK(esp_bluedroid_init());
ESP_ERROR_CHECK(esp_bluedroid_enable());
```

4. 最后,设置BLE设备名称和配置GATT服务。

```c
// 设置BLE设备名称
esp_ble_gap_set_device_name("Your_Device_Name");

// 配置GATT服务
// ...
```

5. 启动BLE广告,以便其他设备可以发现您的设备。

```c
esp_ble_gap_start_advertising(&adv_params);
```

通过以上步骤,您应该可以在WiFi Provisioning流程完成后正常使用BLE。如果仍然遇到问题,请检查您的代码逻辑和ESP-IDF版本是否兼容。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分