Webserver with an Arduino+Ethernet Shield

  Arduino Uno R3Arduino Uno R3 Microcontroller

  16.00 JD                  Add to cart

Arduino Mega 2560
Arduino Mega 2560 Microcontroller Board

  23.00 JD                  Add to cart

  Arduino Leonardo

Arduino Leonardo

  17.00 JD                  Add to cart


This project is all about using an Arduino with an Ethernet shield. Controlling one LED and a servo, but you can apply this method to control  any  electronic  device  you  desire.  For  example  relays,  DC motors, buzzers, stepper motors, etc..


How it works

The code provided when uploaded and connected to the internet it creates a webserver in your LAN and you simply use the IP to access that webserver through your browser. After that it shows a webpage similar to that one below. When you press the button "Turn On LED" your URL changes to: "" the Arduino will read that information and It turns the LED On.
By default the IP is "". That also can be found on the Arduino code provided.

Parts Required

  • 1x Arduino Uno
  • 1x 220 Ohm Resistor
  • 1x Ethernet Shield
  • 1x LED
  • 1x Micro Servo Motor (servo 9g)
  • 1x Breadboard
  • Jumper Cables


Upload the code below

#include <SPI.h>

#include <Ethernet.h>

#include <Servo.h>

int led = 4;

Servo microservo;

int pos = 0;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

//physical mac address

byte ip[] = { 192, 168, 1, 178 };   // ip in lan (that's what you need to use in your browser. ("")

byte gateway[] = { 192, 168, 1, 1 };

internet access via router //

byte subnet[] = { 255, 255, 255, 0 }; 

//subnet mask

EthernetServer server(80);

//server port 

String readString; 

void setup() {

// Open serial communications and wait for port to open: Serial.begin(9600);

while (!Serial) {

; // wait for serial port to connect. Needed for Leonardo only


pinMode(led, OUTPUT);


// start the Ethernet connection and the server:

Ethernet.begin(mac, ip, gateway, subnt);


Serial.print("server is at ");



void loop() {

// Create a client connection

EthernetClient client = server.available();

if (client) {

       while (client.connected()) {

           if (client.available()) {

               char c = client.read();

                //read char by char HTTP request

if (readString.length() < 100) {

//store characters to string

readString += c;



//if HTTP request has ended

if (c == 'n') {

Serial.println(readString); //print to serial monitor for debuging


client.println("HTTP/1.1 200 OK"); //send new

client.println("Content-Type: text/html");




client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");

client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");

client.println("<link rel='stylesheet' type='text/css' href='http://randomnerdtutorials.com/ethernetcss.css' />");

client.println("<TITLE>Random Nerd Tutorials Project</TITLE>");



client.println("<H1>Random Nerd Tutorials Project</H1>");

client.println("<hr />");

client.println("<br />");

client.println("<H2>Arduino with Ethernet Shield</H2>");

client.println("<br />");

client.println("<a href="/?button1on"">Turn On LED</a>");

client.println("<a href="/?button1off"">Turn Off LED</a><br />");

client.println("<br />");

client.println("<br />");

client.println("<a href="/?button2on"">Rotate Left</a>");

client.println("<a href="/?button2off"">Rotate Right</a><br />");

client.println("<p>Created by Rui Santos. Visit http://randomnerdtutorials.com for more projects!</p>");

client.println("<br />");




//stopping client client.stop();

//controls the Arduino if you press the buttons

if (readString.indexOf("?button1on") >0){

digitalWrite(led, HIGH);


if (readString.indexOf("?button1off") >0){

digitalWrite(led, LOW);


if (readString.indexOf("?button2on") >0){

for(pos = 0; pos < 180; pos += 3)  // goes from 0 degrees to 180 degrees

{                                  // in steps of 1 degree

microservo.write(pos);     //tell servo to go to position in variable 'pos'

delay(15);    //waits 15ms for the servo to reach the position



if (readString.indexOf("?button2off") >0){

for(pos = 180; pos>=1; pos-=3)     // goes from 180 degrees to 0 degrees


microservo.write(pos);              //tell servo to go to position in variable 'pos'


delay(15);                      //waits 15ms for the servo to reach the position



//clearing string for next read readString="";








If you try this project. You can only access that IP address from your home. This means you must be connected to the same router that you're Ethernet shield is connected to.