Example Code for Arduino-Ethernet Web Server

Last revision 2025/12/19

This project demonstrates how to create a small Web Server using the W5500 Ethernet expansion board. The server displays the values of the 6 analog input pins of the Arduino board, automatically refreshing every 5 seconds. Users will learn to set up Ethernet communication, use the W5500 chip, and build a basic HTTP server.

Hardware Preparation

Software Preparation

Wiring Diagram

  • First install the POE Ethernet expansion board on the Leonardo board, then connect the E-RST pin on the POE Ethernet expansion board to the D11 pin through the jumper cap, then connect your Leonardo to a computer with the micro USB cable.

  • POE Function Wiring Diagram: Plug the POE Ethernet expansion board and the computer cable into any LAN port of the POE switch (common switches and routing equipment can also be used. When using common switches and routing equipment, the module needs to be powered).

  • Non-POE Function Wiring Diagram: Connect the POE Ethernet expansion board to the computer through a network cable (when directly connected to the PC network port, the module needs to be powered).

Other Preparation Work

  1. Download the official Arduino library of WIZnet, unzip the compressed package after downloading, according to the IDE version you are using, put the Ethernet folder in one of the two folders of Arduino IDE 1.0.x and Arduino IDE 1.5.x into the library file of the Arduino IED and overwrite it (overwrite the original Ethernet library).

    Preparation Work1

    Preparation Work2

    Preparation Work3

  2. Open the Arduino IDE compiler, find the WebServer sample in File -> Examples -> Ethernet and open it.

  3. Add the reset pin initialization code at the beginning of the WebServer sample code.

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    //W5500 CS
#define RST    11U    //W5500 RST

// 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 this module
  delay(200);
    digitalWrite(RST,LOW);
  delay(200);
  digitalWrite(RST,HIGH);
 delay(200);
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  //while (!Serial) {
  //  ; // wait for serial port to connect. Needed for Leonardo only
  //}


  // 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");
          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");
  }
}

Result

Open the browser -> enter the IP address -> press Enter to open the web page. The input values of the 6 analog ports are automatically refreshed and displayed at a frequency of 5 seconds, indicating the Web Server is working normally.

Solutions to Abnormal Situations

For those who have the problem of "Webpage cannot be loaded" in the computer browser, don't worry, please follow the steps below to configure your network adapter:

1. Open the Control Panel-->Network and Internet-->Network and Sharing Center-->Change adapter settings

2. Find the network you connect to the module-->right-click-->Properties-->Find "Internet Protocol Version 4 (TCP/IPv4)" in the network tab and double-click to enter the property settings

3. Enter the parameters shown in the figure below and click OK. After this, open the browser and enter the IP address, then press Enter to open the webpage.

IP

Was this article helpful?

TOP