Example Code for Arduino-Web Server Door Control

A simple web server: Displays a button to open/close a door and door status

Hardware Preparation

  • XBoard (SKU: DFR0133)
  • FTDI basic board
  • Mini USB cable or Lipo battery
  • Remote Arduino (for communication)
  • LED (for local status indication on PIN4)

Software Preparation

  • Arduino IDE (compatible with Arduino libraries: Client, Ethernet, Server, Udp, SPI)

Other Preparation Work

  1. Change your IP Address in the code (line: byte ip[] = { 192, 168, 0, 177 }; //Change your IP Address here).
  2. Ensure values ('H'/'L') for serial communication are consistent between the server program and the client program.

Sample Code

#include <Client.h>
#include <Ethernet.h>
#include <Server.h>
#include <Udp.h>
#include <SPI.h>
/*
 * Web Server
 *
 * A simple web server: Displays a button to open/close
 * a door and door status
 */
 //-----------------------BEGIN Variable setup -------------------------------

String readString = String(30); //string for fetching data from address
boolean LEDON = false; //LED status flag

int state;
int val=0;

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] =  {
  192, 168, 0, 177 }; //Change your IP Address here
Server server(80); //Standard HTTP server port

//-----------------------END Variable setup-------------------------------

void setup()
{
  pinMode(4, OUTPUT);

  Ethernet.begin(mac, ip);
  server.begin();
  delay(100);
  Serial.begin(57600);  //XBee module Baud rate
  delay(100);
  }
void loop()
{
//---------------Web Server initialization------------------------------
  Client client = server.available();
  if (client) {

    boolean current_line_is_blank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (readString.length() < 100)
      {

        readString += c;
      }
///////////Check button status to determine actions to take for submit button///////////////
       if(readString.indexOf("IO=1") >0){ // If door open request sent;
                                          // send instruction to remote arduino
             if (LEDON== false){          //Ensure it only send the info once
             //led has to be turned ON
             LEDON = true;                //Change LED state to print on the page
             Serial.print('G');           //Send command to remote Arduino
            }
           }
           if(readString.indexOf("IO=0") >0){//Same as above but not used in
                                             //this application
           if (LEDON== true){
             //led has to be turned OFF
             LEDON = false;
             Serial.print('K');
           }
           }
///////////////Finish checking and actions for submit button//////////////////

//------------------Standard web Server Jargon-------------------------------
        if (c == 'n' && current_line_is_blank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: html");
          client.println();
          client.println("<html>");
          client.println("<head>");
          client.println("<title>Xboard interface--Door control</title>");
          client.println("</head>");
          client.println("<body>");
          client.print("welcome to DFRobot"); //Print your own message here
          client.println("<br />");
          client.print("//*************************************");
          client.println("<br />");
          client.println("<br />");
          client.print("//*************************************");
          client.println("<br />");
          client.println("<br />");
          client.print("<form>");
          client.print("<input type=radio name=IO value=1 /> Open<br />");
          client.print("<input type=submit value=Submit </form><br />");
          client.println("</body>");
            break;
            }

        if (c == 'n') {
          // we're starting a new line
          current_line_is_blank = true;
        }
        else if (c != 'r') {
          // we've gotten a character on the current line
          current_line_is_blank = false;
        }
      }
    }
//------------------END Standard web Server Jargon-------------------------------

//-----------------Print door status on web page and auto refresh----------------
     if (LEDON){
          //printing LED status
         client.print("<font size='5'>DOOR status: ");
         client.println("<font color='green' size='5'>OPEN");
         client.println("<META HTTP-EQUIV=REFRESH CONTENT=2;url=http://192.168.0.177/>"); //Autorefresh
                        //Auto-refresh the site after 2 seconds to reset the door status to closed
     }
     else{
          client.print("<font size='5'>DOOR status: ");
          client.println("<font color='grey' size='5'>CLOSED");
     }
          client.println("<hr />");
          client.println("<hr />");
          client.println("</body></html>");
          //clearing string for next read
          readString="";
//-----------------END Print door status on web page and auto refresh----------------
    client.stop();
  }

/*Routine to read response from remote Arduino
 *and light local LED on PIN4
 */
   if (Serial.available() > 0) {
    val = Serial.read();
    if (val == 'H') { //These values ('H')can be changed to what ever you want
                      //just make sure you change them in both the server
                      //program and the client program
      digitalWrite(4, HIGH);
      delay (20);
     }
    if (val == 'L') {
      digitalWrite(4, LOW);
       delay (20);
    }
   }
}

Result

  1. Web interface displays a button to open the door and shows door status (green "OPEN" or grey "CLOSED").
  2. Auto-refreshes the site after 2 seconds to reset the door status to closed when open.
  3. Lights local LED on PIN4 when receiving 'H' (HIGH) or 'L' (LOW) from the remote Arduino via serial.

Was this article helpful?

TOP