You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32中WiFi.scanNetworks耗时过长,如何针对指定SSID优化?

ESP32指定SSID快速采集RSSI优化方案

核心优化思路

针对仅需采集3个特定SSID的需求,从缩小扫描范围和优化扫描逻辑两个方向入手,大幅降低扫描耗时:


1. 限制扫描频段与扫描类型

默认WiFi.scanNetworks()会主动扫描全频段所有通道,耗时极长。可通过修改扫描参数切换为被动扫描(仅监听Beacon帧,不主动发送探测请求),同时锁定锚点所在频段:

// 被动扫描模式,不扫隐藏网络,仅扫描2.4G频段
int n = WiFi.scanNetworks(false, false, false, 300, 1);

参数说明:

  • 第1个false:启用被动扫描,比主动扫描耗时缩短60%以上
  • 第2个false:跳过隐藏SSID扫描
  • 第3个false:仅扫描2.4G频段(锚点在5G则设为true)
  • 第4个300:单通道扫描时长(单位ms,最小可设100,进一步压缩耗时)
  • 第5个1:扫描通道数(若知道锚点具体通道,可指定通道列表)

2. 找到目标后提前终止循环

一旦集齐3个目标SSID的RSSI数据,直接跳出循环,无需遍历全部扫描结果:

// 定义目标SSID数组
const String targetSSIDs[] = {"TRUNG DUONG1", "TRUNG DUONG2", "TRUNG DUONG3"};
int rssiResults[3] = {0, 0, 0};
int foundCount = 0;

int n = WiFi.scanNetworks(false, false, false, 300, 1);
for (int i = 0; i < n && foundCount < 3; ++i) {
    String currentSSID = WiFi.SSID(i);
    for (int j = 0; j < 3; ++j) {
        if (currentSSID == targetSSIDs[j] && rssiResults[j] == 0) {
            rssiResults[j] = WiFi.RSSI(i);
            foundCount++;
            break;
        }
    }
}

// 赋值到myData
myData.a = rssiResults[0];
myData.b = rssiResults[1];
myData.c = rssiResults[2];

3. 精准扫描锚点所在通道

若提前知晓锚点的工作通道(可通过路由器后台查看),直接指定扫描这些通道,跳过无关通道,耗时能再降一半:

// 假设锚点分别在通道6、11、3
uint8_t targetChannels[] = {6, 11, 3};
int n = WiFi.scanNetworks(false, false, false, 300, 3, targetChannels);

额外提示

  • 被动扫描的RSSI精度略低于主动扫描,但完全满足目标追踪场景需求
  • 若锚点MAC地址固定,可通过匹配MAC替代SSID,避免重名干扰,匹配速度更快

内容的提问来源于stack exchange,提问作者Quang Trung Vũ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 23:45:59