全信道扫描做到 ≥12s ,通常不是"信道少"本身的问题,而是 扫描策略/参数 + DFS/被动扫描 + 每信道驻留时间过长 叠加导致的。优化体验一般从三层下手:少扫、快扫、让用户感觉更快。
1) 少扫:别真的"全频段全信道"
-
跳过 DFS 信道 (5G 的 52--144 一般会被强制被动扫描,驻留更久,最容易把总时间拉到十几秒)。
只扫非 DFS:36/40/44/48 或 149/153/157/161/165(按你产品目标地区选择)。
-
确认你确实只在扫 4 条信道:有些情况下 country/region 没限制好,驱动会按法规表把 2.4G+5G 可用信道都扫一遍;你以为"4 条",实际在扫一大片。
2) 快扫:用主动扫描 + 缩短每信道时间
在 ESP-IDF/ESP Wi-Fi 里,决定扫描耗时的核心就是 每个信道停留多久:
-
优先用 Active Scan (主动发 Probe Request),并把
min/max调小。例如:
min=20~30ms, max=80~120ms(经验值,兼顾漏扫率)。 -
别用过大的 passive time;被动扫描一般要等 Beacon,默认值大就很慢。
你现在"4 信道还 12s",很像 被动扫描/DFS 或 max time 设置得很大。
3) 分段扫描:先快给结果,再后台补全(体验提升最大)
用户体验上最有效的是 两阶段/增量扫描:
-
第一阶段(0.5~2s 级):只扫最可能的信道(比如 2.4G 的 1/6/11 或你们最常用的那几条),扫完立刻把列表展示出来,允许用户马上点选。
-
第二阶段(后台):再补扫剩余的 5G/其它信道,扫描结果"陆续补进列表"。
实现方式:如果 API 一次只能指定一个 channel,那就 对 4 个信道循环做 4 次短扫描,每次扫完就合并结果并刷新 UI(用户不会感觉在等"一个大扫描")。
4) 若目的是"连接已保存 Wi-Fi",不要用"全信道扫描"
如果是自动回连场景,直接走更快的连接策略:
-
记住上次成功连接的信道:先指定 channel 快速尝试;失败再 fallback 扩大扫描范围。
-
如果你还能拿到 AP 的 BSSID ,可以走 指定 BSSID + channel 的快速连接,速度会非常明显。
5) 其它"体验型"技巧
-
扫描结果缓存(比如 30~60 秒内不重复扫,进页面先展示缓存,再静默刷新)。
-
UI 上显示"正在刷新列表..."但先给旧列表可用,不要空白转圈 12 秒。
建议你优先做的组合拳(最常用也最稳):
✅ 跳过 DFS + 主动扫描缩短每信道时间 + 分两阶段增量扫描(先2.4/常用信道,后补5G) ;若是回连则再加 ✅ 记忆信道/(可选)BSSID 快连。