From ceaf53f604bf4473e981dba355455f0ca59a5c2c Mon Sep 17 00:00:00 2001 From: Shawn A Date: Wed, 24 Jan 2018 13:13:25 -0600 Subject: [PATCH] adds esp32 autoreconnector Using static event cb for now, feel free to improve, this functionality should be fixed in core soon --- WiFiManager.cpp | 26 ++++++++++++++++++++++++++ WiFiManager.h | 9 +++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index 60305fe..eceade8 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -116,6 +116,8 @@ boolean WiFiManager::autoConnect(char const *apName, char const *apPassword) { WiFi_enableSTA(true); _usermode = WIFI_STA; + WiFi_autoReconnect(); + // if already connected, or try stored connect if (WiFi.status() == WL_CONNECTED || connectWifi("", "") == WL_CONNECTED) { //connected @@ -1224,6 +1226,10 @@ void WiFiManager::setCaptivePortalEnable(boolean enabled){ _enableCaptivePortal = enabled; } +void WiFiManager::setWiFiAutoReconnect(boolean enabled){ + _wifiAutoReconnect = enabled; +} + // HELPERS template @@ -1496,4 +1502,24 @@ bool WiFiManager::WiFi_hasAutoConnect(){ DEBUG_WM(ssid); return ssid != ""; #endif +} + +void WiFiManager::WiFiEvent(WiFiEvent_t event, system_event_info_t info){ + WiFiManager _WiFiManager; + if(event == SYSTEM_EVENT_STA_DISCONNECTED){ + // Serial.println("Event: SYSTEM_EVENT_STA_DISCONNECTED, reconnecting"); + _WiFiManager.DEBUG_WM("ESP32 Event: SYSTEM_EVENT_STA_DISCONNECTED, reconnecting"); // @todo remove debugging from prod, or change static method + WiFi.reconnect(); + } +} + +void WiFiManager::WiFi_autoReconnect(){ + #ifdef ESP8266 + WiFi.setAutoReconnect(_wifiAutoReconnect); + #elif defined(ESP31B) || defined(ESP32) + if(_wifiAutoReconnect){ + DEBUG_WM("ESP32 autoreconnect handler enabled"); + WiFi.onEvent(WiFiEvent); + } + #endif } \ No newline at end of file diff --git a/WiFiManager.h b/WiFiManager.h index 97f7410..a70ca86 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -172,6 +172,8 @@ class WiFiManager void setShowStaticFields(boolean alwaysShow); //if true disable captive portal redirection void setCaptivePortalEnable(boolean enabled); + // if true enable autoreconnecting + void setWiFiAutoReconnect(boolean enabled); private: std::unique_ptr dnsServer; @@ -221,7 +223,8 @@ class WiFiManager boolean _shouldBreakAfterConfig = false; boolean _tryWPS = false; boolean _configPortalIsBlocking = true; - + boolean _wifiAutoReconnect = false; + const char* _customHeadElement = ""; //String getEEPROMString(int start, int len); @@ -254,7 +257,9 @@ class WiFiManager bool WiFi_eraseConfig(); uint8_t WiFi_softap_num_stations(); bool WiFi_hasAutoConnect(); - + void WiFi_autoReconnect(); + static void WiFiEvent(WiFiEvent_t event, system_event_info_t info); + void debugSoftAPConfig(); String getParamOut();