This fast article shows you how to reconnect ESP32 to Wi-Fi Network After losing the Connection. This may be useful in the following circumstances: the ESP32 temporarily loses Wi-Fi signal; the ESP32 is temporarily out of range of the router's Wi-Fi; the router restarts; the router loses internet connection; or other conditions.
We have a similar guide for the ESP8266 NodeMCU board:
- [SOLVED] Reconnect ESP8266 NodeMCU to Wi-Fi Network After Lost Connection (SOON)
You should also take a look at WiFiMulti. You may register multiple networks (SSID/password combinations) using it. The ESP32 will connect to the Wi-Fi network that has the strongest signal strength (RSSI). If the connection is lost, it will automatically connect to the next network in the list. Read this article: ESP32 WiFiMulti: Connect to the Strongest Wi-Fi Network (from a list of networks).
Reconnect to Wi-Fi Network After Lost Connection
You may use WiFi to reconnect once a connection is lost. WiFi.reconnect()
is used to try to reconnect to a previously connected access point.
WiFi.reconnect()
Or, you can call WiFi.disconnect()
followed by WiFi.begin(ssid,password)
.
WiFi.disconnect();
WiFi.begin(ssid, password);
When the connection is lost, you may also try restarting the ESP32 using ESP.restart()
.
You may add something to the loop()
, like the snippet below, that checks once in a while whether the board is connected and tries to reconnect if it has lost connection.
unsigned long currentMillis = millis();
// if WiFi is down, try reconnecting
if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
Serial.print(millis());
Serial.println("Reconnecting to WiFi...");
WiFi.disconnect();
WiFi.reconnect();
previousMillis = currentMillis;
}
Don't forget to specify the interval
and previousMillis
variables. In milliseconds (for instance, 30 seconds), the interval
represents the period of time between each check:
unsigned long previousMillis = 0;
unsigned long interval = 30000;
Here’s a complete example.
/*
LEDEdit PRO
Complete project details at https://lededitpro.com/resolve-reconnect-esp32-to-wi-fi-network
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/
#include <WiFi.h>
// Replace with your network credentials (STATION)
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
unsigned long previousMillis = 0;
unsigned long interval = 30000;
void initWiFi() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println(WiFi.localIP());
}
void setup() {
Serial.begin(115200);
initWiFi();
Serial.print("RSSI: ");
Serial.println(WiFi.RSSI());
}
void loop() {
unsigned long currentMillis = millis();
// if WiFi is down, try reconnecting every CHECK_WIFI_TIME seconds
if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
Serial.print(millis());
Serial.println("Reconnecting to WiFi...");
WiFi.disconnect();
WiFi.reconnect();
previousMillis = currentMillis;
}
}
This example shows how to connect to a network and check every 30 seconds to make sure it's still connected. If not, it disconnects and tries to reconnect.
Alternatively, you may use Wi-Fi Events to detect a lost connection and call a function to handle what to do when that happens (see the next section).
ESP32 Wi-Fi Events
The ESP32 can handle a variety of Wi-Fi events. Wi-Fi Events eliminate the need to continually check the Wi-Fi status. When an event occurs, the associated handling function is automatically called.
The following events are very useful to detect if the connection was lost or reestablished:
ARDUINO_EVENT_WIFI_STA_CONNECTED
: the ESP32 is connected in station mode to an access point/hotspot (your router);ARDUINO_EVENT_WIFI_STA_DISCONNECTED
: the ESP32 station disconnected from the access point.
Go to the next section to see an application example.
Reconnect to Wi-Fi Network After Lost Connection (Wi-Fi Events)
Wi-Fi events might be useful to identify when a connection has been lost and to try to reconnect later (use the ARDUINO_EVENT_WIFI_STA_DISCONNECTED
event). A sample of the code is shown below:
/*
LEDEdit PRO
Complete project details at https://lededitpro.com/resolve-reconnect-esp32-to-wi-fi-network/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/
#include <WiFi.h>
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.println("Connected to AP successfully!");
}
void WiFiGotIP(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void WiFiStationDisconnected(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.println("Disconnected from WiFi access point");
Serial.print("WiFi lost connection. Reason: ");
Serial.println(info.wifi_sta_disconnected.reason);
Serial.println("Trying to Reconnect");
WiFi.begin(ssid, password);
}
void setup(){
Serial.begin(115200);
// delete old config
WiFi.disconnect(true);
delay(1000);
WiFi.onEvent(WiFiStationConnected, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_CONNECTED);
WiFi.onEvent(WiFiGotIP, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_GOT_IP);
WiFi.onEvent(WiFiStationDisconnected, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
/* Remove WiFi event
Serial.print("WiFi Event ID: ");
Serial.println(eventID);
WiFi.removeEvent(eventID);*/
WiFi.begin(ssid, password);
Serial.println();
Serial.println();
Serial.println("Wait for WiFi... ");
}
void loop(){
delay(1000);
}
How does it work?
We've included three Wi-Fi events in this example: when the ESP32 connects when it obtains an IP address, and when it disconnects: ARDUINO_EVENT_WIDI_STA_CONNECTED
, ARDUINO_EVENT_WIFI_STA_GOT_IP
, and ARDUINO_EVENT_WIFI_STA_DISCONNECTED
.
The WiFiStationConnected()
function is invoked when the ESP32 station connects to the access point (ARDUINO_EVENT_WIFI_STA_CONNECTED
event).
WiFi.onEvent(WiFiStationConnected, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_CONNECTED);
The WiFiStationConnected()
function simply prints that the ESP32 is successfully connected to an access point (like your router, for example). However, you may change the function to do any other task (such as turning on an LED to show that it has successfully connected to the network).
void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.println("Connected to AP successfully!");
}
When the ESP32 gets its IP address, the WiFiGotIP()
function runs.
WiFi.onEvent(WiFiGotIP, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_GOT_IP);
That function simply prints the IP address on the Serial Monitor.
void WiFiGotIP(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
When the ESP32 loses connection with the access point (ARDUINO_EVENT_WIFI_STA_DISCONNECTED
), the WiFiStationDisconnected()
function is called.
WiFi.onEvent(WiFiStationDisconnected, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
This function prints a message stating that the connection has been lost and tries to reconnect:
void WiFiStationDisconnected(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.println("Disconnected from WiFi access point");
Serial.print("WiFi lost connection. Reason: ");
Serial.println(info.disconnected.reason);
Serial.println("Trying to Reconnect");
WiFi.begin(ssid, password);
}
Conclusion
The following is a list of all the ways that the ESP32 may be used to reconnect the lost connection.
To better understand some of the most commonly used ESP32 Wi-Fi functions, we recommend that you take a look at the following tutorial:
If you like ESP32, you may also like:
- Send Email from ESP32 via SMTP Server (Arduino IDE)
- ESP32 with WiFiMulti: Connect to the Strongest Wi-Fi Network
- Using ESP32 with PIR Motion Sensor (Interrupts and Timers)
- Door Status Monitor using ESP32 with Email Notifications
We hope you find this tutorial useful. Thanks for reading.