// https://randomnerdtutorials.com/esp32-useful-wi-fi-functions-arduino/
#include "WiFi.h"
// function declarations
void wlan_scan (void);
void initWiFi (void);
void reconnecting (void);
// Replace with your network credentials - WiFi credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Set your Static IP address - place outside loop() / setup()
IPAddress local_IP(10, 10, 0, 10);
IPAddress gateway(10, 10, 0, 138);
IPAddress subnet(255, 255, 255, 0);
IPAddress primaryDNS(8, 8, 8, 8); // optional
IPAddress secondaryDNS(8, 8, 4, 4); // optional
// ------------------- setup ---------------------------
void setup() {
Serial.begin(115200);
// Set WiFi to station mode and disconnect from an AP if it was previously connected
// WIFI_STA station mode: the ESP32 connects to an access point
// WIFI_AP access point mode: stations can connect to the ESP32
// WIFI_AP_STA access point and a station connected to another access point
WiFi.mode(WIFI_STA); // WiFi-Modus festlegen
// WiFi.mode() & WiFi.config() können auch Platz tauschen!
// OPTIONAL, -> Wifi-Beginn == WiFi.begin(ssid, password);
// Configures static IP address // static IP-Config
if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
Serial.println("STA Failed to configure");
}
// WiFi.disconnect();
delay(100);
// initial WiFi-Scan & Start command
wlan_scan();
initWiFi();
}
// ********************* main / loop() ******************************
void loop() {
// wlan_scan();
delay (1000);
// initWiFi();
reconnecting();
// WiFi.disconnect(); // am Ende der Verbindung
}
// *********************** Connect to a Wi-Fi Network ******************
// const char* ssid = "REPLACE_WITH_YOUR_SSID"; -> VOR setup()
// const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// IPAddress local_IP(10, 10, 0, 10); -> VOR setup()
// IPAddress gateway(10, 10, 0, 138);
// IPAddress subnet(255, 255, 255, 0);
void initWiFi() { // 1. ssid & password als Variable bestimmen
WiFi.mode(WIFI_STA); // 2. Modus des WLANs -> ?? optional ?? WIFI_STA
WiFi.begin(ssid, password); // 3. WiFi.begin mit "ssid" / "password"
Serial.print("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) { // 4. Abfrage: verbunden?
Serial.print('.');
/*
0 - WL_IDLE_STATUS temporary status assigned when WiFi.begin() is called
1 - WL_NO_SSID_AVAIL when no SSID are available
2 - WL_SCAN_COMPLETED scan networks is completed
3 - WL_CONNECTED when connected to a WiFi network **********
4 - WL_CONNECT_FAILED when the connection fails for all the attempts
5 - WL_CONNECTION_LOST when the connection is lost
6 - WL_DISCONNECTED when disconnected from a network
*/
delay(1000);
}
Serial.print(WiFi.localIP()); // Ausgabe der erhaltenen IP
Serial.print(" Stärke: ");
Serial.println(WiFi.RSSI(WiFi.scanNetworks())); // Received Signal Strength Indicator in --dB--
}
// *********************** wlan - scan *********************************
void wlan_scan (void)
{
Serial.println("scan start");
int n = WiFi.scanNetworks(); // WiFi.scanNetworks returns the number of networks found
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)); // WiFi.SSID() - Ausgabe des Names
Serial.print(" (");
Serial.print(WiFi.RSSI(i)); // Received Signal Strength Indicator in --dB--
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*");
// WIFI_AUTH_OPEN WIFI_AUTH_WEP WIFI_AUTH_WPA_PSK
// WIFI_AUTH_WPA2_PSK WIFI_AUTH_WPA_WPA2_PSK
delay(10);
}
}
Serial.println("");
delay(5000);
}
// *********************** WiFi - reconnect / disconnect ***************
void reconnecting (void)
{
unsigned long previousMillis = 0;
unsigned long interval = 30000;
unsigned long currentMillis = millis();
// if WiFi is down, try reconnecting every 30 sec
if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
Serial.print(millis());
Serial.println(" Reconnecting to WiFi... ");
// WiFi.disconnect();
WiFi.reconnect();
previousMillis = currentMillis;
}
/*
WiFi.reconnect(); // in case of lost connection
WiFi.disconnect(); // equivalent to WiFi.reconnect()
WiFi.begin(ssid, password);
*/
}