当前位置: 首页 > news >正文

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 里有 bandsecond 字段(副信道)。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 列表输出里吗?

http://www.dtcms.com/a/356402.html

相关文章:

  • Git 合并冲突
  • 【网络】snat/MASQUERADE作用和应用场景
  • 【混合开发】Android+WebView视频图片播放硬件加速详解
  • 网页提示UI操作-适应提示,警告,信息——仙盟创梦IDE
  • 嵌入式学习 day61 DHT11、I2C
  • 项目一系列-第8章 性能优化Redis基础
  • Python OpenCV图像处理与深度学习
  • 30分钟入门实战速成Cursor IDE(2)
  • 30分钟入门实战速成Cursor IDE(1)
  • 微硕WINSOK高性能NP沟道MOS管WSP4067在Type-C双向快充电源管理系统中的应用
  • Vibe Coding、AI IDE/插件
  • Ansible Playbook 实践
  • 随机森林的 “Bootstrap 采样” 与 “特征随机选择”:如何避免过拟合?(附分类 / 回归任务实战)
  • html入门教程
  • Java使用apache.commons.math3的DBSCAN实现自动聚类
  • 【Docker/Redis】服务端高并发分布式结构演进之路
  • 构建免费的音视频转文字工具:支持多语言的语音识别项目
  • OpenTenBase实战:从MySQL迁移到分布式HTAP的那些坑与收获
  • mysql双机热备(主主模式)
  • 桌面GIS软件添加第三方图层
  • 【web3】十分钟了解web3是什么?
  • Java 将HTML文件、HTML字符串转换为图片
  • 交叉编译 手动安装 libzip 库 移植ARM 需要 zlib的
  • R ggplot2学习Nature子刊一张图,换数据即可用!
  • [机器学习]基于K-means聚类算法的鸢尾花数据及分类
  • 把 AI 塞进「智能跳绳」——基于 MEMS 传感器的零样本卡路里估算器
  • 机器学习回顾——线性回归
  • GitHub 宕机自救指南:打造韧性开发体系
  • 基于站点、模式、遥感多源降水数据融合与评估;Python驱动下,从基础处理、机器学习建模到气候态产品生成的全流程解析
  • Consul 操作命令汇总 - Prometheus服务注册