From 944b156528d56ddb6d16569fc99012692f6daf7e Mon Sep 17 00:00:00 2001 From: Manuel Weiser Date: Thu, 27 Feb 2025 21:53:48 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20verbessere=20WLAN-Konfiguration=20und?= =?UTF-8?q?=20f=C3=BCge=20mDNS-Unterst=C3=BCtzung=20hinzu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/wlan.cpp | 90 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 67 insertions(+), 23 deletions(-) diff --git a/src/wlan.cpp b/src/wlan.cpp index c1fd90e..d7c1781 100644 --- a/src/wlan.cpp +++ b/src/wlan.cpp @@ -3,6 +3,8 @@ #include #include #include +#include +#include #include "display.h" #include "config.h" @@ -10,33 +12,60 @@ WiFiManager wm; bool wm_nonblocking = false; uint8_t wifiErrorCounter = 0; -void initWiFi() { - // Optimierte WiFi-Einstellungen - WiFi.mode(WIFI_STA); // explicitly set mode, esp defaults to STA+AP - WiFi.setSleep(false); // disable sleep mode - esp_wifi_set_ps(WIFI_PS_NONE); +void wifiSettings() { + // Optimierte WiFi-Einstellungen + WiFi.mode(WIFI_STA); // explicitly set mode, esp defaults to STA+AP + WiFi.setSleep(false); // disable sleep mode + WiFi.setHostname("FilaMan"); + esp_wifi_set_ps(WIFI_PS_NONE); + + // Maximale Sendeleistung + WiFi.setTxPower(WIFI_POWER_19_5dBm); // Set maximum transmit power - // Maximale Sendeleistung - WiFi.setTxPower(WIFI_POWER_19_5dBm); // Set maximum transmit power + // Optimiere TCP/IP Stack + esp_wifi_set_protocol(WIFI_IF_STA, WIFI_PROTOCOL_11B | WIFI_PROTOCOL_11G | WIFI_PROTOCOL_11N); + + // Aktiviere WiFi-Roaming für bessere Stabilität + esp_wifi_set_rssi_threshold(-80); +} - // Optimiere TCP/IP Stack - esp_wifi_set_protocol(WIFI_IF_STA, WIFI_PROTOCOL_11B | WIFI_PROTOCOL_11G | WIFI_PROTOCOL_11N); - - // Aktiviere WiFi-Roaming für bessere Stabilität - esp_wifi_set_rssi_threshold(-80); +void startMDNS() { + if (!MDNS.begin("filaman")) { + Serial.println("Error setting up MDNS responder!"); + while(1) { + vTaskDelay(1000 / portTICK_PERIOD_MS); + } + } + Serial.println("mDNS responder started"); +} + +void configModeCallback (WiFiManager *myWiFiManager) { + Serial.println("Entered config mode"); + oledShowTopRow(); + oledShowMessage("WiFi Config Mode"); +} + +void initWiFi() { + // load Wifi settings + wifiSettings(); + + wm.setAPCallback(configModeCallback); + + wm.setSaveConfigCallback([]() { + Serial.println("Configurations updated"); + ESP.restart(); + }); if(wm_nonblocking) wm.setConfigPortalBlocking(false); - wm.setConfigPortalTimeout(320); // Portal nach 5min schließen + //wm.setConfigPortalTimeout(320); // Portal nach 5min schließen + wm.setWiFiAutoReconnect(true); + wm.setConnectTimeout(5); oledShowTopRow(); oledShowMessage("WiFi Setup"); - bool res; - // res = wm.autoConnect(); // auto generated AP name from chipid - res = wm.autoConnect("FilaMan"); // anonymous ap - // res = wm.autoConnect("spoolman","password"); // password protected ap - - if(!res) { + //bool res = wm.autoConnect("FilaMan"); // anonymous ap + if(!wm.autoConnect("FilaMan")) { Serial.println("Failed to connect or hit timeout"); // ESP.restart(); oledShowTopRow(); @@ -52,6 +81,11 @@ void initWiFi() { oledShowTopRow(); display.display(); + + vTaskDelay(500 / portTICK_PERIOD_MS); + + // mDNS + startMDNS(); } } @@ -59,21 +93,31 @@ void checkWiFiConnection() { if (WiFi.status() != WL_CONNECTED) { Serial.println("WiFi connection lost. Reconnecting..."); + wifiOn = false; oledShowTopRow(); - oledShowMessage("WiFi reconnecting..."); + oledShowMessage("WiFi reconnecting"); WiFi.reconnect(); // Versuche, die Verbindung wiederherzustellen - delay(5000); // Warte 5 Sekunden, bevor erneut geprüft wird + vTaskDelay(5000 / portTICK_PERIOD_MS); // Warte 5 Sekunden, bevor erneut geprüft wird if (WiFi.status() != WL_CONNECTED) { Serial.println("Failed to reconnect. Restarting WiFi..."); WiFi.disconnect(); - delay(1000); + Serial.println("WiFi disconnected."); + vTaskDelay(1000 / portTICK_PERIOD_MS); wifiErrorCounter++; - //initWiFi(); + + //wifiSettings(); + WiFi.reconnect(); + Serial.println("WiFi reconnecting..."); + WiFi.waitForConnectResult(); } else { + Serial.println("WiFi reconnected."); wifiErrorCounter = 0; + wifiOn = true; + oledShowTopRow(); + startMDNS(); } }