#include <WiFi.h>
const int maxNetworks = 20; // Max number of networks to scan
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
delay(1000);
Serial.println("Scanning for Wi-Fi networks...");
int networkCount = WiFi.scanNetworks();
if (networkCount == 0) {
Serial.println("No networks found.");
} else {
Serial.println("Found networks:");
for (int i = 0; i < networkCount; i++) {
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (Signal Strength: ");
Serial.print(WiFi.RSSI(i));
Serial.println(" dBm)");
}
}
Serial.println("Enter the number of the network you want to connect to:");
}
void loop() {
static int step = 0;
static int networkIndex = -1;
static String ssid;
static String password;
if (Serial.available()) {
String input = Serial.readStringUntil('\n');
input.trim();
switch (step) {
case 0:
networkIndex = input.toInt() - 1; // Convert input to network index
if (networkIndex >= 0 && networkIndex < WiFi.scanNetworks()) {
ssid = WiFi.SSID(networkIndex);
Serial.print("You selected: ");
Serial.println(ssid);
Serial.println("Enter the password for this network:");
step = 1;
} else {
Serial.println("Invalid selection. Enter the number of the network you want to connect to:");
}
break;
case 1:
password = input;
Serial.print("Connecting to ");
Serial.print(ssid);
Serial.println("...");
WiFi.begin(ssid.c_str(), password.c_str());
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 20) {
delay(500);
Serial.print(".");
attempts++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nConnected successfully!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
} else {
Serial.println("\nFailed to connect. Please try again.");
}
step = 0;
break;
}
}
}