Example Code for Arduino-Web Server

Last revision 2025/12/05

A simple web server that shows the value of the analog input pins using an Arduino Wiznet Ethernet shield. Users can learn how to set up the W5500 Ethernet with POE Mainboard as a web server and display real-time analog input data in a web browser.

Hardware Preparation

  • Standard POE Protocol Ethernet Switch, Quantity: 1
  • W5500 Ethernet with POE Mainboard (SKU: DFR0342), Quantity: 1
  • Micro USB cable, Quantity: 1
  • RJ45 network cable, Quantity: 2

Software Preparation

  1. Download the W5500 Ethernet library here
  2. Replace the existing Ethernet library according to your Arduino IDE version:
    • For Arduino IDE 1.0.x: Place the Ethernet file under the libraries folder of Arduino IDE (overlap the original Ethernet library)
    • For Arduino IDE 1.5.x: Place the Ethernet file under the libraries folder of Arduino IDE (overlap the original Ethernet library)

NOTE: Good news! You can use arduino IDE v1.7 from Arduino.org that has "Ethernet 2" library, which works with this board. It means you don't have to download any modded libraries. Thank for the Vladimir Akopyan comments. Welcome to share your projects and comments on the Disqus.

Arduino IDE 1.0.X Arduino IDE 1.5.X

Wiring Diagram

  1. Connect W5500 Reset pins: Connect A-RST pin to D11 (Default: Connected)
    DFR0342_A-Rst.jpg

  2. Plug one end of the ethernet cable to W5500 mainboard, another end to any LAN ports of the Ethernet Switch, or you can use normal Internet switch or router device to directly connect to a PC's network interface (the module needs to be powered up here).
    Connection 1

  3. Connect the W5500 mainbord to a computer with a USB cable.
    Connection 2

Other Preparation Work

  1. Pin Definitions: These parts should be declared at the beginning of the sketch:
    Define W5500 SPI “SS” pin and “Reset” Pin:

    #define SS     10U    //D10----- SS
    #define RST    11U    //D11----- Reset
    

    Setup function initialization:

    void setup() {
    pinMode(SS, OUTPUT);
    pinMode(RST, OUTPUT);
    digitalWrite(SS, LOW);
    digitalWrite(RST,HIGH);  //Reset
    delay(200);
    digitalWrite(RST,LOW);
    delay(200);
    digitalWrite(RST,HIGH);
    delay(200);              //Wait W5500
    
  2. Open Arduino IDE editor, find WebServer example in File->Example->Ethernet and open it.

  3. Select Boards->Arduino Leonardo and the correct COM port in Arduino IDE.

Sample Code

/*  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

 */
#include <SPI.h>
#include <Ethernet.h>
#define SS     10U    //D10 ---- SS
#define RST    11U    //D11 -----Reset

// 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() {
  pinMode(SS, OUTPUT);
  pinMode(RST, OUTPUT);
  digitalWrite(SS, LOW);
  digitalWrite(RST, HIGH); //Reset
  delay(200);
  digitalWrite(RST, LOW);
  delay(200);
  digitalWrite(RST, HIGH);
  delay(200);              //Wait W5500
  //Open serial communications and wait for port to open :
  Serial.begin(9600);
  //while (!Serial) {
  //  ; // wait for serial port to connect. Needed for Leonardo only
  //}
  delay(1000);
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  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
    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");

          // the connection will be closed after completion of the response
          client.println("Connection: close");
          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");
  }
}

Result

  1. Open the Arduino Serial Monitor to initialize the setup and you will see some information about the connection processing.
  2. Open your browser, input the IP address (e.g., 192.168.1.177) and you should get see data of 5 virtual analog pins:
    W5500IE

Additional Information

If you want to skip the serial monitor step, you can comment out the lines waiting for !Serial, and add a line: delay(2000); to ensure that initialization has finished:

Serial.begin(9600);
delay(2000);
//  while (!Serial) {
//    ; // wait for serial port to connect. Needed for Leonardo only
//  }

Was this article helpful?

TOP