From 40e7e8cf86682a736bc00b261a8fe50aa0bfa154 Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 4 Nov 2022 13:08:18 +0100 Subject: [PATCH 1/7] Only force WIFI_STA mode during init --- src/Arduino_WiFiConnectionHandler.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/Arduino_WiFiConnectionHandler.cpp b/src/Arduino_WiFiConnectionHandler.cpp index cc6727cf..582de02e 100644 --- a/src/Arduino_WiFiConnectionHandler.cpp +++ b/src/Arduino_WiFiConnectionHandler.cpp @@ -80,13 +80,8 @@ NetworkConnectionState WiFiConnectionHandler::update_handleInit() delay(5000); } #endif - #else - Debug.print(DBG_INFO, F("WiFi status ESP: %d"), WiFi.status()); - WiFi.disconnect(); - delay(300); - WiFi.begin(_ssid, _pass); - delay(1000); + WiFi.mode(WIFI_STA); #endif /* #if !defined(ARDUINO_ARCH_ESP8266) && !defined(ARDUINO_ARCH_ESP32) */ return NetworkConnectionState::CONNECTING; From 7d541f92ee1ffcd69a3dff8900f2b0ce21dbf5aa Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 4 Nov 2022 13:09:38 +0100 Subject: [PATCH 2/7] Print same WiFi status string for all boards --- src/Arduino_WiFiConnectionHandler.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Arduino_WiFiConnectionHandler.cpp b/src/Arduino_WiFiConnectionHandler.cpp index 582de02e..40612b86 100644 --- a/src/Arduino_WiFiConnectionHandler.cpp +++ b/src/Arduino_WiFiConnectionHandler.cpp @@ -54,10 +54,11 @@ unsigned long WiFiConnectionHandler::getTime() NetworkConnectionState WiFiConnectionHandler::update_handleInit() { -#if !defined(ARDUINO_ARCH_ESP8266) && !defined(ARDUINO_ARCH_ESP32) #if !defined(__AVR__) Debug.print(DBG_INFO, F("WiFi.status(): %d"), WiFi.status()); #endif + +#if !defined(ARDUINO_ARCH_ESP8266) && !defined(ARDUINO_ARCH_ESP32) if (WiFi.status() == NETWORK_HARDWARE_ERROR) { #if !defined(__AVR__) From 99dd1a4712102852679c726b8bca36f1b9fbebfd Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 4 Nov 2022 13:10:47 +0100 Subject: [PATCH 3/7] Call waitForConnectResult after WiFi.begin() - On ESP32 the call will block execution up to 1s - On ESP8266 the call will block execution up to 30s --- src/Arduino_WiFiConnectionHandler.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Arduino_WiFiConnectionHandler.cpp b/src/Arduino_WiFiConnectionHandler.cpp index 40612b86..255eabc8 100644 --- a/src/Arduino_WiFiConnectionHandler.cpp +++ b/src/Arduino_WiFiConnectionHandler.cpp @@ -90,12 +90,16 @@ NetworkConnectionState WiFiConnectionHandler::update_handleInit() NetworkConnectionState WiFiConnectionHandler::update_handleConnecting() { -#if !defined(ARDUINO_ARCH_ESP8266) && !defined(ARDUINO_ARCH_ESP32) if (WiFi.status() != WL_CONNECTED) { WiFi.begin(_ssid, _pass); +#if defined(ARDUINO_ARCH_ESP8266) + WiFi.waitForConnectResult(); +#endif +#if defined(ARDUINO_ARCH_ESP32) + WiFi.waitForConnectResult(1000); +#endif } -#endif /* #if !defined(ARDUINO_ARCH_ESP8266) && !defined(ARDUINO_ARCH_ESP32) */ if (WiFi.status() != NETWORK_CONNECTED) { From 0cac574e8dd5ff5f99280951527bfea6ea73e76f Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 4 Nov 2022 13:19:28 +0100 Subject: [PATCH 4/7] Increase connecting interval for ESP32 to allow reconnection --- src/Arduino_ConnectionHandler.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Arduino_ConnectionHandler.h b/src/Arduino_ConnectionHandler.h index 9a5d6961..87f5cc77 100644 --- a/src/Arduino_ConnectionHandler.h +++ b/src/Arduino_ConnectionHandler.h @@ -155,7 +155,11 @@ typedef void (*OnNetworkEventCallback)(); static unsigned int const CHECK_INTERVAL_TABLE[] = { /* INIT */ 100, +#if defined(ARDUINO_ARCH_ESP32) + /* CONNECTING */ 2000, +#else /* CONNECTING */ 500, +#endif /* CONNECTED */ 10000, /* DISCONNECTING */ 100, /* DISCONNECTED */ 1000, From 208ae9bb721729fd3eb685ccffcf1b4c75f20b5c Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 4 Nov 2022 15:24:44 +0100 Subject: [PATCH 5/7] Wait for connection. Implement timeout for ESP8266 - On ESP8266 the call will block execution up to 3s --- src/Arduino_WiFiConnectionHandler.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/Arduino_WiFiConnectionHandler.cpp b/src/Arduino_WiFiConnectionHandler.cpp index 255eabc8..cf20e343 100644 --- a/src/Arduino_WiFiConnectionHandler.cpp +++ b/src/Arduino_WiFiConnectionHandler.cpp @@ -23,6 +23,15 @@ #ifdef BOARD_HAS_WIFI /* Only compile if the board has WiFi */ +/****************************************************************************** + CONSTANTS + ******************************************************************************/ +#if defined(ARDUINO_ARCH_ESP8266) +static int const ESP_WIFI_CONNECTION_TIMEOUT = 3000; +#elif defined(ARDUINO_ARCH_ESP32) +static int const ESP_WIFI_CONNECTION_TIMEOUT = 1000; +#endif + /****************************************************************************** CTOR/DTOR ******************************************************************************/ @@ -93,12 +102,14 @@ NetworkConnectionState WiFiConnectionHandler::update_handleConnecting() if (WiFi.status() != WL_CONNECTED) { WiFi.begin(_ssid, _pass); -#if defined(ARDUINO_ARCH_ESP8266) - WiFi.waitForConnectResult(); -#endif -#if defined(ARDUINO_ARCH_ESP32) - WiFi.waitForConnectResult(1000); +#if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32) + /* Wait connection otherwise board won't connect */ + unsigned long start = millis(); + while((WiFi.status() != WL_CONNECTED) && (millis() - start) < ESP_WIFI_CONNECTION_TIMEOUT) { + delay(100); + } #endif + } if (WiFi.status() != NETWORK_CONNECTED) From 016b3b83e6b3f5ee7e7a692928d4d457c28b592f Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 4 Nov 2022 15:26:09 +0100 Subject: [PATCH 6/7] Use same check interval for ESP32 and ESP8266 --- src/Arduino_ConnectionHandler.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Arduino_ConnectionHandler.h b/src/Arduino_ConnectionHandler.h index 87f5cc77..79758066 100644 --- a/src/Arduino_ConnectionHandler.h +++ b/src/Arduino_ConnectionHandler.h @@ -155,7 +155,7 @@ typedef void (*OnNetworkEventCallback)(); static unsigned int const CHECK_INTERVAL_TABLE[] = { /* INIT */ 100, -#if defined(ARDUINO_ARCH_ESP32) +#if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32) /* CONNECTING */ 2000, #else /* CONNECTING */ 500, From 91f734574689818ad7653bcbcd26c4dfaae8509e Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 4 Nov 2022 18:01:23 +0100 Subject: [PATCH 7/7] Wait connection only if ESP8266 board --- src/Arduino_WiFiConnectionHandler.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Arduino_WiFiConnectionHandler.cpp b/src/Arduino_WiFiConnectionHandler.cpp index cf20e343..3eadcca2 100644 --- a/src/Arduino_WiFiConnectionHandler.cpp +++ b/src/Arduino_WiFiConnectionHandler.cpp @@ -28,8 +28,6 @@ ******************************************************************************/ #if defined(ARDUINO_ARCH_ESP8266) static int const ESP_WIFI_CONNECTION_TIMEOUT = 3000; -#elif defined(ARDUINO_ARCH_ESP32) -static int const ESP_WIFI_CONNECTION_TIMEOUT = 1000; #endif /****************************************************************************** @@ -93,7 +91,6 @@ NetworkConnectionState WiFiConnectionHandler::update_handleInit() #else WiFi.mode(WIFI_STA); #endif /* #if !defined(ARDUINO_ARCH_ESP8266) && !defined(ARDUINO_ARCH_ESP32) */ - return NetworkConnectionState::CONNECTING; } @@ -102,7 +99,7 @@ NetworkConnectionState WiFiConnectionHandler::update_handleConnecting() if (WiFi.status() != WL_CONNECTED) { WiFi.begin(_ssid, _pass); -#if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32) +#if defined(ARDUINO_ARCH_ESP8266) /* Wait connection otherwise board won't connect */ unsigned long start = millis(); while((WiFi.status() != WL_CONNECTED) && (millis() - start) < ESP_WIFI_CONNECTION_TIMEOUT) {