Issues with DFRobot W5500 Ethernet Arduino Shield

Hi All,

I’m hoping the forum can help me troubleshoot an issue with a DFRobot Ethernet Shield (DFR0850). I’m having an issue with getting the board to connect to the network and obtain an IP by either DHPC or by setting a static IP. The board is connected to an Arduino UNO with an Atmega 328P. I have tried a number of test sketches and online tutorials to troubleshoot the issue without success.

Here are two example sketches I am running to test the function of the board:

First sketch

/*
  Link Status

  This sketch prints the Ethernet link status. When the
  Ethernet cable is connected the link status should go to "ON".
  NOTE: Only WIZnet W5200 and W5500 are capable of reporting
  the link status. W5100 will report "Unknown".
  Hardware:
   - Ethernet shield or equivalent board/shield with WIZnet W5200/W5500
  Written by Cristian Maglie
  This example is public domain.
*/

#include <SPI.h>
#include <Ethernet.h>

void setup() {
  // You can use Ethernet.init(pin) to configure the CS pin
  Ethernet.init(10);  // Most Arduino shields
  //Ethernet.init(5);   // MKR ETH Shield
  //Ethernet.init(0);   // Teensy 2.0
  //Ethernet.init(20);  // Teensy++ 2.0
  //Ethernet.init(15);  // ESP8266 with Adafruit FeatherWing Ethernet
  //Ethernet.init(33);  // ESP32 with Adafruit FeatherWing Ethernet

  Serial.begin(9600);

  // disable SD SPI as this can interfere with the W5500
  pinMode(4,OUTPUT);
  digitalWrite(4,HIGH);
}

void loop() {
  auto link = Ethernet.linkStatus();
  Serial.print("Link status: ");
  switch (link) {
    case Unknown:
      Serial.println("Unknown");
      break;
    case LinkON:
      Serial.println("ON");
      break;
    case LinkOFF:
      Serial.println("OFF");
      break;
  }
  delay(1000);
}

The output on the serial port from this sketch is:
"Link status: Unknown” whether the ethernet cable is plugged in or not (I have tried multiple ethernet cables).
The expected output for a working board would either be:
"Link status: ON” OR
"Link status: OFF”

Second sketch:

/*
 Web Server

 A simple web server that shows the value of the analog input pins.
 using an Arduino WIZnet Ethernet shield.

 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)

 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 modified 02 Sept 2015
 by Arturo Guadalupi
 
 */

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
  // You can use Ethernet.init(pin) to configure the CS pin
  Ethernet.init(10);  // Most Arduino shields
  //Ethernet.init(5);   // MKR ETH Shield
  //Ethernet.init(0);   // Teensy 2.0
  //Ethernet.init(20);  // Teensy++ 2.0
  //Ethernet.init(15);  // ESP8266 with Adafruit FeatherWing Ethernet
  //Ethernet.init(33);  // ESP32 with Adafruit FeatherWing Ethernet

  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  Serial.println("Ethernet WebServer Example");

  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);

  // Check for Ethernet hardware present
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
    while (true) {
      delay(1); // do nothing, no point running without Ethernet hardware
    }
  }
  if (Ethernet.linkStatus() == LinkOFF) {
    Serial.println("Ethernet cable is not connected.");
  }

  // start the server
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an HTTP request ends with a blank line
    bool 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("<!DOCTYPE HTML>");
          client.println("<html>");
          // 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("<br />");
          }
          client.println("</html>");
          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 disconnected");
  }
}

This sketch also can’t connect to the network. The output on the serial port is:

Ethernet WebServer Example
Ethernet shield was not found. Sorry, can’t run without hardware :frowning:

Other troubleshooting steps I have tried are:

  • Setting pin 4 as an output and setting it HIGH to disable the SD card SPI which can interfere with the SPI for the W5500.
  • Using pin 11 to reset the W5500 board during the setup() routine
  • Using a different router and network
  • Checking the board for solder bridges (non found)
  • Using the Ethernet2 library instead of Ethernet

Any help would be greatly appreciated!

Hello, did you also try the exact code that is given here in this wiki page?

Hi @Rooppoor212784, thanks for the reply. Yes I did, that was the first sketch I uploaded to the board. I should have mentioned that in my original post.

Hi Daniel, welcome to the forum!

How were you powering the shield/arduino? Could it be that the WIZNET isn’t getting power from the Arduino due to a diode, and is expecting you to power it through PoE or the USB port on the shield?

Could you share photos of how you’ve got everything hooked up?

Keen to get to the bottom of this one!

Hi @James,
Thanks for your reply.

I have powered the device via USB and POE. My eventual intended use is via POE.
Here’s a few pictures of it hooked up:

Powered by USB:

Powered by POE:

Both power supplies work without issue.

Hi Daniel,

Welcome to the forum :slight_smile:

Just to clarify have you tested the shield with both of these initialisation steps included at once? I can see you removed the definition of the reset pin in the code you linked here.

Hi @Trent5487676,

Thanks!

I’ve just tried all 3 sketches with the following in void setup():

  // disable SD SPI as this can interfere with the W5500
  pinMode(4,OUTPUT);
  digitalWrite(4,HIGH);

  digitalWrite(SS, LOW);

  digitalWrite(RST,HIGH);  //Reset this (WIZNET W5500) module
  delay(200);
  digitalWrite(RST,LOW);
  delay(200);
  digitalWrite(RST,HIGH);
  delay(200);

I also made sure to define SS and RST as it is in the official DFRobot Wiki:

#define SS     10U    //W5500 CS
#define RST    11U    //W5500 RST

I’m still getting the same output for the three sketches and the board will not get an IP.
It might be important to note that the output to the serial port on all three of the sketches does not change whether the ethernet shield is plugged into the UNO or not.

I hope this helps get to the bottom of the issue!

Thanks again

Hi Daniel,

It seems it could be a fault with the unit itself. One last big thing to check, which of the PoE standards does the PoE switch you are powering the device with support? Can you let me know what brand and model of PoE switch you’ve got there?

If we can rule out any issues with the switch we’ll treat this as a faulty product and sort out an RMA via email.

Thanks Trent.
I’ve tried two PoE switches, the models are USW-Lite-16-POE and Netgear GS305EP.
I’ve also used it powered from usb and connected to Ethernet without Poe.
Also to note, the arduino runs fine using the drfobot Poe hat as a Poe power supply.

Thanks,
Daniel

Hi Daniel,

Thanks for confirming, if you’ve tested with two PoE capable switches I think we’ve isolated the fault pretty well to the shield itself.
Can you please reply to your order confirmation email with a link to this forum thread? Our team will be able to sort out an RMA as this is likely a hardware fault.