Arduino due wifi web server stop responding after few minutes

Hello guys,

I am currently working on a adruino due board with the official wifi shield. And I deploy the example wifi server code provided by the arduino IDE.

The server works fine at first but after a few seconds it will just stop responding and also not output from the serial. But after reset it will start working again and the same condition will occur after a few minutes.

Do anyone used to got this problem? And do you have any idea how to fix that?

And here is my code. I only modify the SSID

/*
WiFi Web Server

A simple web server that shows the value of the analog input pins.
using a WiFi shield.

This example is written for a network using WPA encryption. For
WEP or WPA, change the Wifi.begin() call accordingly.

Circuit:

  • WiFi shield attached
  • Analog inputs attached to pins A0 through A5 (optional)

created 13 July 2010
by dlf (Metodo2 srl)
modified 31 May 2012
by Tom Igoe

*/

#include <SPI.h>
#include <WiFi.h>

char ssid = “testingNetwork”; // your network SSID (name)
char pass = “secretPassword”; // your network password
int keyIndex = 0; // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;

WiFiServer server(80);

void setup() {
//Initialize serial and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}

// check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println(“WiFi shield not present”);
// don’t continue:
while (true);
}

String fv = WiFi.firmwareVersion();
if ( fv != “1.1.0” )
Serial.println(“Please upgrade the firmware”);

// attempt to connect to Wifi network:
while ( status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(ssid);

// wait 10 seconds for connection:
delay(10000);
}
server.begin();
// you’re connected now, so print out the status:
printWifiStatus();
}

void loop() {
// listen for incoming clients
WiFiClient client = server.available();
if (client) {
Serial.println(“new client”);
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you’ve gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == ‘\n’ && currentLineIsBlank) {
// send a standard http response header
client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html”);
client.println(“Connection: close”); // the connection will be closed after completion of the response
client.println(“Refresh: 5”); // refresh the page automatically every 5 sec
client.println();
client.println("");
client.println("");
// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print(“analog input “);
client.print(analogChannel);
client.print(” is “);
client.print(sensorReading);
client.println(”
“);
}
client.println(””);
break;
}
if (c == ‘\n’) {
// you’re starting a new line
currentLineIsBlank = true;
}
else if (c != ‘\r’) {
// you’ve gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);

// close the connection:
client.stop();
Serial.println(“client disonnected”);
}
}

void printWifiStatus() {
// print the SSID of the network you’re attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());

// print your WiFi shield’s IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);

// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print(“signal strength (RSSI):”);
Serial.print(rssi);
Serial.println(" dBm");
}

What is the last message on the serial monitor? Is it "new client"? If it is, then add another serial message to determine if it is receiving the blank line. If it doesn't, the "while(client.connected())" loop becomes an endless loop.

        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header

          // add this serial message
          Serial.println("sending response");

Hello,

I add an i++ to the starting of each loop.

And the printing out of numbers just stopped. And no new client printed out through the serial port. It just stops with a new line in the serial monitor.

Is the wifi losing the connection to the AP? I experimented with that with the server code, and if the wifi shield loses the connection to the AP for even the shortest time, the code will lock up.

The server section of the wifi firmware is known to be unstable. :(

SurferTim: Is the wifi losing the connection to the AP? I experimented with that with the server code, and if the wifi shield loses the connection to the AP for even the shortest time, the code will lock up.

The server section of the wifi firmware is known to be unstable. :(

I cannot determine that. I run a few tests and found the stop responding problem seems to happen every time after a few minutes.

But the router is very close to the board because I set this wifi just for testing use.

Hello,

I found the problem.

It is because the WiFi shield will lose connection with the due.

I am not sure it is because the quality problem of the due or the WiFi shield.

I add

if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); delay(1000);}

And the server can run for a long time. And I saw WiFi shield not present four times in the output.

Hi jvdajd - Where did you add this code?

I believe I have the same issue but not sure where to add this code. Also, how do you refresh the connection? Does .status() refresh it?

Thanks for the help!!!

jvdajd: Hello,

I found the problem.

It is because the WiFi shield will lose connection with the due.

I am not sure it is because the quality problem of the due or the WiFi shield.

I add

if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); delay(1000);}

And the server can run for a long time. And I saw WiFi shield not present four times in the output.