全信道扫描做到≥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 快连。