From 90024b8603172c8d51f1e382d0db69ab53ed49e8 Mon Sep 17 00:00:00 2001 From: Shawn A Date: Tue, 23 Jan 2018 13:28:49 -0600 Subject: [PATCH 01/47] adding def blocks, nonworking adding conditionals for all module types, there has been requests for other module support in addition to esp32, so I ma just gonna go ahead and avoid else fallbacks for now. Not working yet. --- WiFiManager.cpp | 155 ++++++++++++++++++++++++++++++------------------ WiFiManager.h | 17 ++++-- 2 files changed, 111 insertions(+), 61 deletions(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index 7aeafe5..c195611 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -465,7 +465,11 @@ uint8_t WiFiManager::waitForConnectResult() { void WiFiManager::startWPS() { DEBUG_WM("START WPS"); - WiFi.beginWPSConfig(); + #ifdef ESP8266 + WiFi.beginWPSConfig(); + #else + // @todo + #endif DEBUG_WM("END WPS"); } @@ -1339,34 +1343,57 @@ String WiFiManager::getWLStatusString(uint8_t status){ } String WiFiManager::encryptionTypeStr(uint8_t authmode) { - switch(authmode) { - case ENC_TYPE_NONE: - return "None"; - case ENC_TYPE_WEP: - return "WEP"; - case ENC_TYPE_TKIP: - return "WPA_PSK"; - case ENC_TYPE_CCMP: - return "WPA2_PSK"; - case ENC_TYPE_AUTO: - return "WPA_WPA2_PSK"; - default: - return "Unknown"; - } + #ifdef ESP8266 + switch(authmode) { + case ENC_TYPE_NONE: + return "None"; + case ENC_TYPE_WEP: + return "WEP"; + case ENC_TYPE_TKIP: + return "WPA_PSK"; + case ENC_TYPE_CCMP: + return "WPA2_PSK"; + case ENC_TYPE_AUTO: + return "WPA_WPA2_PSK"; + default: + return "Unknown"; + } + #elif defined(ESP31B) || defined(ESP32) + switch(authmode) { + case WIFI_AUTH_OPEN: + return "None"; + case WIFI_AUTH_WEP: + return "WEP"; + case WIFI_AUTH_WPA_PSK: + return "WPA_PSK"; + case WIFI_AUTH_WPA_WPA2_PSK: + return "WPA2_PSK"; + case WIFI_AUTH_WPA2_ENTERPRISE: + return "WPA_WPA2_ENTERPRISE"; + case WIFI_AUTH_MAX: + return "MAX"; + default: + return "Unknown"; + } + #endif } // set mode ignores WiFi.persistent bool WiFiManager::WiFi_Mode(WiFiMode_t m,bool persistent) { - if((wifi_get_opmode() == (uint8) m ) && !persistent) { - return true; - } - bool ret; - ETS_UART_INTR_DISABLE(); - if(persistent) ret = wifi_set_opmode(m); - else ret = wifi_set_opmode_current(m); - ETS_UART_INTR_ENABLE(); + #ifdef ESP8266 + if((wifi_get_opmode() == (uint8) m ) && !persistent) { + return true; + } + bool ret; + ETS_UART_INTR_DISABLE(); + if(persistent) ret = wifi_set_opmode(m); + else ret = wifi_set_opmode_current(m); + ETS_UART_INTR_ENABLE(); - return ret; + return ret; + #elif defined(ESP31B) || defined(ESP32) + return WiFi.mode(m); // @todo persistent not implemented? + #endif } bool WiFiManager::WiFi_Mode(WiFiMode_t m) { return WiFi_Mode(m,false); @@ -1374,51 +1401,65 @@ bool WiFiManager::WiFi_Mode(WiFiMode_t m) { // sta disconnect without persistent bool WiFiManager::WiFi_Disconnect() { - if((WiFi.getMode() & WIFI_STA) != 0) { - bool ret; - DEBUG_WM(F("wifi station disconnect")); - ETS_UART_INTR_DISABLE(); - ret = wifi_station_disconnect(); - ETS_UART_INTR_ENABLE(); - return ret; - } + #ifdef ESP8266 + if((WiFi.getMode() & WIFI_STA) != 0) { + bool ret; + DEBUG_WM(F("wifi station disconnect")); + ETS_UART_INTR_DISABLE(); + ret = wifi_station_disconnect(); + ETS_UART_INTR_ENABLE(); + return ret; + } + #elif defined(ESP31B) || defined(ESP32) + DEBUG_WM(F("wifi station disconnect")); + // @todo why does disconnect call these, might be needed + // WiFi.getMode(); // wifiLowLevelInit() + // esp_wifi_start(); + return esp_wifi_disconnect() == ESP_OK; + #endif } // toggle STA without persistent bool WiFiManager::WiFi_enableSTA(bool enable,bool persistent) { + #ifdef ESP8266 + WiFiMode_t currentMode = WiFi.getMode(); + bool isEnabled = ((currentMode & WIFI_STA) != 0); - WiFiMode_t currentMode = WiFi.getMode(); - bool isEnabled = ((currentMode & WIFI_STA) != 0); - - if((isEnabled != enable) || persistent) { - if(enable) { - if(persistent) DEBUG_WM(F("enableSTA PERSISTENT ON")); - return WiFi_Mode((WiFiMode_t)(currentMode | WIFI_STA),persistent); - } else { - return WiFi_Mode((WiFiMode_t)(currentMode & (~WIFI_STA)),persistent); - } - } else { - return true; - } + if((isEnabled != enable) || persistent) { + if(enable) { + if(persistent) DEBUG_WM(F("enableSTA PERSISTENT ON")); + return WiFi_Mode((WiFiMode_t)(currentMode | WIFI_STA),persistent); + } else { + return WiFi_Mode((WiFiMode_t)(currentMode & (~WIFI_STA)),persistent); + } + } else { + return true; + } + #elif defined(ESP31B) || defined(ESP32) + return WiFi.mode(m); // @todo persistent not implemented? + #endif } bool WiFiManager::WiFi_enableSTA(bool enable) { return WiFi_enableSTA(enable,false); } -// erase config BUG polyfill -// https://github.com/esp8266/Arduino/pull/3635 bool WiFiManager::WiFi_eraseConfig(void) { - // return ESP.eraseConfig(); + #ifdef ESP8266 + return ESP.eraseConfig(); + // https://github.com/esp8266/Arduino/pull/3635 + // erase config BUG polyfill + // const size_t cfgSize = 0x4000; + // size_t cfgAddr = ESP.getFlashChipSize() - cfgSize; - const size_t cfgSize = 0x4000; - size_t cfgAddr = ESP.getFlashChipSize() - cfgSize; - - for (size_t offset = 0; offset < cfgSize; offset += SPI_FLASH_SEC_SIZE) { - if (!ESP.flashEraseSector((cfgAddr + offset) / SPI_FLASH_SEC_SIZE)) { - return false; - } - } - return true; + // for (size_t offset = 0; offset < cfgSize; offset += SPI_FLASH_SEC_SIZE) { + // if (!ESP.flashEraseSector((cfgAddr + offset) / SPI_FLASH_SEC_SIZE)) { + // return false; + // } + // } + // return true; + #else + // @todo + #endif } void WiFiManager::reboot(){ diff --git a/WiFiManager.h b/WiFiManager.h index 1b02b56..1c7e99e 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -13,22 +13,31 @@ #ifndef WiFiManager_h #define WiFiManager_h -#if defined(ESP8266) +#ifdef ESP8266 #include #include +#elif defined(ESP31B) || defined(ESP32) + #include +#else #endif #include #include -#if defined(ESP8266) +#ifdef ESP8266 extern "C" { #include "user_interface.h" } #endif -#define WIFI_getChipId() ESP.getChipId() -#define WIFI_AUTH_OPEN ENC_TYPE_NONE +#ifdef ESP8266 + #define WIFI_getChipId() ESP.getChipId() + #define WIFI_AUTH_OPEN ENC_TYPE_NONE +#elif defined(ESP31B) || defined(ESP32) + #define WIFI_getChipId() (uint32_t)ESP.getEfuseMac() + #define WIFI_AUTH_OPEN WIFI_AUTH_OPEN +#else +#endif const char HTTP_HEAD[] PROGMEM = "{v}"; // const char HTTP_STYLE[] PROGMEM = ""; From f3be7c7c0b6f020986a48e51ee3d9954387618f6 Mon Sep 17 00:00:00 2001 From: Shawn A Date: Tue, 23 Jan 2018 14:07:33 -0600 Subject: [PATCH 02/47] it compiles --- WiFiManager.cpp | 19 ++++++++++++++----- WiFiManager.h | 7 ++++++- .../OnDemandConfigPortal.ino | 9 +++++++-- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index c195611..033d7a7 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -178,10 +178,10 @@ void WiFiManager::stopWebPortal() { } boolean WiFiManager::configPortalHasTimeout(){ - if(_configPortalTimeout == 0 || wifi_softap_get_station_num() > 0){ + if(_configPortalTimeout == 0 ){ //|| wifi_softap_get_station_num() > 0){ if(millis() - timer > 30000){ timer = millis(); - DEBUG_WM("NUM CLIENTS: " + (String)wifi_softap_get_station_num()); + // DEBUG_WM("NUM CLIENTS: " + (String)wifi_softap_get_station_num()); } _configPortalStart = millis(); // kludge, bump configportal start time to skew timeouts return false; @@ -206,7 +206,11 @@ void WiFiManager::setupConfigPortal() { // setup dns and web servers dnsServer.reset(new DNSServer()); - server.reset(new ESP8266WebServer(80)); + #ifdef ESP8266 + server.reset(new ESP8266WebServer(80)); + #elif defined(ESP31B) || defined(ESP32) + server.reset(new WebServer(80)); + #endif /* Setup the DNS server redirecting all the domains to the apIP */ dnsServer->setErrorReplyCode(DNSReplyCode::NoError); @@ -884,6 +888,7 @@ void WiFiManager::handleInfo() { // @todo add versioning here + #ifdef ESP8266 page += F("

esp8266


"); // subject to rollover! @@ -1001,6 +1006,7 @@ void WiFiManager::handleInfo() { page += F(""); page += F("
"); + #endif page += "
"; page += F("

Available Pages


"); @@ -1260,6 +1266,7 @@ void WiFiManager::DEBUG_WM(Generic text,Genericb textb) { */ void WiFiManager::debugSoftAPConfig(){ + #ifdef ESP8266 softap_config config; wifi_softap_get_config(&config); @@ -1274,6 +1281,7 @@ void WiFiManager::debugSoftAPConfig(){ DEBUG_WM(F("max_connection: "),config.max_connection); DEBUG_WM(F("beacon_interval: "),(String)config.beacon_interval + "(ms)"); DEBUG_WM(F("--------------------")); + #endif } @@ -1415,7 +1423,8 @@ bool WiFiManager::WiFi_Disconnect() { // @todo why does disconnect call these, might be needed // WiFi.getMode(); // wifiLowLevelInit() // esp_wifi_start(); - return esp_wifi_disconnect() == ESP_OK; + // return esp_wifi_disconnect() == ESP_OK; // @todo BUG not declared in scope + return WiFi.disconnect(); #endif } @@ -1436,7 +1445,7 @@ bool WiFiManager::WiFi_enableSTA(bool enable,bool persistent) { return true; } #elif defined(ESP31B) || defined(ESP32) - return WiFi.mode(m); // @todo persistent not implemented? + return WiFi.mode(WIFI_STA); // @todo persistent not implemented? #endif } bool WiFiManager::WiFi_enableSTA(bool enable) { diff --git a/WiFiManager.h b/WiFiManager.h index 1c7e99e..29e8cda 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -18,6 +18,7 @@ #include #elif defined(ESP31B) || defined(ESP32) #include + #include #else #endif @@ -173,7 +174,11 @@ class WiFiManager private: std::unique_ptr dnsServer; - std::unique_ptr server; + #ifdef ESP8266 + std::unique_ptr server; + #elif defined(ESP31B) || defined(ESP32) + std::unique_ptr server; + #endif //const int WM_DONE = 0; //const int WM_WAIT = 10; diff --git a/examples/OnDemandConfigPortal/OnDemandConfigPortal.ino b/examples/OnDemandConfigPortal/OnDemandConfigPortal.ino index 1292c35..1cb8205 100644 --- a/examples/OnDemandConfigPortal/OnDemandConfigPortal.ino +++ b/examples/OnDemandConfigPortal/OnDemandConfigPortal.ino @@ -1,7 +1,12 @@ +#ifdef ESP8266 #include //https://github.com/esp8266/Arduino - //needed for library #include +#else +#include +#include +#endif + #include #include //https://github.com/tzapu/WiFiManager @@ -49,7 +54,7 @@ void loop() { Serial.println("failed to connect and hit timeout"); delay(3000); //reset and try again, or maybe put it to deep sleep - ESP.reset(); + ESP.restart(); delay(5000); } From 2af1c62bd11c4aa6c6443f7d808ca81bb2da0b0d Mon Sep 17 00:00:00 2001 From: Shawn A Date: Wed, 24 Jan 2018 08:27:56 -0600 Subject: [PATCH 03/47] redo esp32 disconnect --- WiFiManager.cpp | 8 ++++---- WiFiManager.h | 1 + examples/OnDemandConfigPortal/OnDemandConfigPortal.ino | 5 +++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index 033d7a7..584c131 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -1421,10 +1421,10 @@ bool WiFiManager::WiFi_Disconnect() { #elif defined(ESP31B) || defined(ESP32) DEBUG_WM(F("wifi station disconnect")); // @todo why does disconnect call these, might be needed - // WiFi.getMode(); // wifiLowLevelInit() - // esp_wifi_start(); - // return esp_wifi_disconnect() == ESP_OK; // @todo BUG not declared in scope - return WiFi.disconnect(); + // WiFi.getMode(); // @todo wifiLowLevelInit(), probably not needed, for save config only + // esp_wifi_start(); // @todo can only disconnect if enabled perhaps, prevent failure, or correct for previous call ? + return esp_wifi_disconnect() == ESP_OK; + // return WiFi.disconnect(); #endif } diff --git a/WiFiManager.h b/WiFiManager.h index 29e8cda..45a0e37 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -19,6 +19,7 @@ #elif defined(ESP31B) || defined(ESP32) #include #include + #include #else #endif diff --git a/examples/OnDemandConfigPortal/OnDemandConfigPortal.ino b/examples/OnDemandConfigPortal/OnDemandConfigPortal.ino index 1cb8205..617b0f0 100644 --- a/examples/OnDemandConfigPortal/OnDemandConfigPortal.ino +++ b/examples/OnDemandConfigPortal/OnDemandConfigPortal.ino @@ -14,6 +14,7 @@ // ESP-01 users please note: the only pins available (0 and 2), are shared // with the bootloader, so always set them HIGH at power-up #define TRIGGER_PIN 0 +const char* modes[] = { "NULL", "STA", "AP", "STA+AP" }; void setup() { @@ -21,6 +22,10 @@ void setup() { Serial.begin(115200); Serial.println("\n Starting"); + Serial.setDebugOutput(true); + Serial.println(modes[WiFi.getMode()]); + WiFi.printDiag(Serial); + pinMode(TRIGGER_PIN, INPUT); } From 2a50d797a06210cc531578b26e926eec44c59d2f Mon Sep 17 00:00:00 2001 From: Shawn A Date: Wed, 24 Jan 2018 08:50:24 -0600 Subject: [PATCH 04/47] fix esp32 softap numclients --- WiFiManager.cpp | 12 ++++++++++-- WiFiManager.h | 3 ++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index 584c131..bec013a 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -178,10 +178,10 @@ void WiFiManager::stopWebPortal() { } boolean WiFiManager::configPortalHasTimeout(){ - if(_configPortalTimeout == 0 ){ //|| wifi_softap_get_station_num() > 0){ + if(_configPortalTimeout == 0 || WiFi_softap_num_stations() > 0){ if(millis() - timer > 30000){ timer = millis(); - // DEBUG_WM("NUM CLIENTS: " + (String)wifi_softap_get_station_num()); + DEBUG_WM("NUM CLIENTS: " + (String)WiFi_softap_num_stations()); } _configPortalStart = millis(); // kludge, bump configportal start time to skew timeouts return false; @@ -1473,4 +1473,12 @@ bool WiFiManager::WiFi_eraseConfig(void) { void WiFiManager::reboot(){ ESP.restart(); +} + +uint8_t WiFiManager::WiFi_softap_num_stations(){ + #ifdef ESP8266 + return wifi_softap_get_station_num(); + #elif defined(ESP31B) || defined(ESP32) + return WiFi.softAPgetStationNum(); + #endif } \ No newline at end of file diff --git a/WiFiManager.h b/WiFiManager.h index 45a0e37..ee7d805 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -253,7 +253,8 @@ class WiFiManager bool WiFi_enableSTA(bool enable,bool persistent); bool WiFi_eraseConfig(); void debugSoftAPConfig(); - + uint8_t WiFi_softap_num_stations(); + String getParamOut(); String getScanItemOut(); String getStaticOut(); From e5879b2101f13c20f2cd84cde73da2bd17b01670 Mon Sep 17 00:00:00 2001 From: Shawn A Date: Wed, 24 Jan 2018 11:05:28 -0600 Subject: [PATCH 05/47] fix esp32 autoconnect --- WiFiManager.cpp | 29 ++++++++++++++++++++++------- WiFiManager.h | 4 +++- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index bec013a..60305fe 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -98,7 +98,7 @@ WiFiManager::WiFiManager():_debugPort(Serial) { // destructor WiFiManager::~WiFiManager() { if(_userpersistent) WiFi.persistent(true); // reenable persistent, there is no getter we rely on _userpersistent - WiFi.mode(_usermode); + if(_usermode != WIFI_OFF) WiFi.mode(_usermode); DEBUG_WM(F("unloading")); } @@ -114,6 +114,7 @@ boolean WiFiManager::autoConnect(char const *apName, char const *apPassword) { // attempt to connect using saved settings, on fail fallback to AP config portal WiFi_enableSTA(true); + _usermode = WIFI_STA; // if already connected, or try stored connect if (WiFi.status() == WL_CONNECTED || connectWifi("", "") == WL_CONNECTED) { @@ -325,17 +326,19 @@ uint8_t WiFiManager::handleConfigPortal(){ // Waiting for save... if (connect) { connect = false; - delay(2000); - DEBUG_WM(F("Connecting save WiFi")); + DEBUG_WM(F("Connecting to a new AP")); // attempt sta connection to submitted _ssid, _pass if (connectWifi(_ssid, _pass) == WL_CONNECTED) { - DEBUG_WM(F("Connect to new AP SUCCESS")); + DEBUG_WM(F("Connect to new AP [SUCCESS]")); + delay(500); + DEBUG_WM(F("Got IP Address:")); + DEBUG_WM(WiFi.localIP()); stopConfigPortal(); return WL_CONNECTED; // success } - DEBUG_WM(F("Failed to connect.")); + DEBUG_WM(F("Connect to new AP [FAILED]")); if (_shouldBreakAfterConfig) { // this is more of an exiting callback than a save @@ -414,7 +417,7 @@ int WiFiManager::connectWifi(String ssid, String pass) { //@todo catch failures in set_config } else { // connect using saved ssid if there is one - if (WiFi.SSID() != "") { + if (WiFi_hasAutoConnect()) { DEBUG_WM("Connecting to saved AP"); WiFi_enableSTA(true,storeSTAmode); WiFi.begin(); @@ -1430,10 +1433,10 @@ bool WiFiManager::WiFi_Disconnect() { // toggle STA without persistent bool WiFiManager::WiFi_enableSTA(bool enable,bool persistent) { + #ifdef ESP8266 WiFiMode_t currentMode = WiFi.getMode(); bool isEnabled = ((currentMode & WIFI_STA) != 0); - if((isEnabled != enable) || persistent) { if(enable) { if(persistent) DEBUG_WM(F("enableSTA PERSISTENT ON")); @@ -1481,4 +1484,16 @@ uint8_t WiFiManager::WiFi_softap_num_stations(){ #elif defined(ESP31B) || defined(ESP32) return WiFi.softAPgetStationNum(); #endif +} + +bool WiFiManager::WiFi_hasAutoConnect(){ + #ifdef ESP8266 + return WiFi.SSID() != ""; + #elif defined(ESP31B) || defined(ESP32) + wifi_config_t conf; + esp_wifi_get_config(WIFI_IF_STA, &conf); + const char* ssid = reinterpret_cast(conf.sta.ssid); + DEBUG_WM(ssid); + return ssid != ""; + #endif } \ No newline at end of file diff --git a/WiFiManager.h b/WiFiManager.h index ee7d805..97f7410 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -252,8 +252,10 @@ class WiFiManager bool WiFi_enableSTA(bool enable); bool WiFi_enableSTA(bool enable,bool persistent); bool WiFi_eraseConfig(); - void debugSoftAPConfig(); uint8_t WiFi_softap_num_stations(); + bool WiFi_hasAutoConnect(); + + void debugSoftAPConfig(); String getParamOut(); String getScanItemOut(); From ceaf53f604bf4473e981dba355455f0ca59a5c2c Mon Sep 17 00:00:00 2001 From: Shawn A Date: Wed, 24 Jan 2018 13:13:25 -0600 Subject: [PATCH 06/47] 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(); From ead2b7353cfb5ddc53c4533ef5069f90aeb8e869 Mon Sep 17 00:00:00 2001 From: Shawn A Date: Wed, 24 Jan 2018 13:16:06 -0600 Subject: [PATCH 07/47] enable autoreconnect --- WiFiManager.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WiFiManager.h b/WiFiManager.h index a70ca86..324d564 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -223,8 +223,8 @@ class WiFiManager boolean _shouldBreakAfterConfig = false; boolean _tryWPS = false; boolean _configPortalIsBlocking = true; - boolean _wifiAutoReconnect = false; - + boolean _wifiAutoReconnect = true; + const char* _customHeadElement = ""; //String getEEPROMString(int start, int len); From 8dbe045655608768f1fb57919034f4f393b8727b Mon Sep 17 00:00:00 2001 From: Shawn A Date: Wed, 24 Jan 2018 13:36:34 -0600 Subject: [PATCH 08/47] remove system_event_info_t arg --- WiFiManager.cpp | 2 +- WiFiManager.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index eceade8..e9194dc 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -1504,7 +1504,7 @@ bool WiFiManager::WiFi_hasAutoConnect(){ #endif } -void WiFiManager::WiFiEvent(WiFiEvent_t event, system_event_info_t info){ +void WiFiManager::WiFiEvent(WiFiEvent_t event){ WiFiManager _WiFiManager; if(event == SYSTEM_EVENT_STA_DISCONNECTED){ // Serial.println("Event: SYSTEM_EVENT_STA_DISCONNECTED, reconnecting"); diff --git a/WiFiManager.h b/WiFiManager.h index 324d564..b07011e 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -258,7 +258,7 @@ class WiFiManager uint8_t WiFi_softap_num_stations(); bool WiFi_hasAutoConnect(); void WiFi_autoReconnect(); - static void WiFiEvent(WiFiEvent_t event, system_event_info_t info); + static void WiFiEvent(WiFiEvent_t event); void debugSoftAPConfig(); From 7189e36c59cf67994c884b499596315e1ee3c3b7 Mon Sep 17 00:00:00 2001 From: Shawn A Date: Wed, 24 Jan 2018 13:54:58 -0600 Subject: [PATCH 09/47] clean up defines, remove esp31b --- WiFiManager.cpp | 16 ++++++++-------- WiFiManager.h | 51 +++++++++++++++++++++++++------------------------ 2 files changed, 34 insertions(+), 33 deletions(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index e9194dc..66e3824 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -211,7 +211,7 @@ void WiFiManager::setupConfigPortal() { dnsServer.reset(new DNSServer()); #ifdef ESP8266 server.reset(new ESP8266WebServer(80)); - #elif defined(ESP31B) || defined(ESP32) + #elif defined(ESP32) server.reset(new WebServer(80)); #endif @@ -1375,7 +1375,7 @@ String WiFiManager::encryptionTypeStr(uint8_t authmode) { default: return "Unknown"; } - #elif defined(ESP31B) || defined(ESP32) + #elif defined(ESP32) switch(authmode) { case WIFI_AUTH_OPEN: return "None"; @@ -1408,7 +1408,7 @@ bool WiFiManager::WiFi_Mode(WiFiMode_t m,bool persistent) { ETS_UART_INTR_ENABLE(); return ret; - #elif defined(ESP31B) || defined(ESP32) + #elif defined(ESP32) return WiFi.mode(m); // @todo persistent not implemented? #endif } @@ -1427,7 +1427,7 @@ bool WiFiManager::WiFi_Disconnect() { ETS_UART_INTR_ENABLE(); return ret; } - #elif defined(ESP31B) || defined(ESP32) + #elif defined(ESP32) DEBUG_WM(F("wifi station disconnect")); // @todo why does disconnect call these, might be needed // WiFi.getMode(); // @todo wifiLowLevelInit(), probably not needed, for save config only @@ -1453,7 +1453,7 @@ bool WiFiManager::WiFi_enableSTA(bool enable,bool persistent) { } else { return true; } - #elif defined(ESP31B) || defined(ESP32) + #elif defined(ESP32) return WiFi.mode(WIFI_STA); // @todo persistent not implemented? #endif } @@ -1487,7 +1487,7 @@ void WiFiManager::reboot(){ uint8_t WiFiManager::WiFi_softap_num_stations(){ #ifdef ESP8266 return wifi_softap_get_station_num(); - #elif defined(ESP31B) || defined(ESP32) + #elif defined(ESP32) return WiFi.softAPgetStationNum(); #endif } @@ -1495,7 +1495,7 @@ uint8_t WiFiManager::WiFi_softap_num_stations(){ bool WiFiManager::WiFi_hasAutoConnect(){ #ifdef ESP8266 return WiFi.SSID() != ""; - #elif defined(ESP31B) || defined(ESP32) + #elif defined(ESP32) wifi_config_t conf; esp_wifi_get_config(WIFI_IF_STA, &conf); const char* ssid = reinterpret_cast(conf.sta.ssid); @@ -1516,7 +1516,7 @@ void WiFiManager::WiFiEvent(WiFiEvent_t event){ void WiFiManager::WiFi_autoReconnect(){ #ifdef ESP8266 WiFi.setAutoReconnect(_wifiAutoReconnect); - #elif defined(ESP31B) || defined(ESP32) + #elif defined(ESP31B) if(_wifiAutoReconnect){ DEBUG_WM("ESP32 autoreconnect handler enabled"); WiFi.onEvent(WiFiEvent); diff --git a/WiFiManager.h b/WiFiManager.h index b07011e..cbb219c 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -13,34 +13,34 @@ #ifndef WiFiManager_h #define WiFiManager_h +#define WEBSERVERSHIM // use webserver shim lib + #ifdef ESP8266 - #include - #include -#elif defined(ESP31B) || defined(ESP32) - #include - #include - #include + + extern "C" { + #include "user_interface.h" + } + #include + #include + + #define WIFI_getChipId() ESP.getChipId() + #define WIFI_AUTH_OPEN ENC_TYPE_NONE + +#elif defined(ESP32) + + #include + #include + #include + + #define WIFI_getChipId() (uint32_t)ESP.getEfuseMac() + #define WIFI_AUTH_OPEN WIFI_AUTH_OPEN + #else #endif #include #include -#ifdef ESP8266 - extern "C" { - #include "user_interface.h" - } -#endif - -#ifdef ESP8266 - #define WIFI_getChipId() ESP.getChipId() - #define WIFI_AUTH_OPEN ENC_TYPE_NONE -#elif defined(ESP31B) || defined(ESP32) - #define WIFI_getChipId() (uint32_t)ESP.getEfuseMac() - #define WIFI_AUTH_OPEN WIFI_AUTH_OPEN -#else -#endif - const char HTTP_HEAD[] PROGMEM = "{v}"; // const char HTTP_STYLE[] PROGMEM = ""; const char HTTP_STYLE[] PROGMEM = "