You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32配网完成后,能否保持Provisioning Manager蓝牙栈持续运行?

在ESP32配网后保持Provisioning Manager蓝牙栈持续运行的实现方案

完全可以实现配网后让BLE栈无限期运行,核心是修改Provisioning Manager的初始化配置和配网完成后的回调逻辑,以下是具体实现步骤和代码示例:

核心原理

乐鑫官方文档提到的配网后关闭BLE仅为示例默认行为,用户可通过配置Provisioning Manager的参数,禁止自动关闭BLE栈,同时调整配网完成后的清理逻辑,保留蓝牙栈资源供后续使用。

实现步骤

1. 修改Provisioning Manager初始化配置

在初始化Provisioning Manager时,将BLE配置中的disable_after_prov设为false,这是阻止配网后自动关闭BLE的关键:

#include "esp_provisioning/esp_prov_mgr.h"
#include "esp_provisioning/esp_prov_scheme_ble.h"

void app_main(void) {
    // 初始化WiFi和NVS等基础组件
    // ...

    // 配置Provisioning Manager
    esp_prov_mgr_config_t prov_config = {
        .scheme = esp_prov_scheme_ble,
        .scheme_event_handler = NULL,
        .ble = {
            .device_name = "ESP32-PROV", // 自定义配网设备名称
            .disable_after_prov = false  // 核心配置:配网后不关闭BLE
        }
    };
    ESP_ERROR_CHECK(esp_prov_mgr_init(prov_config));

    // 启动配网流程
    bool is_provisioned = false;
    ESP_ERROR_CHECK(esp_prov_mgr_is_provisioned(&is_provisioned));
    if (!is_provisioned) {
        ESP_ERROR_CHECK(esp_prov_mgr_start_provisioning(prov_config.scheme, NULL, provisioning_success_cb, NULL));
    } else {
        // 已配网,直接启动WiFi和自定义BLE服务
        // ...
    }
}

2. 调整配网成功回调逻辑

默认示例中配网成功后会调用esp_prov_mgr_deinit()销毁整个Provisioning Manager(包括关闭BLE栈),我们需要替换为仅停止配网服务,保留BLE栈:

static void provisioning_success_cb(void *priv_data, void *usr_data) {
    ESP_LOGI(TAG, "配网成功,保留BLE栈运行");

    // 停止配网服务,但不销毁BLE栈
    ESP_ERROR_CHECK(esp_prov_mgr_stop_provisioning());

    // 可选:移除配网相关的BLE服务,避免与自定义BLE服务冲突
    ESP_ERROR_CHECK(esp_prov_mgr_remove_prov_services());

    // 初始化并启动自定义BLE服务/特征,继续使用BLE功能
    init_custom_ble_services(); // 替换为你的自定义BLE初始化函数
}

3. 自定义BLE功能的后续使用

配网完成后,BLE栈仍处于运行状态,你可以像普通BLE应用一样,添加自定义服务、处理连接事件、读写特征值等。例如一个简单的自定义BLE服务初始化示例:

void init_custom_ble_services(void) {
    // 初始化BLE GATT服务器
    esp_ble_gatts_app_register(APP_ID);
    // 添加自定义服务和特征(示例代码,需根据需求完善)
    // ...
    ESP_LOGI(TAG, "自定义BLE服务初始化完成");
}

注意事项

  • 确保使用的ESP-IDF版本支持disable_after_prov配置字段(v4.3及以上版本已支持)
  • 保留BLE栈会占用一定内存,需确保设备有足够的堆内存余量
  • 若不需要保留配网相关的BLE服务,建议调用esp_prov_mgr_remove_prov_services()清理,避免干扰后续BLE操作

内容的提问来源于stack exchange,提问作者quixo3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 06:15:00