# Arduino Uno Wifi Rev 2 - WifiNina - restart after network connection loss

**URL:** <https://forum.arduino.cc/t/arduino-uno-wifi-rev-2-wifinina-restart-after-network-connection-loss/576092>\
**Category:** Networking, Protocols, and Devices\
**Created:** [February 25, 2019, 3:23am UTC](https://forum.arduino.cc/t/arduino-uno-wifi-rev-2-wifinina-restart-after-network-connection-loss/576092 "2019-02-25T03:23:32Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![bottletree](https://avatars.discourse-cdn.com/v4/letter/b/d6d6ee/32.png) [@bottletree](https://forum.arduino.cc/u/bottletree)\
**Post date:** [February 25, 2019, 3:23am UTC](https://forum.arduino.cc/t/arduino-uno-wifi-rev-2-wifinina-restart-after-network-connection-loss/576092/1 "2019-02-25T03:23:32Z")

</div>

After a day of searching I have not found code for restarting the wifi connection on the Uno Wifi Rev 2 with WifiNina when it is lost. I am sure those who breathe this stuff can greatly improve it but here it is for those just wanting to have a quick fix:

#include \<WiFiNINA.h\>  
#include \<Time.h\>  
#include \<TimeLib.h\>

char ssid[] = "xxx"; //your values  
char pass[] = "xxx"; //your values  
int status = WL\_IDLE\_STATUS;

[//WiFi.status](https://WiFi.status)()  
//WL\_CONNECTED: assigned when connected to a WiFi network;  
//WL\_AP\_CONNECTED : assigned when a device is connected in Access Point mode;  
//WL\_AP\_LISTENING : assigned when the listening for connections in Access Point mode;  
//WL\_NO\_SHIELD: assigned when no WiFi shield is present;  
//WL\_NO\_MODULE: assigned when the communication with an integrated WiFi module fails;  
//WL\_IDLE\_STATUS: it is a temporary status assigned when WiFi.begin() is called and remains active until the number of attempts expires (resulting in WL\_CONNECT\_FAILED) or a connection is established (resulting in WL\_CONNECTED);  
//WL\_NO\_SSID\_AVAIL: assigned when no SSID are available;  
//WL\_SCAN\_COMPLETED: assigned when the scan networks is completed;  
//WL\_CONNECT\_FAILED: assigned when the connection fails for all the attempts;  
//WL\_CONNECTION\_LOST: assigned when the connection is lost;  
//WL\_DISCONNECTED: assigned when disconnected from a network;

[//WiFi.begin](https://WiFi.begin)() returns:  
// WL\_CONNECTED when connected to a network  
// WL\_IDLE\_STATUS when not connected to a network, but powered on

void setup()  
{  
Serial.begin(9600);  
while (!Serial) {  
; // wait for serial port to connect. Needed for native USB port only  
}

while ( status != WL\_CONNECTED) {  
status = WiFi.begin(ssid, pass);  
delay(5000);  
}

String timd = getTimeandFormat();  
Serial.println(timd);  
}

void loop () {

if (WiFi.status() != WL\_CONNECTED) {  
Serial.println(WiFi.status());  
Serial.println("Conn lost");  
WiFi.end();  
WiFi.disconnect();  
status = WiFi.begin(ssid, pass);  
Serial.println("Tried restart");  
delay(5000);  
}  
else {  
Serial.println("OK");  
Serial.println(WiFi.status());  
}  
delay(5000);  
}

String getTimeandFormat() {  
//Time elements structure for current date/time from internet  
tmElements\_t tm;  
//Get time from internet and format for use in insert statement  
long epochtime = WiFi.getTime();  
epochtime = epochtime + 36000;  
breakTime(epochtime, tm);  
String yr = String(tmYearToCalendar(tm.Year));  
String mo = PadToTwo(tm.Month);  
String da = PadToTwo(tm.Day);  
String ho = PadToTwo(tm.Hour);  
String mi = PadToTwo(tm.Minute);  
String se = PadToTwo(tm.Second);  
String dat = yr + "-" + mo + "-" + da + " " + ho + ":" + mi + ":" + se;  
return(dat);  
}

String PadToTwo(int IntToPad){  
String result;  
if(IntToPad \< 10){  
result = "0" + String(IntToPad);  
}  
else  
{  
result = String(IntToPad);  
}  
return result;  
}

---

<div class="post-metadata">

**Author:** ![lillics](https://avatars.discourse-cdn.com/v4/letter/l/a698b9/32.png) [@lillics](https://forum.arduino.cc/u/lillics)\
**Post date:** [March 6, 2019, 7:49am UTC](https://forum.arduino.cc/t/arduino-uno-wifi-rev-2-wifinina-restart-after-network-connection-loss/576092/2 "2019-03-06T07:49:26Z")

</div>

Hi,

I had the same problem. The examples ignore disconnections...

Try this (you must put the WiFi.begin in a while statement, because the connection is very slow - sometimes 1 or 2 minutes...):

void loop ()  
{  
int status;  
status=WiFi.status();  
if (status==WL\_DISCONNECTED || status==WL\_CONNECTION\_LOST)  
{  
while ( status != WL\_CONNECTED)  
{  
status = WiFi.begin(ssid, pass);  
delay(10000);  
}  
}

no need to WiFi.end and WiFi.disconnect.  
😉

---

<div class="post-metadata">

**Author:** ![lillics](https://avatars.discourse-cdn.com/v4/letter/l/a698b9/32.png) [@lillics](https://forum.arduino.cc/u/lillics)\
**Post date:** [March 6, 2019, 5:31pm UTC](https://forum.arduino.cc/t/arduino-uno-wifi-rev-2-wifinina-restart-after-network-connection-loss/576092/3 "2019-03-06T17:31:10Z")

</div>

This is better:

```cpp
#include <SPI.h>
#include <WiFiNINA.h>
char ssid[] = "xxx";        // my network SSID (name)
char pass[] = "yyy";      // my network key
int status = WL_IDLE_STATUS;                    // the Wifi radio's status
unsigned long time1;
unsigned long time2=0;
char dbg=1;
void setup()
{
 //Initialize serial and wait for port to open:
 if(dbg) Serial.begin(9600);
 pinMode(9, OUTPUT);  // set the LED pin mode
 digitalWrite(9, LOW); //LED OFF to show disconnected
 if(dbg) while(!Serial); // wait for serial port to connect. Needed for Leonardo only
 while(!ScanSSIDs()) WiFiConnect();
}

void loop()
{
 time1 = millis();
 if((time1-time2)>3000) //every 3s
 {
  time2=time1;    
  TestWiFiConnection(); //test connection, and reconnect if necessary
  long rssi=WiFi.RSSI();
  if(dbg) Serial.print("RSSI:");
  if(dbg) Serial.println(rssi);
 }
}

void TestWiFiConnection()
//test if always connected
{
 int StatusWiFi=WiFi.status();
 if(StatusWiFi==WL_CONNECTION_LOST || StatusWiFi==WL_DISCONNECTED || StatusWiFi==WL_SCAN_COMPLETED) //if no connection
 {
  digitalWrite(9, LOW); //LED OFF to show disconnected
  if(ScanSSIDs()) WiFiConnect(); //if my SSID is present, connect
 }
} 

void WiFiConnect()
//connect to my SSID
{
 status= WL_IDLE_STATUS;
 while(status!=WL_CONNECTED)
 {
  status = WiFi.begin(ssid,pass);
  if(status==WL_CONNECTED) digitalWrite(9, HIGH); //LED ON to show connected
  else delay(500);
  }
}

char ScanSSIDs()
//scan SSIDs, and if my SSID is present return 1
{
 char score=0;
 int numSsid = WiFi.scanNetworks();
 if(numSsid==-1) return(0); //error
 for(int thisNet=0;thisNet<numSsid;thisNet++) if(strcmp(WiFi.SSID(thisNet),ssid)==0) score=1; //if one is = to my SSID
 return(score);
}

```

---

<div class="post-metadata">

**Author:** ![lillics](https://avatars.discourse-cdn.com/v4/letter/l/a698b9/32.png) [@lillics](https://forum.arduino.cc/u/lillics)\
**Post date:** [March 9, 2019, 11:54am UTC](https://forum.arduino.cc/t/arduino-uno-wifi-rev-2-wifinina-restart-after-network-connection-loss/576092/4 "2019-03-09T11:54:45Z")

</div>

And if you want a board with fast WiFi connection (about 1 sec to connect, for less than $10, 1MB Flash, 80KB RAM, IDE Arduino compatible), try NodeMCU V3. 🙂

---

<div class="post-metadata">

**Author:** ![Topankefal](https://avatars.discourse-cdn.com/v4/letter/t/f07891/32.png) [@Topankefal](https://forum.arduino.cc/u/Topankefal)\
**Post date:** [April 29, 2019, 12:32pm UTC](https://forum.arduino.cc/t/arduino-uno-wifi-rev-2-wifinina-restart-after-network-connection-loss/576092/5 "2019-04-29T12:32:36Z")

</div>

Hey Guys, so i have a Arduino Uno Wifi Rev 2 which i have conncetd to my WiFi with the example WiFi Connection Sketch given in the IDE, my question, does the connection always happen when i Disonnect and Connect the Arduino, and what happanes when i Upload new Code that uses the Functionality of the WiFi, will the Arduino still have the WiFi Connection?

---

<div class="post-metadata">

**Author:** ![adamproton](https://avatars.discourse-cdn.com/v4/letter/a/df788c/32.png) [@adamproton](https://forum.arduino.cc/u/adamproton)\
**Post date:** [February 2, 2020, 10:18pm UTC](https://forum.arduino.cc/t/arduino-uno-wifi-rev-2-wifinina-restart-after-network-connection-loss/576092/6 "2020-02-02T22:18:09Z")

</div>

This works very well for me - thanks:

> lillics:  
> This is better:
> 
> ```arduino
> #include <SPI.h>
> 
> ```

#include \<WiFiNINA.h\>  
char ssid[] = "xxx"; &nbsp; &nbsp; &nbsp; &nbsp; // my network SSID (name)  
char pass[] = "yyy"; &nbsp; &nbsp; &nbsp; // my network key  
int status = WL\_IDLE\_STATUS; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // the Wifi radio's status  
unsigned long time1;  
unsigned long time2=0;  
char dbg=1;  
void setup()  
{  
//Initialize serial and wait for port to open:  
if(dbg) Serial.begin(9600);  
pinMode(9, OUTPUT); &nbsp; // set the LED pin mode  
digitalWrite(9, LOW); //LED OFF to show disconnected  
if(dbg) while(!Serial); // wait for serial port to connect. Needed for Leonardo only  
while(!ScanSSIDs()) WiFiConnect();  
}

void loop()  
{  
time1 = millis();  
if((time1-time2)\>3000) //every 3s  
{  
&nbsp; time2=time1; &nbsp; &nbsp;  
&nbsp; TestWiFiConnection(); //test connection, and reconnect if necessary  
&nbsp; long rssi=WiFi.RSSI();  
&nbsp; if(dbg) Serial.print("RSSI:");  
&nbsp; if(dbg) Serial.println(rssi);  
}  
}

void TestWiFiConnection()  
//test if always connected  
{  
int StatusWiFi=WiFi.status();  
if(StatusWiFi==WL\_CONNECTION\_LOST || StatusWiFi==WL\_DISCONNECTED || StatusWiFi==WL\_SCAN\_COMPLETED) //if no connection  
{  
&nbsp;digitalWrite(9, LOW); //LED OFF to show disconnected  
&nbsp;if(ScanSSIDs()) WiFiConnect(); //if my SSID is present, connect  
}  
}

void WiFiConnect()  
//connect to my SSID  
{  
status= WL\_IDLE\_STATUS;  
while(status!=WL\_CONNECTED)  
{  
&nbsp; status = WiFi.begin(ssid,pass);  
&nbsp; if(status==WL\_CONNECTED) digitalWrite(9, HIGH); //LED ON to show connected  
&nbsp; else delay(500);  
&nbsp;}  
}

char ScanSSIDs()  
//scan SSIDs, and if my SSID is present return 1  
{  
char score=0;  
int numSsid = WiFi.scanNetworks();  
if(numSsid==-1) return(0); //error  
for(int thisNet=0;thisNet\<numSsid;thisNet++) if(strcmp(WiFi.SSID(thisNet),ssid)==0) score=1; //if one is = to my SSID  
return(score);  
}

> ```arduino
> 
> ```

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [May 6, 2021, 11:14am UTC](https://forum.arduino.cc/t/arduino-uno-wifi-rev-2-wifinina-restart-after-network-connection-loss/576092/7 "2021-05-06T11:14:34Z")

</div>


