PRJ - ESP32 Scan WiFi#

Cache version

From: ESP32 Useful Wi-Fi Library Functions (Arduino IDE) —— Random Nerd Tutorials

原文非常全面,此处只重点摘录了网络扫描部分。

Scan Wi-Fi Networks#

Key Steps#

  1. WiFi.mode(WIFI_STA) : Station mode

  2. WiFi.scanNetworks() 后,得到的返回值是 wifi networks 的个数。

  3. WiFi.SSID(i),

  4. WiFi.RSSI(i)

WiFi.scanNetworks 的 API 设计的非常好记。首先,它返回的n 在后面遍厉时马上会用。对于每个 WiFi AP,都可以用类似下标的形式去访问它们的 SSID 和 RSSI。

Code List#

/*
  Example from WiFi > WiFiScan
  Complete details at https://RandomNerdTutorials.com/esp32-useful-wi-fi-functions-arduino/
*/

#include "WiFi.h"

void setup() {
//   Serial.begin(115200);
  Serial.begin(9600);

  // Set WiFi to station mode and disconnect from an AP if it was previously connected
  WiFi.mode(WIFI_STA);                         // 1
  WiFi.disconnect();
  delay(100);

  Serial.println("Setup done");
}

void loop() {
  Serial.println("scan start");

  // WiFi.scanNetworks will return the number of networks found
  int n = WiFi.scanNetworks();                   // 2
  Serial.println("scan done");
  if (n == 0) {
      Serial.println("no networks found");
  } else {
    Serial.print(n);
    Serial.println(" networks found");
    for (int i = 0; i < n; ++i) {
      // Print SSID and RSSI for each network found
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));                // 3
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));                // 4
      Serial.print(")");
      Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*");
      delay(10);
    }
  }
  Serial.println("");

  // Wait a bit before scanning again
  delay(5000);
}

Next#

实验结果表明, WiFi 的 RSSI 值很不稳定。

该方法可以在不需要接入 WiFi 网时,一次批量扫描 ESP32 可接收信号范围内的大量 WiFi 网络。