-
-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Create dot185-multi-wifi-reconnect-khoih.ino
- Loading branch information
1 parent
e5acdb4
commit 61a0ef5
Showing
1 changed file
with
196 additions
and
0 deletions.
There are no files selected for viewing
196 changes: 196 additions & 0 deletions
196
...18-wifi-webserver/dot185-multi-wifi-reconnect-khoih/dot185-multi-wifi-reconnect-khoih.ino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,196 @@ | ||
/************************************************************************************************************************************** | ||
renamed by Rocksetta to dot185-multi-wifi-reconnect-khoih.ino may 2022 | ||
was | ||
WiFiMulti.ino | ||
For any WiFi shields, such as ESP32, ESP8266, Portenta_H7, WiFiNINA W101, W102, W13x, or custom, such as ESP8266/ESP32-AT, etc | ||
WiFiMulti_Generic is a library to adapt the ESP32/ESP8266 WiFiMulti feature to other WiFi modules | ||
Based on and modified from WiFiMulti of ESP32 core: https://github.com/espressif/arduino-esp32 | ||
Based on and modified from WiFiMulti of ESP8266 core: https://github.com/esp8266/Arduino | ||
Built by Khoi Hoang https://github.com/khoih-prog/WiFiMulti_Generic | ||
License under GPL-3.0 | ||
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License | ||
as published bythe Free Software Foundation, either version 3 of the License, or (at your option) any later version. | ||
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. | ||
You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/> | ||
***************************************************************************************************************************************/ | ||
|
||
#include "defines.h" | ||
|
||
WiFiMulti_Generic wifiMulti; | ||
|
||
void heartBeatPrint() | ||
{ | ||
static int num = 1; | ||
|
||
//WFM_LOGDEBUG1("\nWiFi connected, RSSI:", WiFi.RSSI()); | ||
|
||
if (WiFi.status() == WL_CONNECTED) | ||
Serial.print(F("H")); // H means connected to WiFi | ||
else | ||
Serial.print(F("F")); // F means not connected to WiFi | ||
|
||
if (num == 80) | ||
{ | ||
Serial.println(); | ||
num = 1; | ||
} | ||
else if (num++ % 10 == 0) | ||
{ | ||
Serial.print(F(" ")); | ||
} | ||
} | ||
|
||
uint8_t connectMultiWiFi() | ||
{ | ||
#if defined(ESP32) | ||
// For ESP32, this better be 0 to shorten the connect time. | ||
// For ESP32-S2/C3, must be > 500 | ||
#if ( USING_ESP32_S2 || USING_ESP32_C3 ) | ||
#define WIFI_MULTI_1ST_CONNECT_WAITING_MS 500L | ||
#else | ||
// For ESP32 core v1.0.6, must be >= 500 | ||
#define WIFI_MULTI_1ST_CONNECT_WAITING_MS 800L | ||
#endif | ||
#elif (defined(ESP8266)) | ||
// For ESP8266, this better be 2200 to enable connect the 1st time | ||
#define WIFI_MULTI_1ST_CONNECT_WAITING_MS 2200L | ||
#else | ||
// For general board, this better be 1000 to enable connect the 1st time | ||
#define WIFI_MULTI_1ST_CONNECT_WAITING_MS 1000L | ||
#endif | ||
|
||
#define WIFI_MULTI_CONNECT_WAITING_MS 500L | ||
|
||
Serial.println("WiFi lost. Trying to scan and reconnect"); | ||
|
||
WiFi.disconnect(); | ||
|
||
int i = 0; | ||
|
||
uint8_t status = wifiMulti.run(); | ||
|
||
delay(WIFI_MULTI_1ST_CONNECT_WAITING_MS); | ||
|
||
while ( ( i++ < 20 ) && ( status != WL_CONNECTED ) ) | ||
{ | ||
status = WiFi.status(); | ||
|
||
if ( status == WL_CONNECTED ) | ||
break; | ||
else | ||
delay(WIFI_MULTI_CONNECT_WAITING_MS); | ||
} | ||
|
||
if ( status == WL_CONNECTED ) | ||
{ | ||
WFM_LOGERROR1(F("WiFi connected after time: "), i); | ||
WFM_LOGERROR3(F("SSID:"), WiFi.SSID(), F(",RSSI="), WiFi.RSSI()); | ||
|
||
#if (defined(ESP32) || defined(ESP8266)) | ||
WFM_LOGERROR3(F("Channel:"), WiFi.channel(), F(",IP address:"), WiFi.localIP() ); | ||
#else | ||
WFM_LOGERROR1(F("IP address:"), WiFi.localIP() ); | ||
#endif | ||
} | ||
else | ||
{ | ||
WFM_LOGERROR(F("WiFi not connected")); | ||
|
||
if (wifiMulti.run() != WL_CONNECTED) | ||
{ | ||
Serial.println("WiFi not connected!"); | ||
delay(1000); | ||
} | ||
} | ||
|
||
return status; | ||
} | ||
|
||
void check_WiFi() | ||
{ | ||
#if ( defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_PORTENTA_H7_M4) ) | ||
// Workaround for bug in https://github.com/arduino/ArduinoCore-mbed/issues/381 | ||
if ( (WiFi.status() != WL_CONNECTED) || (WiFi.RSSI() == 0) ) | ||
#else | ||
if ( (WiFi.status() != WL_CONNECTED) ) | ||
#endif | ||
{ | ||
Serial.println(F("\nWiFi lost. Call connectMultiWiFi in loop")); | ||
connectMultiWiFi(); | ||
} | ||
} | ||
|
||
void check_status() | ||
{ | ||
static uint32_t checkstatus_timeout = 0; | ||
static uint32_t checkwifi_timeout = 0; | ||
|
||
static uint32_t current_millis; | ||
|
||
#define WIFICHECK_INTERVAL 1000L | ||
#define HEARTBEAT_INTERVAL 10000L | ||
|
||
current_millis = millis(); | ||
|
||
// Check WiFi every WIFICHECK_INTERVAL (1) seconds. | ||
if ((current_millis > checkwifi_timeout) || (checkwifi_timeout == 0)) | ||
{ | ||
check_WiFi(); | ||
checkwifi_timeout = current_millis + WIFICHECK_INTERVAL; | ||
} | ||
|
||
// Print hearbeat every HEARTBEAT_INTERVAL (10) seconds. | ||
if ((current_millis > checkstatus_timeout) || (checkstatus_timeout == 0)) | ||
{ | ||
heartBeatPrint(); | ||
checkstatus_timeout = current_millis + HEARTBEAT_INTERVAL; | ||
} | ||
|
||
// Important delay() for RTL8720DN | ||
delay(200); | ||
} | ||
|
||
void setup() | ||
{ | ||
Serial.begin(115200); | ||
while (!Serial); | ||
|
||
delay(200); | ||
|
||
Serial.print(F("\nStarting WiFiMulti on ")); Serial.println(BOARD_NAME); | ||
Serial.println(WIFIMULTI_GENERIC_VERSION); | ||
|
||
#if WIFI_USING_ESP_AT | ||
// initialize serial for ESP module | ||
EspSerial.begin(115200); | ||
// initialize ESP module | ||
WiFi.init(&EspSerial); | ||
|
||
Serial.println(F("WiFi shield init done")); | ||
#endif | ||
|
||
wifiMulti.addAP(your_ssid, your_pass); | ||
wifiMulti.addAP("ssid_from_AP_1", "your_password_for_AP_1"); | ||
wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2"); | ||
wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3"); | ||
|
||
Serial.println("Connecting WiFi..."); | ||
|
||
if (wifiMulti.run() == WL_CONNECTED) | ||
{ | ||
Serial.print("\nWiFi connected, IP address: "); | ||
Serial.println(WiFi.localIP()); | ||
} | ||
} | ||
|
||
void loop() | ||
{ | ||
check_status(); | ||
} |