C5仅支持20MHZ带宽,如果路由器5Gwifi处于40MHZ带宽信道时,会出现配网失败
是的,这会导致“怎么都连不上”。结论先说:
如果路由器把 5 GHz 固定在 40 MHz(或以上)带宽,而你的 C5 只支持 5 GHz 的 20 MHz 带宽,那么 STA 连接一定会失败。固件里不可能“把 40 MHz AP 连成 20 MHz”,只能两种思路:
1)让路由器把 5 GHz 调到 20 MHz / “20/40 自动”;或
2)设备在配网阶段只允许 2.4 GHz,避免用户选中不兼容的 5 GHz SSID。
下面给你几处“硬防呆”改法,选其一或全部上:
方案 A:配网期强制 2.4 GHz(推荐)
在进入配网/尝试连接前加一行(配网完成再恢复为 DUAL):
// 进入配网时:
esp_wifi_set_band_mode(WIFI_BAND_MODE_2G_ONLY);// 配网成功后(要连回你实际想要的配置时):
esp_wifi_set_band_mode(WIFI_BAND_MODE_DUAL); // 或你需要的模式
这样用户就看不到 5 GHz 的 SSID(或看到了也不会去连),彻底规避 5 GHz 40 MHz 的坑。
方案 B:始终把 STA 侧带宽锁定到 20 MHz
这行只限制本机带宽,不会把 AP 的 40 MHz 变成 20 MHz(AP 固定 40 MHz 仍然会失败),但能避免某些 AP 在 2.4 GHz 下尝试 40 MHz 时造成的不兼容:
// 配置 STA 前/后均可
esp_wifi_set_bandwidth(WIFI_IF_STA, WIFI_BW_HT20);
方案 C:扫描结果里“识别并屏蔽不兼容的 5G@40MHz”
IDF v5 的 wifi_ap_record_t
里有 band
与 second
字段(副信道)。5 GHz 且 second ≠ NONE 基本就是 40 MHz。你可以在 AP/BLUFi 的“可选网络”里直接做灰/隐藏,并在 Web/APP 上给出提示。
// 扫描后过滤
uint16_t ap_num = 0;
esp_wifi_scan_get_ap_num(&ap_num);
std::vector<wifi_ap_record_t> recs(ap_num);
esp_wifi_scan_get_ap_records(&ap_num, recs.data());for (auto &r : recs) {bool is_5g = (r.band == WIFI_BAND_5G); // 仅 v5+bool is_40m = (r.second != WIFI_SECOND_CHAN_NONE); // 有副信道 => 40MHzif (is_5g && is_40m) {// 标记为不兼容 / 不加入候选列表// (也可在 JSON 里带 flag 给前端显示“仅支持 20MHz”)continue;}// …正常加入候选
}
如果你的 IDF 版本没有
band/second
,可以用primary
信道范围粗判 5 GHz(36–165),副信道无法直接拿到,那就退而求其次:发现 5 GHz 就提示只支持 20 MHz。
方案 D:连接失败时给出“可理解”的错误提示
在 WIFI_EVENT_STA_DISCONNECTED
里判断原因,若是连接/关联失败并且目标是 5 GHz,可以提示“请把路由器 5G 带宽改为 20 MHz,或使用 2.4 GHz”。
else if (event_id == WIFI_EVENT_STA_DISCONNECTED) {wifi_event_sta_disconnected_t *e = (wifi_event_sta_disconnected_t*)event_data;ESP_LOGW(TAG, "Disconnected, reason=%d", e->reason);// 这里可记录上次尝试连接的 BSS 频段(在扫描/选择时保存),若判定为 5GHz 则提示带宽问题
}
放在你项目中的位置建议
你目前在
WifiConfigurationAp::StartAccessPoint()
里已经做了:#ifdef CONFIG_SOC_WIFI_SUPPORT_5G esp_wifi_set_band_mode(WIFI_BAND_MODE_2G_ONLY); #endif
把这段提前到“进入配网模式”更合适(AP + BLUFi 全程 2.4 GHz),配网成功再恢复为
DUAL
。在
ConnectToWifi()
里连接之前加:esp_wifi_set_bandwidth(WIFI_IF_STA, WIFI_BW_HT20);
(无害,2.4 G 下一般更稳)
在 Web 配网/BLUFi 返回的 AP 列表里做一次过滤/打标(方案 C)。
实际用户操作的兜底话术(出厂提示)
“设备仅支持 5 GHz 20 MHz 带宽。如果您的 5 GHz 路由器带宽固定在 40/80/160 MHz,请在路由器中将 5 GHz 带宽设置为 20 MHz 或 20/40 自动,或改用 2.4 GHz 进行连接。”
这样做之后,配网时就不会再撞上“5 G 40 MHz”的坑了。需要我直接把上述改动 patch 到你现有 WifiConfigurationAp
/ BLUFi 列表输出里吗?