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

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.xdnf.cn/news/19166.html

相关文章:

  • Pytest 插件方法:pytest_runtest_makereport
  • Stream API 讲解
  • Day17_【机器学习—在线数据集 鸢尾花案例】
  • 宜春城区SDH网图分析
  • 漫谈《数字图像处理》之浅析图割分割
  • 从9.4%到13.5%:ICDM2025录取率触底反弹,竞争压力稍缓
  • 新工具-mybatis-flex学习及应用
  • 大模型应用开发笔记(了解篇)
  • 使用 Bright Data Web Scraper API + Python 高效抓取 Glassdoor 数据:从配置到结构化输出全流程实战
  • Vue 项目首屏加载速度优化
  • 阿里云百炼智能体连接云数据库实践(DMS MCP)
  • AI-调查研究-64-机器人 从零构建机械臂:电机、减速器、传感器与控制系统全剖析
  • 深入解析Qt节点编辑器框架:交互逻辑与样式系统(二)
  • 如何使用 Vector 连接 Easysearch
  • cloudflare-ddns
  • nacos登录认证
  • 2026届大数据毕业设计选题推荐-基于Python的出行路线规划与推荐系统 爬虫数据可视化分析
  • 使用TensorFlow Lite Mirco 跑mirco_speech语音识别yes/no
  • Blender中旋转与翻转纹理的实用方法教学
  • Speculation Rules API
  • 华为HCIP数通学习与认证解析!
  • 从零开始的云计算生活——第五十四天,悬梁刺股,kubernetes模块之组件与网络
  • rapid_table v3.0.0发布了
  • MySQL数据库精研之旅第十四期:索引的 “潜规则”(上)
  • 新手向:Python实现数据可视化图表生成
  • 《R for Data Science (2e)》免费中文翻译 (第6章) --- scripts and projects
  • MySQL-内置函数
  • 【C++详解】C++11(一) 列表初始化、右值引⽤和移动语义
  • 2025五天申请邓白氏编码成功
  • 第八篇 永磁同步电机控制-MTPA、MTPV