Easy Basic Arduino Ethernet Controller

55,070

111

23

Published

Introduction: Easy Basic Arduino Ethernet Controller

I recently went out and bought an Arduino Ethernet Shield but couldnt really put it to use as i couldnt find any easy tutorials so i started to try to code by myself.I was able to come up with a simple section of code which turned on a LED from your internet broweser.Unfortunatly so far i have not been able to control the LED from outside of my home network.


Step 1: Parts

An Arduino
An Arduino Ethernet Shield
A Breadboard
An LED
Connecting Wires
An Ethernet cable 

Step 2: Initial Hardware Set Up

If you have one of the newer Arduino Ethernet Shields,it will come with the Mac Address writen on the back of it.
Write that down seperatly before attaching your Shield to the Arduino Board.

To set up,just plug in the header pins from the shield into your Arduino.

Use the ethernet cable to conect your Arduino Ethernet Shield to your Network via your Router.

Note that The Ethernet shield is attached to pins 10, 11, 12, 13 so those cannot be used.

Connect the Positive end of the LED on a breadboard and in turn to Pin 8 and the negative end of the LED to Ground on the Ethernet shield.





Step 3: Acquiring the Basic Info (MAC Address,IP Address,Port Number)

If you have one of the newer Shields it should come with the Mac adress written on the back.

The IP address will be dependent on your local network and to find that out you can use Comamnd Promt.
Open up command promt and type in "ipconfig"

It should then show you your IP Address,default gateway and your subnet mask

You will also need the port you want to use.Port 80 is default for HTTP but since my internet provider had it blocked i ended up using port 8081.

Step 4:

/*
  Web Server
A simple web server
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
*/
//-------------------------------------------------------------------------------------------------------
#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0x48, 0xD3 };

// The IP address will be dependent on your local network:
// assign an IP address for the controller:

IPAddress ip(192,168,1,20);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255, 255, 255, 0);

// Initialize the Ethernet server library with the port you want to use.
EthernetServer server(8081);
String readString;
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------
// Any extra codes for Declaration :

// Declare Pin 8 as an LED because thats what we will be connecting the LED to.You could use any other pin and would then have to change the pin number.
int led = 8;

//-------------------------------------------------
//-------------------------------------------------------------------------------------------------------
void setup()
{
//-------------------------------------------------

// Extra Set up code:
pinMode(led, OUTPUT); //pin selected to control

//-------------------------------------------------
//-------------------------------------------------------------------------------------------------------
//enable serial data print
  Serial.begin(9600);

  //start Ethernet
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  Serial.print("Server is at ");
  Serial.println(Ethernet.localIP());
  Serial.println("LED Controller Test 1.0");
}
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------

void loop()
{
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client)

  {
    Serial.println("new 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;
          //Serial.print(c);


          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 HTTP request has ended
          if (c == '\n') {
            Serial.println(readString); //print to serial monitor for debuging
//--------------------------------------------------------------------------------------------------------
// Needed to Display Site:
client.println("HTTP/1.1 200 OK"); //send new page
            client.println("Content-Type: text/html");
            client.println();
            client.println("<HTML>");
            client.println("<HEAD>");

//--------------------------------------------------------------------------------------------------------
//-------------------------------------------------

// what is being Displayed :     
        
            client.println("<TITLE>Home Automation</TITLE>");
             client.println("<center>");
            client.println("</HEAD>");
            client.println("<BODY>");
            client.println("<H1>Home Automation</H1>");
            client.println("<hr />");
            client.println("<center>");

            client.println("<a href=\"/?lighton\"\">Turn On Light</a>");
            client.println("<br />");
            client.println("<br />");
            client.println("<a href=\"/?lightoff\"\">Turn Off Light</a><br />");     

            client.println("</BODY>");
            client.println("</HTML>");

            delay(1);
            //stopping client
            client.stop();

            //-------------------------------------------------
            // Code which needs to be Implemented:
            if(readString.indexOf("?lighton") >0)//checks for on
            {
              digitalWrite(8, HIGH);    // set pin 8 high
              Serial.println("Led On");
            }
            else{
              if(readString.indexOf("?lightoff") >0)//checks for off
              {
                digitalWrite(8, LOW);    // set pin 8 low
                Serial.println("Led Off");
              }
            }
            //clearing string for next read
            readString="";

            // give the web browser time to receive the data
            delay(1);
            // close the connection:
            client.stop();
            Serial.println("client disonnected");

          }
        }
      }
    }
  }
}

Step 5: Feedback

Try the steps and see if it works out if it doesnt work i will try to figure out what went wrong and do leaves comments so i can improve.

2 People Made This Project!

Recommendations

  • Planter Challenge

    Planter Challenge
  • Casting Contest

    Casting Contest
  • Oil Contest

    Oil Contest
user

We have a be nice policy.
Please be positive and constructive.

Tips

Questions

23 Comments

I did it and added multiple output (2,3,4,5,6)

The only problem I have is that the outputs blinks when it'S ON (HIGH). Is there a way to solve the problem?

1 reply

Never mind! Turns out I had flashing LEDs.... With standards LED it works great!

Hi,

Iam new to arduino ,i tried executing the same code but iam not getting the gui page and the blink of led too.Can you please help me.I have put the screen shot of com3 too.

Hi,

nice instructable.

How could I access different arduinos via my ethernet? EG five arduinos, accessible from the web via port forwarded IP through my router - or would I have to use one arduino to route appropriate traffic to relevant arduinos?

Many thanks

D6

If you want to use an adress from "the outside of your network" you need to portforward your router. So you may ask yourself what is portforwarding? For example http servers uses port 80. In your house you have let's say 5 PCs, each with a different internal IP adress. The router needs to know where to transfer the info from port 80 because when you use the ip provided by the internet provider you contact the router not the arduino/pc. If you want to acces your arduino, you have to say the router to which computer he has to redirect that port. Something like: Internet -> router -> tell the router to send the information to arduino (portforward)->arduino. I never used a ethernet shield on my arduino and never dealt with ethernet on arduino, but I think that is your problem.

Hello everyone,

I am a beginner with Arduino, actually, I want to use an ethernet shield with Arduino. but there is one question my mind.

Can the ethernet shield attached with Arduino be used as OUTPUT to collect the data from sensors or always it only works as an INPUT for the internet connection?

Thank you in advance for your precious time.

Hi,

I am having Arduino Uno board with me. Which ethernet shield is compatible with Arduino Uno?

Thanks.

Hi,

good tutorial, i found it very useful, however i was wondering could you write me a code example, so it could control 9 LED's?

Thank you.

I want to know does i need to make server or webpage additionaly for controlling my led or i can access my led through this program only over the internet

How to connect Independent 5 leds, please help me this is my project for school, Thanks

worked fine on win 7 with internet explorer 8.0.7601..... , but not on win 7 with chrome Version 42.0.2311.135 M

Strange - will look into it.

1 reply

If i remember correctly when i tried it i think it worked on all browsers.
I dont remember the exact version i was using at the time.
Unfortunately this is not my field of expertise so i have no idea why it may not have worked.

the question is , how can the arduino work as a MAC chip?

Hello AgentWolf :)

I have a few question to ask. Currently now I'm on my progress to finish up my final year bachelor degree project. My project title namely as, a web based controlling home equipment using Arduino.

So, may I know, the suitable programming language to develop my web based software? and the list of programming or library that I may used for my Arduino and my project.

:)

1 reply

I am not an expert but only an enthusiast so i am not the best person to ask. I would suggest you do the research on your own because its better than me giving you the wrong information. I apologize in advance.

You can Use Just the Arduino language on its own as i did using the following libraries depending on what you want to achieve:

Ethernet - for connecting to the internet using the Arduino Ethernet Shield

WiFi - for connecting to the internet using the Arduino WiFi shield

LiquidCrystal - for controlling liquid crystal displays (LCDs)

Servo - for controlling servo motors

Stepper - for controlling stepper motors

Best Place of Reference would be the Arduino Website and Github and other similar projects. I have seen alot of people use Python and HTML in conjunction with the Arduino Platform.

You can take what i have and edit/add on to it to fit your needs. You can change the code for the LED section to work with Relays.

Once again my apologies. Good Luck.

Nice job!
Have been tinkering with a similar project that lets you control relays in the same manner if you want this to work over the internet you have to route the port you are using to the arduinos local IP address. I have a dlink router and use the virtual server section to map the public port comming from the internet to my arduino's local ip and port (can use the same or different ports, i use the same to make it simpler).
Do bear in mind that anyone in the world could potentially have access to it tho as there's no authentication portal to keep out unwanted guests.

To answer the question from yyyazj, yes chrome or any other web browser becomes the client

1 reply

Thanks for you input and answering that Question.
I am currently busy with school so i haven't had the chance to experiment with Relays but i did think about tinkering with it.I am planning it out in my head and i just need to implement it.As for controlling it from outside my network i have failed to make it work.I just need to keep trying till i finally get it.

I have a question, because the Arduino is working as the websever, so everytime we open the Chrome, and type the IP and the port of Arduino, is the time we use the Chrome as the client ? Right?

Nice instructable!test it and works great!thumbs up!