Skip to content

Conversation

@WhereAreBugs
Copy link

@WhereAreBugs WhereAreBugs commented Oct 22, 2025

#546
简单新增了blufi协议,支持通过官方app或其他使用esp-blufi协议的app进行配网操作。

@Mr9You
Copy link

Mr9You commented Oct 24, 2025

建议使用 network_provisioning,维护性会更好一些。

@WhereAreBugs
Copy link
Author

感谢您的建议,这是一个很棒的优化,我将进行重构

@WhereAreBugs WhereAreBugs force-pushed the main branch 2 times, most recently from 0399577 to b9c28ca Compare October 24, 2025 07:50
@youzhi1215
Copy link

请问现在这个blufi配网协议已经优化过了嘛?为啥还不合并到主干捏

@WhereAreBugs
Copy link
Author

请问现在这个blufi配网协议已经优化过了嘛?为啥还不合并到主干捏

我已经完成了优化,将blufi写到了一个class中,避免混乱。并且我注意到由network_provisioning提供的蓝牙配网协议与blufi似乎不同。因此我重新实现了一个class而非使用network_provisioning

@78
Copy link
Owner

78 commented Nov 27, 2025

CMakeLists.txt 的改动会不会太大了,另外需要提供一个文档来说明用法。可以放在 docs 下。

@WhereAreBugs
Copy link
Author

CMakeLists.txt 的改动会不会太大了,另外需要提供一个文档来说明用法。可以放在 docs 下。

很抱歉我的自动格式化程序将CMakeLists.txt进行了格式化,我将避免格式化程序引入的改动。
我会新增一个文档说明用法的

@KingingWang
Copy link

编译的时候会有如下错误

xiaozhi-esp32/main/boards/common/blufi.h:7:10: fatal error: esp_blufi_api.h: No such file or directory
    7 | #include "esp_blufi_api.h"
      |          ^~~~~~~~~~~~~~~~~
compilation terminated.

@KingingWang
Copy link

刚刚我已经编译成功了,需要在json文件中添加,但是如果开启蓝牙5.0是无法编译通过的,希望可以在文档中描述一下,稍后我测试一下blufi配网是否可以正常使用

                "CONFIG_USE_ESP_BLUFI_WIFI_PROVISIONING=y",
                "CONFIG_BT_ENABLED=y",
                "CONFIG_BT_BLUEDROID_ENABLED=y",
                "CONFIG_BT_BLE_BLUFI_ENABLE=y",
                "CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y",
                "CONFIG_BT_BLE_50_FEATURES_SUPPORTED=n",
                "CONFIG_MBEDTLS_DHM_C=y"

@KingingWang
Copy link

测试可以获得密码但是连不上网,我暂时的解决方案是保存到nvs然后重启

@78
Copy link
Owner

78 commented Dec 5, 2025

最近 esp-wifi-connect 这个组件会更新一个3.0的版本, 支持灵活的开关wifi,以及和ap模式之间的切换,无需重启。

@WhereAreBugs
Copy link
Author

测试可以获得密码但是连不上网,我暂时的解决方案是保存到nvs然后重启

感谢您的测试报告。我将修改代码使用esp-wifi-connect组件,它会处理保存到nvs相关的逻辑。

@WhereAreBugs WhereAreBugs force-pushed the main branch 3 times, most recently from e9af38f to 5dab6a0 Compare December 7, 2025 14:14
@WhereAreBugs
Copy link
Author

最近 esp-wifi-connect 这个组件会更新一个3.0的版本, 支持灵活的开关wifi,以及和ap模式之间的切换,无需重启。

这样的话那就太棒了,可以直接更加优雅的使用这个组件获取blufi配网的结果。我已经提交了一个更新的版本。

@KingingWang
Copy link

对CMakeLists.txt的修改是不是忘记提交了,目前blufi.cpp是不会被编译的。另外,我现在把blufi.cpp添加进编译后依然会编译失败。我看了一下是switch 语句中的局部变量初始化问题,我添加了一个大括号解决了编译问题,以下是我的变更记录:

diff --git a/main/boards/common/blufi.cpp b/main/boards/common/blufi.cpp
index 3d294bd..c76ffdc 100644
--- a/main/boards/common/blufi.cpp
+++ b/main/boards/common/blufi.cpp
@@ -488,77 +488,78 @@ void Blufi::_handle_event(esp_blufi_cb_event_t event, esp_blufi_cb_p
aram_t *para
             ESP_LOGI(BLUFI_TAG, "BLUFI Set WIFI opmode %d", param->wifi_mode.op_mode);
             ESP_ERROR_CHECK(esp_wifi_set_mode(param->wifi_mode.op_mode));
             break;
-        case ESP_BLUFI_EVENT_REQ_CONNECT_TO_AP:
-            ESP_LOGI(BLUFI_TAG, "BLUFI request wifi connect to AP via esp-wifi-connect");
-            std::string ssid(reinterpret_cast<const char *>(m_sta_config.sta.ssid));
-            std::string password(reinterpret_cast<const char *>(m_sta_config.sta.password
));
-
-            // Save credentials through SsidManager (via esp-wifi-connect component).
-            SsidManager::GetInstance().AddSsid(ssid, password);
-            auto &wifi_station = WifiStation::GetInstance();
-
-            // Track SSID for BLUFI status reporting.
-            m_sta_ssid_len = static_cast<int>(ssid.size() > sizeof(m_sta_ssid) ? sizeof(m
_sta_ssid) : ssid.size());
-            memcpy(m_sta_ssid, ssid.c_str(), m_sta_ssid_len);
-            memset(m_sta_bssid, 0, sizeof(m_sta_bssid));
-            m_sta_connected = false;
-            m_sta_got_ip = false;
-            m_sta_is_connecting = true;
-            m_sta_conn_info = {}; // Reset connection info
-            m_sta_conn_info.sta_ssid = m_sta_ssid;
-            m_sta_conn_info.sta_ssid_len = m_sta_ssid_len;
-
-            wifi_station.Start();
-
-            // Wait for connection in a separate task to avoid blocking the BLUFI handler
.
-            xTaskCreate([](void *ctx) {
-                auto *self = static_cast<Blufi *>(ctx);
-                auto &station = WifiStation::GetInstance();
-                constexpr int kConnectTimeoutMs = 60 * 1000;
-                bool connected = station.WaitForConnected(kConnectTimeoutMs);
-
-                wifi_mode_t mode;
-                if (esp_wifi_get_mode(&mode) != ESP_OK) {
-                    mode = WIFI_MODE_STA;
-                }
-
-                if (connected) {
-                    self->m_sta_is_connecting = false;
-                    self->m_sta_connected = true;
-                    self->m_sta_got_ip = true;
-
-                    wifi_ap_record_t ap_info;
-                    if (esp_wifi_sta_get_ap_info(&ap_info) == ESP_OK) {
-                        memcpy(self->m_sta_bssid, ap_info.bssid, sizeof(self->m_sta_bssid
));
-                        self->m_sta_ssid_len = static_cast<int>(strnlen(reinterpret_cast<
const char *>(ap_info.ssid),
-                                                                        sizeof(ap_info.ss
id)));
-                        memcpy(self->m_sta_ssid, ap_info.ssid, self->m_sta_ssid_len);
+        case ESP_BLUFI_EVENT_REQ_CONNECT_TO_AP: {
+                ESP_LOGI(BLUFI_TAG, "BLUFI request wifi connect to AP via esp-wifi-connec
t");
+                std::string ssid(reinterpret_cast<const char *>(m_sta_config.sta.ssid));
+                std::string password(reinterpret_cast<const char *>(m_sta_config.sta.pass
word));
+
+                // Save credentials through SsidManager (via esp-wifi-connect component).
+                SsidManager::GetInstance().AddSsid(ssid, password);
+                auto &wifi_station = WifiStation::GetInstance();
+
+                // Track SSID for BLUFI status reporting.
+                m_sta_ssid_len = static_cast<int>(ssid.size() > sizeof(m_sta_ssid) ? size
of(m_sta_ssid) : ssid.size());
+                memcpy(m_sta_ssid, ssid.c_str(), m_sta_ssid_len);
+                memset(m_sta_bssid, 0, sizeof(m_sta_bssid));
+                m_sta_connected = false;
+                m_sta_got_ip = false;
+                m_sta_is_connecting = true;
+                m_sta_conn_info = {}; // Reset connection info
+                m_sta_conn_info.sta_ssid = m_sta_ssid;
+                m_sta_conn_info.sta_ssid_len = m_sta_ssid_len;
+
+                wifi_station.Start();
+
+                // Wait for connection in a separate task to avoid blocking the BLUFI han
dler.
+                xTaskCreate([](void *ctx) {
+                    auto *self = static_cast<Blufi *>(ctx);
+                    auto &station = WifiStation::GetInstance();
+                    constexpr int kConnectTimeoutMs = 60 * 1000;
+                    bool connected = station.WaitForConnected(kConnectTimeoutMs);
+
+                    wifi_mode_t mode;
+                    if (esp_wifi_get_mode(&mode) != ESP_OK) {
+                        mode = WIFI_MODE_STA;
                     }
 
-                    esp_blufi_extra_info_t info = {};
-                    memcpy(info.sta_bssid, self->m_sta_bssid, 6);
-                    info.sta_bssid_set = true;
-                    info.sta_ssid = self->m_sta_ssid;
-                    info.sta_ssid_len = self->m_sta_ssid_len;
-                    esp_blufi_send_wifi_conn_report(mode, ESP_BLUFI_STA_CONN_SUCCESS, _ge
t_softap_conn_num(), &info);
-
-                    // Restart after a short delay so the main app can boot with the new 
Wi-Fi settings.
-                    vTaskDelay(pdMS_TO_TICKS(1000));
-                    esp_restart();
-                } else {
-                    self->m_sta_is_connecting = false;
-                    self->m_sta_connected = false;
-                    self->m_sta_got_ip = false;
-
-                    esp_blufi_extra_info_t info = {};
-                    info.sta_ssid = self->m_sta_ssid;
-                    info.sta_ssid_len = self->m_sta_ssid_len;
-                    esp_blufi_send_wifi_conn_report(mode, ESP_BLUFI_STA_CONN_FAIL, _get_s
oftap_conn_num(), &info);
-                    ESP_LOGE(BLUFI_TAG, "Failed to connect to WiFi via esp-wifi-connect")
;
-                }
-                vTaskDelete(nullptr);
-            }, "blufi_wifi_conn", 4096, this, 5, nullptr);
-            break;
+                    if (connected) {
+                        self->m_sta_is_connecting = false;
+                        self->m_sta_connected = true;
+                        self->m_sta_got_ip = true;
+
+                        wifi_ap_record_t ap_info;
+                        if (esp_wifi_sta_get_ap_info(&ap_info) == ESP_OK) {
+                            memcpy(self->m_sta_bssid, ap_info.bssid, sizeof(self->m_sta_b
ssid));
+                            self->m_sta_ssid_len = static_cast<int>(strnlen(reinterpret_c
ast<const char *>(ap_info.ssid),
+                                                                            sizeof(ap_inf
o.ssid)));
+                            memcpy(self->m_sta_ssid, ap_info.ssid, self->m_sta_ssid_len);
+                        }
+
+                        esp_blufi_extra_info_t info = {};
+                        memcpy(info.sta_bssid, self->m_sta_bssid, 6);
+                        info.sta_bssid_set = true;
+                        info.sta_ssid = self->m_sta_ssid;
+                        info.sta_ssid_len = self->m_sta_ssid_len;
+                        esp_blufi_send_wifi_conn_report(mode, ESP_BLUFI_STA_CONN_SUCCESS,
 _get_softap_conn_num(), &info);
+
+                        // Restart after a short delay so the main app can boot with the 
new Wi-Fi settings.
+                        vTaskDelay(pdMS_TO_TICKS(1000));
+                        esp_restart();
+                    } else {
+                        self->m_sta_is_connecting = false;
+                        self->m_sta_connected = false;
+                        self->m_sta_got_ip = false;
+
+                        esp_blufi_extra_info_t info = {};
+                        info.sta_ssid = self->m_sta_ssid;
+                        info.sta_ssid_len = self->m_sta_ssid_len;
+                        esp_blufi_send_wifi_conn_report(mode, ESP_BLUFI_STA_CONN_FAIL, _g
et_softap_conn_num(), &info);
+                        ESP_LOGE(BLUFI_TAG, "Failed to connect to WiFi via esp-wifi-conne
ct");
+                    }
+                    vTaskDelete(nullptr);
+                }, "blufi_wifi_conn", 4096, this, 5, nullptr);
+                break;
+            }
         case ESP_BLUFI_EVENT_REQ_DISCONNECT_FROM_AP:
             ESP_LOGI(BLUFI_TAG, "BLUFI request wifi disconnect from AP");
             esp_wifi_disconnect();

另外,仅仅添加CONFIG_USE_ESP_BLUFI_WIFI_PROVISIONING配置是不够的,需要添加这些:

                "CONFIG_USE_ESP_BLUFI_WIFI_PROVISIONING=y",
                "CONFIG_BT_ENABLED=y",
                "CONFIG_BT_BLE_BLUFI_ENABLE=y",
                "CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y",
                "CONFIG_MBEDTLS_DHM_C=y"

能不能改成在添加CONFIG_USE_ESP_BLUFI_WIFI_PROVISIONING后自动引用对下面几个的添加呢?

此外,上述操作只是配网成功并且写入nvs了,并不会自动重启,需要手动重启才可以联网成功, esp-wifi-connect 这个组件更新3.0的版本后应该可以解决,暂时可以在代码里面添加esp_restart()重启。

这个feat是非常有用的,希望可以尽快修改后合并如主线。

@WhereAreBugs
Copy link
Author

WhereAreBugs commented Dec 8, 2025

对CMakeLists.txt的修改是不是忘记提交了,目前blufi.cpp是不会被编译的。另外,我现在把blufi.cpp添加进编译后依然会编译失败。我看了一下是switch 语句中的局部变量初始化问题,我添加了一个大括号解决了编译问题,以下是我的变更记录:

diff --git a/main/boards/common/blufi.cpp b/main/boards/common/blufi.cpp
index 3d294bd..c76ffdc 100644
--- a/main/boards/common/blufi.cpp
+++ b/main/boards/common/blufi.cpp
@@ -488,77 +488,78 @@ void Blufi::_handle_event(esp_blufi_cb_event_t event, esp_blufi_cb_p
aram_t *para
             ESP_LOGI(BLUFI_TAG, "BLUFI Set WIFI opmode %d", param->wifi_mode.op_mode);
             ESP_ERROR_CHECK(esp_wifi_set_mode(param->wifi_mode.op_mode));
             break;
-        case ESP_BLUFI_EVENT_REQ_CONNECT_TO_AP:
-            ESP_LOGI(BLUFI_TAG, "BLUFI request wifi connect to AP via esp-wifi-connect");
-            std::string ssid(reinterpret_cast<const char *>(m_sta_config.sta.ssid));
-            std::string password(reinterpret_cast<const char *>(m_sta_config.sta.password
));
-
-            // Save credentials through SsidManager (via esp-wifi-connect component).
-            SsidManager::GetInstance().AddSsid(ssid, password);
-            auto &wifi_station = WifiStation::GetInstance();
-
-            // Track SSID for BLUFI status reporting.
-            m_sta_ssid_len = static_cast<int>(ssid.size() > sizeof(m_sta_ssid) ? sizeof(m
_sta_ssid) : ssid.size());
-            memcpy(m_sta_ssid, ssid.c_str(), m_sta_ssid_len);
-            memset(m_sta_bssid, 0, sizeof(m_sta_bssid));
-            m_sta_connected = false;
-            m_sta_got_ip = false;
-            m_sta_is_connecting = true;
-            m_sta_conn_info = {}; // Reset connection info
-            m_sta_conn_info.sta_ssid = m_sta_ssid;
-            m_sta_conn_info.sta_ssid_len = m_sta_ssid_len;
-
-            wifi_station.Start();
-
-            // Wait for connection in a separate task to avoid blocking the BLUFI handler
.
-            xTaskCreate([](void *ctx) {
-                auto *self = static_cast<Blufi *>(ctx);
-                auto &station = WifiStation::GetInstance();
-                constexpr int kConnectTimeoutMs = 60 * 1000;
-                bool connected = station.WaitForConnected(kConnectTimeoutMs);
-
-                wifi_mode_t mode;
-                if (esp_wifi_get_mode(&mode) != ESP_OK) {
-                    mode = WIFI_MODE_STA;
-                }
-
-                if (connected) {
-                    self->m_sta_is_connecting = false;
-                    self->m_sta_connected = true;
-                    self->m_sta_got_ip = true;
-
-                    wifi_ap_record_t ap_info;
-                    if (esp_wifi_sta_get_ap_info(&ap_info) == ESP_OK) {
-                        memcpy(self->m_sta_bssid, ap_info.bssid, sizeof(self->m_sta_bssid
));
-                        self->m_sta_ssid_len = static_cast<int>(strnlen(reinterpret_cast<
const char *>(ap_info.ssid),
-                                                                        sizeof(ap_info.ss
id)));
-                        memcpy(self->m_sta_ssid, ap_info.ssid, self->m_sta_ssid_len);
+        case ESP_BLUFI_EVENT_REQ_CONNECT_TO_AP: {
+                ESP_LOGI(BLUFI_TAG, "BLUFI request wifi connect to AP via esp-wifi-connec
t");
+                std::string ssid(reinterpret_cast<const char *>(m_sta_config.sta.ssid));
+                std::string password(reinterpret_cast<const char *>(m_sta_config.sta.pass
word));
+
+                // Save credentials through SsidManager (via esp-wifi-connect component).
+                SsidManager::GetInstance().AddSsid(ssid, password);
+                auto &wifi_station = WifiStation::GetInstance();
+
+                // Track SSID for BLUFI status reporting.
+                m_sta_ssid_len = static_cast<int>(ssid.size() > sizeof(m_sta_ssid) ? size
of(m_sta_ssid) : ssid.size());
+                memcpy(m_sta_ssid, ssid.c_str(), m_sta_ssid_len);
+                memset(m_sta_bssid, 0, sizeof(m_sta_bssid));
+                m_sta_connected = false;
+                m_sta_got_ip = false;
+                m_sta_is_connecting = true;
+                m_sta_conn_info = {}; // Reset connection info
+                m_sta_conn_info.sta_ssid = m_sta_ssid;
+                m_sta_conn_info.sta_ssid_len = m_sta_ssid_len;
+
+                wifi_station.Start();
+
+                // Wait for connection in a separate task to avoid blocking the BLUFI han
dler.
+                xTaskCreate([](void *ctx) {
+                    auto *self = static_cast<Blufi *>(ctx);
+                    auto &station = WifiStation::GetInstance();
+                    constexpr int kConnectTimeoutMs = 60 * 1000;
+                    bool connected = station.WaitForConnected(kConnectTimeoutMs);
+
+                    wifi_mode_t mode;
+                    if (esp_wifi_get_mode(&mode) != ESP_OK) {
+                        mode = WIFI_MODE_STA;
                     }
 
-                    esp_blufi_extra_info_t info = {};
-                    memcpy(info.sta_bssid, self->m_sta_bssid, 6);
-                    info.sta_bssid_set = true;
-                    info.sta_ssid = self->m_sta_ssid;
-                    info.sta_ssid_len = self->m_sta_ssid_len;
-                    esp_blufi_send_wifi_conn_report(mode, ESP_BLUFI_STA_CONN_SUCCESS, _ge
t_softap_conn_num(), &info);
-
-                    // Restart after a short delay so the main app can boot with the new 
Wi-Fi settings.
-                    vTaskDelay(pdMS_TO_TICKS(1000));
-                    esp_restart();
-                } else {
-                    self->m_sta_is_connecting = false;
-                    self->m_sta_connected = false;
-                    self->m_sta_got_ip = false;
-
-                    esp_blufi_extra_info_t info = {};
-                    info.sta_ssid = self->m_sta_ssid;
-                    info.sta_ssid_len = self->m_sta_ssid_len;
-                    esp_blufi_send_wifi_conn_report(mode, ESP_BLUFI_STA_CONN_FAIL, _get_s
oftap_conn_num(), &info);
-                    ESP_LOGE(BLUFI_TAG, "Failed to connect to WiFi via esp-wifi-connect")
;
-                }
-                vTaskDelete(nullptr);
-            }, "blufi_wifi_conn", 4096, this, 5, nullptr);
-            break;
+                    if (connected) {
+                        self->m_sta_is_connecting = false;
+                        self->m_sta_connected = true;
+                        self->m_sta_got_ip = true;
+
+                        wifi_ap_record_t ap_info;
+                        if (esp_wifi_sta_get_ap_info(&ap_info) == ESP_OK) {
+                            memcpy(self->m_sta_bssid, ap_info.bssid, sizeof(self->m_sta_b
ssid));
+                            self->m_sta_ssid_len = static_cast<int>(strnlen(reinterpret_c
ast<const char *>(ap_info.ssid),
+                                                                            sizeof(ap_inf
o.ssid)));
+                            memcpy(self->m_sta_ssid, ap_info.ssid, self->m_sta_ssid_len);
+                        }
+
+                        esp_blufi_extra_info_t info = {};
+                        memcpy(info.sta_bssid, self->m_sta_bssid, 6);
+                        info.sta_bssid_set = true;
+                        info.sta_ssid = self->m_sta_ssid;
+                        info.sta_ssid_len = self->m_sta_ssid_len;
+                        esp_blufi_send_wifi_conn_report(mode, ESP_BLUFI_STA_CONN_SUCCESS,
 _get_softap_conn_num(), &info);
+
+                        // Restart after a short delay so the main app can boot with the 
new Wi-Fi settings.
+                        vTaskDelay(pdMS_TO_TICKS(1000));
+                        esp_restart();
+                    } else {
+                        self->m_sta_is_connecting = false;
+                        self->m_sta_connected = false;
+                        self->m_sta_got_ip = false;
+
+                        esp_blufi_extra_info_t info = {};
+                        info.sta_ssid = self->m_sta_ssid;
+                        info.sta_ssid_len = self->m_sta_ssid_len;
+                        esp_blufi_send_wifi_conn_report(mode, ESP_BLUFI_STA_CONN_FAIL, _g
et_softap_conn_num(), &info);
+                        ESP_LOGE(BLUFI_TAG, "Failed to connect to WiFi via esp-wifi-conne
ct");
+                    }
+                    vTaskDelete(nullptr);
+                }, "blufi_wifi_conn", 4096, this, 5, nullptr);
+                break;
+            }
         case ESP_BLUFI_EVENT_REQ_DISCONNECT_FROM_AP:
             ESP_LOGI(BLUFI_TAG, "BLUFI request wifi disconnect from AP");
             esp_wifi_disconnect();

另外,仅仅添加CONFIG_USE_ESP_BLUFI_WIFI_PROVISIONING配置是不够的,需要添加这些:

                "CONFIG_USE_ESP_BLUFI_WIFI_PROVISIONING=y",
                "CONFIG_BT_ENABLED=y",
                "CONFIG_BT_BLE_BLUFI_ENABLE=y",
                "CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y",
                "CONFIG_MBEDTLS_DHM_C=y"

能不能改成在添加CONFIG_USE_ESP_BLUFI_WIFI_PROVISIONING后自动引用对下面几个的添加呢?

此外,上述操作只是配网成功并且写入nvs了,并不会自动重启,需要手动重启才可以联网成功, esp-wifi-connect 这个组件更新3.0的版本后应该可以解决,暂时可以在代码里面添加esp_restart()重启。

这个feat是非常有用的,希望可以尽快修改后合并如主线。

感谢您的反馈。很抱歉我犯了这样的错误。我将会尽快修改。对于自动引用的问题,我计划修改配置为如下的方式:

  config USE_ESP_BLUFI_WIFI_PROVISIONING
        bool "Esp Blufi"
        select BT_ENABLED(=y)
        select BT_BLE_42_FEATURES_SUPPORTED(=y)
        select BT_BLE_BLUFI_ENABLE(=y)
        select MBEDTLS_DHM_C(=y)
        help
          Use esp blufi protocol to transmit WiFi configuration data

来告诉构建系统应该自动勾选这些内容。
另外,预期中是可以自动重启的。
https://github.com/78/xiaozhi-esp32/blob/main/main/boards/common/blufi.cpp#L545-L547
如果现在重启功能依旧无法使用,请提供一下日志。不胜感激。

@KingingWang
Copy link

感谢您的贡献,我还有一个问题,就是当我在json中添加USE_ESP_BLUFI_WIFI_PROVISIONING后,下面的那些select并不会被选中,这些自动引用是只能够手动idf.py menuconfig选中才能自动引用吗?

    config USE_ESP_BLUFI_WIFI_PROVISIONING
        bool "Esp Blufi"
        help
            Use esp blufi protocol to transmit WiFi configuration data
        select BT_ENABLED
        select BT_BLE_42_FEATURES_SUPPORTED
        select BT_BLE_BLUFI_ENABLE
        select MBEDTLS_DHM_C

@WhereAreBugs
Copy link
Author

感谢您的贡献,我还有一个问题,就是当我在json中添加USE_ESP_BLUFI_WIFI_PROVISIONING后,下面的那些select并不会被选中,这些自动引用是只能够手动idf.py menuconfig选中才能自动引用吗?

    config USE_ESP_BLUFI_WIFI_PROVISIONING
        bool "Esp Blufi"
        help
            Use esp blufi protocol to transmit WiFi configuration data
        select BT_ENABLED
        select BT_BLE_42_FEATURES_SUPPORTED
        select BT_BLE_BLUFI_ENABLE
        select MBEDTLS_DHM_C

我检查了esp-idf的文档,似乎只有idf.py menuconfig的时候才会自动引用。我正在尝试寻找更多的有关信息,如有进展我会尽快反馈给您。

@KingingWang
Copy link

感谢您的贡献,我还有一个问题,就是当我在json中添加USE_ESP_BLUFI_WIFI_PROVISIONING后,下面的那些select并不会被选中,这些自动引用是只能够手动idf.py menuconfig选中才能自动引用吗?

    config USE_ESP_BLUFI_WIFI_PROVISIONING
        bool "Esp Blufi"
        help
            Use esp blufi protocol to transmit WiFi configuration data
        select BT_ENABLED
        select BT_BLE_42_FEATURES_SUPPORTED
        select BT_BLE_BLUFI_ENABLE
        select MBEDTLS_DHM_C

我检查了esp-idf的文档,似乎只有idf.py menuconfig的时候才会自动引用。我正在尝试寻找更多的有关信息,如有进展我会尽快反馈给您。

非常感谢,我这边的配网现象是不能自动重启的,看日志会无限打印一条日志,具体日志信息稍后提供给您.

@KingingWang
Copy link

日志如下,会一直打印,我看虾哥已经提交了pr,会和这个pr有冲突,等合并后再修复吧

I (17930) BLUFI_CLASS: Recv STA PASSWORD
I (18020) BLUFI_CLASS: BLUFI request wifi connect to AP via esp-wifi-connect
I (19330) WifiStation: Wait for next scan
I (19560) AudioCodec: Set output enable to false
I (20560) SystemInfo: free sram: 12307 minimal sram: 8367
I (24150) WifiStation: Wait for next scan
I (28970) WifiStation: Wait for next scan
I (29330) WifiStation: Wait for next scan
I (29340) WifiStation: Wait for next scan
I (29350) WifiStation: Wait for next scan
I (29360) WifiStation: Wait for next scan
I (29380) WifiStation: Wait for next scan
I (29390) WifiStation: Wait for next scan
I (29400) WifiStation: Wait for next scan
I (29410) WifiStation: Wait for next scan
I (29420) WifiStation: Wait for next scan
I (29430) WifiStation: Wait for next scan
I (29440) WifiStation: Wait for next scan
I (29460) WifiStation: Wait for next scan
I (29470) WifiStation: Wait for next scan
I (29480) WifiStation: Wait for next scan
I (29490) WifiStation: Wait for next scan
I (29500) WifiStation: Wait for next scan
I (29510) WifiStation: Wait for next scan
I (29520) WifiStation: Wait for next scan
I (29530) WifiStation: Wait for next scan
I (29550) WifiStation: Wait for next scan
I (29560) WifiStation: Wait for next scan
I (29570) WifiStation: Wait for next scan
I (29580) WifiStation: Wait for next scan
I (29590) WifiStation: Wait for next scan
I (29600) WifiStation: Wait for next scan
I (29610) WifiStation: Wait for next scan
I (29620) WifiStation: Wait for next scan
I (29640) WifiStation: Wait for next scan
I (29650) WifiStation: Wait for next scan
I (29660) WifiStation: Wait for next scan
I (29670) WifiStation: Wait for next scan
I (29680) WifiStation: Wait for next scan
I (29690) WifiStation: Wait for next scan
I (29700) WifiStation: Wait for next scan
I (29710) WifiStation: Wait for next scan
I (29730) WifiStation: Wait for next scan
I (29740) WifiStation: Wait for next scan
I (29750) WifiStation: Wait for next scan
I (29760) WifiStation: Wait for next scan
I (29770) WifiStation: Wait for next scan
I (29780) WifiStation: Wait for next scan
I (29790) WifiStation: Wait for next scan
I (29800) WifiStation: Wait for next scan
I (29820) WifiStation: Wait for next scan
I (29830) WifiStation: Wait for next scan
I (29840) WifiStation: Wait for next scan
I (29850) WifiStation: Wait for next scan
I (29860) WifiStation: Wait for next scan
I (29870) WifiStation: Wait for next scan
I (29880) WifiStation: Wait for next scan
I (29900) WifiStation: Wait for next scan
I (29910) WifiStation: Wait for next scan
I (29920) WifiStation: Wait for next scan
I (29930) WifiStation: Wait for next scan
I (29940) WifiStation: Wait for next scan
I (29950) WifiStation: Wait for next scan
I (29960) WifiStation: Wait for next scan
I (29970) WifiStation: Wait for next scan
I (29990) WifiStation: Wait for next scan
I (30000) WifiStation: Wait for next scan
I (30010) WifiStation: Wait for next scan
I (30020) WifiStation: Wait for next scan
I (30030) WifiStation: Wait for next scan
I (30040) WifiStation: Wait for next scan
I (30050) WifiStation: Wait for next scan
I (30070) WifiStation: Wait for next scan
I (30080) WifiStation: Wait for next scan
I (30090) WifiStation: Wait for next scan
I (30100) WifiStation: Wait for next scan
I (30110) WifiStation: Wait for next scan
I (30120) WifiStation: Wait for next scan
I (30130) WifiStation: Wait for next scan
I (30140) WifiStation: Wait for next scan
I (30160) WifiStation: Wait for next scan
I (30170) WifiStation: Wait for next scan
I (30180) WifiStation: Wait for next scan
I (30190) WifiStation: Wait for next scan
I (30200) WifiStation: Wait for next scan
I (30210) WifiStation: Wait for next scan
I (30220) WifiStation: Wait for next scan
I (30230) WifiStation: Wait for next scan
I (30250) WifiStation: Wait for next scan
I (30260) WifiStation: Wait for next scan
I (30270) WifiStation: Wait for next scan
I (30280) WifiStation: Wait for next scan
I (30290) WifiStation: Wait for next scan
I (30300) WifiStation: Wait for next scan
I (30310) WifiStation: Wait for next scan

@WhereAreBugs
Copy link
Author

WhereAreBugs commented Dec 8, 2025

我在release.py中新增了_apply_auto_selects用于处理这种情况。现在逻辑应该是正确的。以及我修复了自动重启的逻辑。

@KingingWang
Copy link

现在可以正常配网了,十分感谢

@WhereAreBugs
Copy link
Author

现在可以正常配网了,十分感谢

很高兴听到所有功能正常工作,希望对大家能有所帮助。

@KingingWang
Copy link

现在可以正常配网了,十分感谢

很高兴听到所有功能正常工作,希望对大家能有所帮助。

今天2.10版本发布了,WiFi的代码有修改,与这个commit有冲突了,需要解一下冲突

@WhereAreBugs
Copy link
Author

今天2.10版本发布了,WiFi的代码有修改,与这个commit有冲突了,需要解一下冲突

明白,我将会解决冲突并且切换到新的Wi-Fi连接逻辑

@WhereAreBugs
Copy link
Author

我已经解决了所有的冲突。切换到新的Wi-Fi链接逻辑后,现在配网成功后不再需要重启。

@78
Copy link
Owner

78 commented Dec 9, 2025

我已经解决了所有的冲突。切换到新的Wi-Fi链接逻辑后,现在配网成功后不再需要重启。

README.md 应该还没更新,写的是需要等待重启

@KingingWang
Copy link

关于CONFIG_BT_NIMBLE_ENABLED这个宏的代码需不需要删除呢?或者在文档说明一下?我打开这个宏好像编译有问题

@WhereAreBugs
Copy link
Author

我已经解决了所有的冲突。切换到新的Wi-Fi链接逻辑后,现在配网成功后不再需要重启。

README.md 应该还没更新,写的是需要等待重启

感谢指正

@WhereAreBugs
Copy link
Author

关于CONFIG_BT_NIMBLE_ENABLED这个宏的代码需不需要删除呢?或者在文档说明一下?我打开这个宏好像编译有问题

CONFIG_BT_BLUEDROID_ENABLED和CONFIG_BT_NIMBLE_ENABLED理应二选一,它们都是对ble的实现。
我会将这个细节加入文档的

Signed-off-by: WhereAreBugs <[email protected]>
@WhereAreBugs
Copy link
Author

重新修正了一处意外的头文件引入,现在CI将不再失败

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants