Initial commit

This commit is contained in:
2024-12-21 19:54:30 +01:00
commit b813bdcf99
9 changed files with 319 additions and 0 deletions

123
src/main.cpp Normal file
View File

@@ -0,0 +1,123 @@
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <settings.h>
int numNetworks = sizeof(ssidList) / sizeof(ssidList[0]); // Anzahl der Netzwerke
int current_ap = 0; // Start mit der ersten SSID
bool reconnecting = false; // Flag für den Reconnect-Status
// LCD initialisieren (16x2 Display)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// WLAN Symbol
byte customChar_wlan[] = {
B00000,
B01110,
B10001,
B00100,
B01010,
B00000,
B00100,
B00000
};
// Funktion, um zu einem der Netzwerke zu verbinden
void connectToWiFi() {
Serial.println("WLAN Verbindungsaufbau zu: " + String(ssidList[current_ap]));
lcd.setCursor(0, 0);
lcd.print(" Bitte warten ");
lcd.setCursor(0, 1);
lcd.print("WLAN verbinden ");
lcd.createChar(0, customChar_wlan); // WLAN-Symbol anzeigen
// WLAN-Symbol anzeigen
lcd.setCursor(15, 1); // Zum Beispiel in der rechten oberen Ecke
lcd.write(byte(0)); // Das Symbol mit Code 0 anzeigen
// Verbinde mit dem aktuellen AP (SSID und Passwort aus den Arrays)
WiFi.begin(ssidList[current_ap], passwordList[current_ap]);
// Warte auf die Verbindung
int attempt = 0;
while (WiFi.status() != WL_CONNECTED && attempt < 10) {
delay(250);
Serial.print("."); // Punkt ausgeben, um anzuzeigen, dass es versucht, sich zu verbinden
lcd.setCursor(15, 1);
lcd.print(" ");
delay(250);
lcd.setCursor(15, 1);
lcd.write(byte(0));
attempt++;
}
// Wenn keine Verbindung hergestellt werden konnte, wechsle zum nächsten Netzwerk
if (WiFi.status() != WL_CONNECTED) {
WiFi.disconnect();
delay(500);
Serial.println("");
Serial.println("Verbindung fehlgeschlagen.");
current_ap = (current_ap + 1) % numNetworks; // Wechsel zur nächsten SSID, nach der letzten wieder zur ersten
reconnecting = false; // Zurücksetzen des Flags, falls alle Netzwerke fehlgeschlagen sind
}
else {
Serial.print("\nWLAN verbunden: ");
Serial.print(WiFi.SSID());
Serial.print(" ");
Serial.println(WiFi.RSSI());
lcd.setCursor(0, 0);
lcd.print(" WLAN verbunden ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(WiFi.SSID());
reconnecting = false; // Verbindung erfolgreich, setze reconnecting zurück
delay(2500);
}
}
void setup() {
Serial.begin(921600); // Baudrate auf 921600 gesetzt
delay(10);
lcd.init();
lcd.backlight();
Serial.println("Bereit");
WiFi.mode(WIFI_STA); // ESP32 im STA-Modus (Client-Modus)
WiFi.setHostname(hostname); // Setze Hostnamen
}
void loop() {
// Prüfe, ob die Verbindung verloren wurde
if (WiFi.status() != WL_CONNECTED && !reconnecting) {
Serial.println("WLAN Verbindung verloren. Versuche erneut zu verbinden...");
reconnecting = true; // Setze Flag, dass ein Reconnectversuch läuft
connectToWiFi(); // Versuche eine neue Verbindung
}
// Wenn alle Netzwerke durchlaufen wurden und noch keine Verbindung besteht, setze das reconnecting-Flag zurück
if (WiFi.status() != WL_CONNECTED && current_ap == 0) {
reconnecting = false;
}
delay(1000);
}

24
src/settings.h Normal file
View File

@@ -0,0 +1,24 @@
#ifndef SETTINGS_H
#define SETTINGS_H
// ######################## WLAN-Daten ########################
const char* hostname = "ESP32_WLAN_Test";
const char* ssidList[] = {
"SSID_1", // Netzwerk 1
"SSID_2", // Netzwerk 2
"SSID_3" // Netzwerk 3
// Weitere SSID hier hinzufügen
};
const char* passwordList[] = {
"Passwort_1", // Passwort für SSID 1
"Passwort_2", // Passwort für SSID 2
"Passwort_3" // Passwort für SSID 3
// Weitere Passwörter hier hinzufügen
};
// ############################################################
#endif // SETTINGS_H