83 lines
3.1 KiB
C++
83 lines
3.1 KiB
C++
/*
|
|
* This sketch demonstrates how to scan WiFi networks. For chips that support 5GHz band, separate scans are done for all bands.
|
|
* The API is based on the Arduino WiFi Shield library, but has significant changes as newer WiFi functions are supported.
|
|
* E.g. the return value of `encryptionType()` different because more modern encryption is supported.
|
|
*/
|
|
#include "WiFi.h"
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
// Enable Station Interface
|
|
WiFi.STA.begin();
|
|
Serial.println("Setup done");
|
|
}
|
|
|
|
void ScanWiFi() {
|
|
Serial.println("Scan start");
|
|
// WiFi.scanNetworks will return the number of networks found.
|
|
int n = WiFi.scanNetworks();
|
|
Serial.println("Scan done");
|
|
if (n == 0) {
|
|
Serial.println("no networks found");
|
|
} else {
|
|
Serial.print(n);
|
|
Serial.println(" networks found");
|
|
Serial.println("Nr | SSID | RSSI | CH | Encryption");
|
|
for (int i = 0; i < n; ++i) {
|
|
// Print SSID and RSSI for each network found
|
|
Serial.printf("%2d", i + 1);
|
|
Serial.print(" | ");
|
|
Serial.printf("%-32.32s", WiFi.SSID(i).c_str());
|
|
Serial.print(" | ");
|
|
Serial.printf("%4ld", WiFi.RSSI(i));
|
|
Serial.print(" | ");
|
|
Serial.printf("%2ld", WiFi.channel(i));
|
|
Serial.print(" | ");
|
|
switch (WiFi.encryptionType(i)) {
|
|
case WIFI_AUTH_OPEN: Serial.print("open"); break;
|
|
case WIFI_AUTH_WEP: Serial.print("WEP"); break;
|
|
case WIFI_AUTH_WPA_PSK: Serial.print("WPA"); break;
|
|
case WIFI_AUTH_WPA2_PSK: Serial.print("WPA2"); break;
|
|
case WIFI_AUTH_WPA_WPA2_PSK: Serial.print("WPA+WPA2"); break;
|
|
case WIFI_AUTH_WPA2_ENTERPRISE: Serial.print("WPA2-EAP"); break;
|
|
case WIFI_AUTH_WPA3_PSK: Serial.print("WPA3"); break;
|
|
case WIFI_AUTH_WPA2_WPA3_PSK: Serial.print("WPA2+WPA3"); break;
|
|
case WIFI_AUTH_WAPI_PSK: Serial.print("WAPI"); break;
|
|
default: Serial.print("unknown");
|
|
}
|
|
Serial.println();
|
|
delay(10);
|
|
}
|
|
}
|
|
|
|
// Delete the scan result to free memory for code below.
|
|
WiFi.scanDelete();
|
|
Serial.println("-------------------------------------");
|
|
}
|
|
void loop() {
|
|
Serial.println("-------------------------------------");
|
|
Serial.println("Default wifi band mode scan:");
|
|
Serial.println("-------------------------------------");
|
|
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 4, 2)
|
|
WiFi.setBandMode(WIFI_BAND_MODE_AUTO);
|
|
#endif
|
|
ScanWiFi();
|
|
#if CONFIG_SOC_WIFI_SUPPORT_5G
|
|
// Wait a bit before scanning again.
|
|
delay(1000);
|
|
Serial.println("-------------------------------------");
|
|
Serial.println("2.4 Ghz wifi band mode scan:");
|
|
Serial.println("-------------------------------------");
|
|
WiFi.setBandMode(WIFI_BAND_MODE_2G_ONLY);
|
|
ScanWiFi();
|
|
// Wait a bit before scanning again.
|
|
delay(1000);
|
|
Serial.println("-------------------------------------");
|
|
Serial.println("5 Ghz wifi band mode scan:");
|
|
Serial.println("-------------------------------------");
|
|
WiFi.setBandMode(WIFI_BAND_MODE_5G_ONLY);
|
|
ScanWiFi();
|
|
#endif
|
|
// Wait a bit before scanning again.
|
|
delay(10000);
|
|
}
|