From ba9f5b9aeb456af6f65173f1d80aace6e605ec59 Mon Sep 17 00:00:00 2001 From: Rdzleo Date: Tue, 24 Mar 2026 17:27:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=AF=E7=94=A8=20BLE=205.0=202M=20PHY=20?= =?UTF-8?q?=E5=9B=BE=E4=BC=A0=E5=8A=A0=E9=80=9F=20+=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E6=9C=AA=E4=BD=BF=E7=94=A8=E7=9A=84=20BluFi=20=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=20+=20BLE=20=E6=96=AD=E8=BF=9E=E5=86=85=E5=AD=98?= =?UTF-8?q?=E6=B3=84=E6=BC=8F=E4=BF=AE=E5=A4=8D=201=E3=80=81dzbj=5Fble.c?= =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=20BLE=205.0=202M=20PHY=20=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=EF=BC=88=E8=BF=9E=E6=8E=A5=E6=97=B6=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=8D=8F=E5=95=86=EF=BC=8C=E4=B8=8D=E6=94=AF=E6=8C=81=E5=88=99?= =?UTF-8?q?=E5=9B=9E=E9=80=80=201M=EF=BC=89=EF=BC=9B=202=E3=80=81dzbj=5Fbl?= =?UTF-8?q?e.c=20=E6=96=B0=E5=A2=9E=20PHY=20=E6=9B=B4=E6=96=B0=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E6=97=A5=E5=BF=97=EF=BC=88tx=5Fphy/rx=5Fphy:=201=3D1M?= =?UTF-8?q?,=202=3D2M,=203=3DCoded=EF=BC=89=EF=BC=9B=203=E3=80=81dzbj=5Fbl?= =?UTF-8?q?e.c=20=E6=96=AD=E8=BF=9E=E6=97=B6=E6=B8=85=E7=90=86=E6=9C=AA?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=9A=84=E5=9B=BE=E7=89=87=E4=BC=A0=E8=BE=93?= =?UTF-8?q?=E7=8A=B6=E6=80=81=EF=BC=8C=E9=87=8A=E6=94=BE=20img=5Fdata/file?= =?UTF-8?q?path/file=5Fimg=20=E9=98=B2=E6=AD=A2=E5=86=85=E5=AD=98=E6=B3=84?= =?UTF-8?q?=E6=BC=8F=EF=BC=9B=204=E3=80=81=E7=A7=BB=E9=99=A4=E6=9C=AA?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=9A=84=20BluFi=20=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=EF=BC=88Kconfig=20select=E3=80=81=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E6=A3=80=E6=9F=A5=E3=80=81sdkconfig=EF=BC=89=EF=BC=8C?= =?UTF-8?q?=E8=A7=A3=E9=99=A4=E4=B8=8E=20BLE=205.0=20=E7=9A=84=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E5=86=B2=E7=AA=81=EF=BC=9B=205=E3=80=81sdkconfig.defa?= =?UTF-8?q?ults=20=E5=8F=8A=E7=94=9F=E4=BA=A7=E7=8E=AF=E5=A2=83=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E7=BB=9F=E4=B8=80=E5=90=AF=E7=94=A8=20BLE=205.0=20+?= =?UTF-8?q?=20=E4=BF=9D=E7=95=99=20BLE=204.2=20legacy=20advertising=20?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/Kconfig.projbuild | 3 +-- main/bluetooth_provisioning_config.h | 4 +--- main/dzbj/dzbj_ble.c | 23 +++++++++++++++++++++++ sdkconfig | 9 +++++++-- sdkconfig.defaults | 13 +++++++------ sdkconfig.defaults.prod生产环境 | 13 +++++++------ 6 files changed, 46 insertions(+), 19 deletions(-) diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index e3e8f69..f1dbfbc 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -354,10 +354,9 @@ menu "蓝牙配网 (Bluetooth Provisioning)" default y select BT_ENABLED select BLUEDROID_ENABLED - select BT_BLUFI_ENABLE help 启用蓝牙配网功能,允许通过蓝牙BLE连接配置WiFi网络。 - 需要ESP-IDF的蓝牙和BLUFI组件支持。 + 使用自定义 GATT Server 实现,不依赖 BluFi 组件。 config BLUETOOTH_PROVISIONING_SECURITY bool "启用安全模式" diff --git a/main/bluetooth_provisioning_config.h b/main/bluetooth_provisioning_config.h index 941ac6e..053712b 100644 --- a/main/bluetooth_provisioning_config.h +++ b/main/bluetooth_provisioning_config.h @@ -196,9 +196,7 @@ extern "C" { #warning "蓝牙配网需要启用CONFIG_BLUEDROID_ENABLED" #endif -#ifndef CONFIG_BT_BLUFI_ENABLE -#warning "蓝牙配网需要启用CONFIG_BT_BLUFI_ENABLE" -#endif +// BluFi 组件未使用 — 配网采用自定义 GATT Server 实现 #ifndef CONFIG_ESP32_WIFI_ENABLED #warning "蓝牙配网需要启用WiFi功能" diff --git a/main/dzbj/dzbj_ble.c b/main/dzbj/dzbj_ble.c index 7086e41..1b79f30 100644 --- a/main/dzbj/dzbj_ble.c +++ b/main/dzbj/dzbj_ble.c @@ -267,6 +267,13 @@ static void esp_gap_cb(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *par param->update_conn_params.latency, param->update_conn_params.timeout); break; + case ESP_GAP_BLE_PHY_UPDATE_COMPLETE_EVT: + ESP_LOGI(CONN_TAG, "PHY update, status %d, tx_phy %d, rx_phy %d", + param->phy_update.status, + param->phy_update.tx_phy, + param->phy_update.rx_phy); + // tx_phy/rx_phy: 1=1M, 2=2M, 3=Coded + break; default: break; } @@ -397,11 +404,27 @@ static void gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_ ESP_LOGI(CONN_TAG, "Connected, conn_id %u, remote "ESP_BD_ADDR_STR"", param->connect.conn_id, ESP_BD_ADDR_HEX(param->connect.remote_bda)); esp_ble_gap_update_conn_params(&conn_params); + // 请求 2M PHY 提升传输速度(对端不支持时自动回退 1M,不影响兼容性) + esp_ble_gap_set_preferred_phy(param->connect.remote_bda, + ESP_BLE_GAP_NO_PREFER_TRANSMIT_PHY | ESP_BLE_GAP_NO_PREFER_RECEIVE_PHY, + ESP_BLE_GAP_PHY_2M_PREF_MASK, + ESP_BLE_GAP_PHY_2M_PREF_MASK, + ESP_BLE_GAP_PHY_OPTIONS_NO_PREF); break; } case ESP_GATTS_DISCONNECT_EVT: ESP_LOGI(CONN_TAG, "Disconnected, remote "ESP_BD_ADDR_STR", reason 0x%02x", ESP_BD_ADDR_HEX(param->disconnect.remote_bda), param->disconnect.reason); + // 清理未完成的传输,防止内存泄漏 + if (SendStatus.isSend) { + ESP_LOGW(CONN_TAG, "传输中断,已接收 %d/%d 字节", + (int)SendStatus.port, (int)firstMeg.len); + SendStatus.isSend = false; + SendStatus.port = 0; + if (img_data) { free(img_data); img_data = NULL; } + if (filepath) { free(filepath); filepath = NULL; } + if (file_img) { fclose(file_img); file_img = NULL; } + } esp_ble_gap_start_advertising(&adv_params); break; default: diff --git a/sdkconfig b/sdkconfig index f575e23..7d4e97d 100644 --- a/sdkconfig +++ b/sdkconfig @@ -829,7 +829,7 @@ CONFIG_BT_BLUEDROID_ESP_COEX_VSC=y CONFIG_BT_BLE_ENABLED=y CONFIG_BT_GATTS_ENABLE=y # CONFIG_BT_GATTS_PPCP_CHAR_GAP is not set -CONFIG_BT_BLE_BLUFI_ENABLE=y +# CONFIG_BT_BLE_BLUFI_ENABLE is not set CONFIG_BT_GATT_MAX_SR_PROFILES=8 CONFIG_BT_GATT_MAX_SR_ATTRIBUTES=100 # CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_MANUAL is not set @@ -1032,7 +1032,12 @@ CONFIG_BT_SMP_MAX_BONDS=15 # CONFIG_BT_BLE_ACT_SCAN_REP_ADV_SCAN is not set CONFIG_BT_MAX_DEVICE_NAME_LEN=32 CONFIG_BT_BLE_RPA_TIMEOUT=900 -# CONFIG_BT_BLE_50_FEATURES_SUPPORTED is not set +CONFIG_BT_BLE_50_FEATURES_SUPPORTED=y +CONFIG_BT_BLE_50_EXTEND_ADV_EN=y +CONFIG_BT_BLE_50_PERIODIC_ADV_EN=y +CONFIG_BT_BLE_50_EXTEND_SCAN_EN=y +CONFIG_BT_BLE_50_EXTEND_SYNC_EN=y +CONFIG_BT_BLE_50_DTM_TEST_EN=y CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y CONFIG_BT_BLE_42_DTM_TEST_EN=y CONFIG_BT_BLE_42_ADV_EN=y diff --git a/sdkconfig.defaults b/sdkconfig.defaults index 6ea1f6a..771eb17 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -163,12 +163,13 @@ CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST=n CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY=n CONFIG_BT_RESERVE_DRAM=0x10000 -# BluFi Configuration -CONFIG_BT_BLUFI_ENABLED=y -CONFIG_BT_BLE_BLUFI_ENABLE=y -# Disable BLE 5.0 features for BluFi compatibility -CONFIG_BT_BLE_50_FEATURES_SUPPORTED=n -CONFIG_BT_BLUFI_MAX_CONN=1 +# BluFi 未被代码使用(两种模式均用自定义 GATT Server),关闭以兼容 BLE 5.0 +CONFIG_BT_BLUFI_ENABLED=n +CONFIG_BT_BLE_BLUFI_ENABLE=n +# BLE 5.0 启用 2M PHY 支持(图传速度翻倍) +CONFIG_BT_BLE_50_FEATURES_SUPPORTED=y +# 同时保留 BLE 4.2 legacy advertising(两种模式的广播和 GATT 都依赖) +CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y # Bluetooth and WiFi Coexistence CONFIG_ESP_COEX_SW_COEXIST_ENABLE=y diff --git a/sdkconfig.defaults.prod生产环境 b/sdkconfig.defaults.prod生产环境 index 34e8e28..f197a88 100644 --- a/sdkconfig.defaults.prod生产环境 +++ b/sdkconfig.defaults.prod生产环境 @@ -151,12 +151,13 @@ CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST=n CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY=n CONFIG_BT_RESERVE_DRAM=0x10000 -# BluFi Configuration -CONFIG_BT_BLUFI_ENABLED=y -CONFIG_BT_BLE_BLUFI_ENABLE=y -# Disable BLE 5.0 features for BluFi compatibility -CONFIG_BT_BLE_50_FEATURES_SUPPORTED=n -CONFIG_BT_BLUFI_MAX_CONN=1 +# BluFi 未被代码使用(两种模式均用自定义 GATT Server),关闭以兼容 BLE 5.0 +CONFIG_BT_BLUFI_ENABLED=n +CONFIG_BT_BLE_BLUFI_ENABLE=n +# BLE 5.0 启用 2M PHY 支持(图传速度翻倍) +CONFIG_BT_BLE_50_FEATURES_SUPPORTED=y +# 同时保留 BLE 4.2 legacy advertising(两种模式的广播和 GATT 都依赖) +CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y # Bluetooth and WiFi Coexistence CONFIG_ESP_COEX_SW_COEXIST_ENABLE=y