Iphone controlled led without a computer or internet

details

This project is an example of Ethernet shield. User can manage his house easily by using Arduino platform through iPhone. This project would be included in Remote control category of WIZnet Museum.

Iphone controlled led without a computer or internet
2015-01-28_iPhone

I build a small webside running on the arduino with ethernet I/O using HTML and a little bit of css.
When sending a HTTP request the script reads the request and gets a command from it.
You don’t need internet, only a working network and a computer of smartphone connected to the same network.

Parts: 1 arduino, 1 ethernet shield, or a Sparkfun Pro Ethernet (not for sale anymore….) 1 LED connected to digital pin 9 and GND, 1 network-cable working network

 

The Code

just upload this code to the arduino:

/* IPhone controlled LED

Turns on and off a LED connected to a digital pin, via a computer or
IPhone (or even a android device) without using internet.

combined examples:
Examples > Ethernet > Webserver and Examples > Digital > BlinkWithoutDelay

The circuit:
* LED attached from pin 9 to ground.
* EthernetShield using pins 10,11,12,13.

created mar 2013
by Floris
floris (at) deboktor.nl

This example code is in the public domain.
*/

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,30,178); //choose a IPadress so you can easily find it on your computer
EthernetServer server(80);

String currentLine = "";
char Command[100];
int page = 2;
int prevpage = page;
long previousMillis = 0;
long interval = 500;
int ledState = LOW;
boolean PageUpdated = false;
int LedPin = 9;

void setup() {
  pinMode(LedPin, OUTPUT);
  currentLine.reserve(256);
  Ethernet.begin(mac, ip);
  server.begin();
  digitalWrite(LedPin,LOW);
}

void loop() {
  EthernetClient client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    boolean ValidCommand = false;
    int i = 0;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        currentLine += c;
        if (!ValidCommand){
          Command[i] = c;
          i++;
        }
        if (c == '\n') {
          currentLine = "";
        }
        if ( currentLine.endsWith("HTTP/1.1")) { //line format is like: GET /?s=1 HTTP/1.1 or GET /favicon.ico HTTP/1.1
          ValidCommand = true;
          if (Command[5]-'?'==0){ //if the 5th karakter is ?
            if (Command[6]-'s'==0){ //then a s
              prevpage = page; //to prevent giving a strange command
              page = Command[8]-'0';//after the ?= is the actual command
              if(page!=1 && page !=2 && page!=3){ //1 = on, 2 = of, 3 = flashing
                page = prevpage;
              }
              PageUpdated = false;
            }
          }
        }

        if (c == '\n' && currentLineIsBlank) {
          delay(10);
          client.print("<!DOCTYPE HTML>\n");
          client.print("<HTML>\n<HEAD>\n");
          client.print("<TITLE>led-online</TITLE>\n");
          client.print("<meta name='viewport' content='user-scalable=yes, width=device-width'>");
          client.print("<style type='text/css'>\n");
          client.print("body {\n background-color: white; \n color: #222; \n font-family: Helvetica; \n margin: 0; \n padding: 0\n }\n");
          client.print("div#button_On {\n background-color: blue; \n border-bottom: 1px solid #666; \n color: #222; \n display: block; \n font-color: black; \n font-size: 14px; \n font-weight: bold; \n padding: 10px 0; \n text-align: center; \n text-decoration: none\n }\n\n");
          client.print("div#button_Off {\n background-color: #ccc; \n border-bottom: 1px solid #666; \n color: #222; \n display: block; \n font-color: black; \n font-size: 14px; \n font-weight: bold; \n padding: 10px 0; \n text-align: center; \n text-decoration: none\n }\n\n");
          client.print("a {\n text-decoration: none;\n }");
          client.print("\n </style>\n");
          if ((page!=0)&&(!PageUpdated)){//1 sec after a command refresh the page
            client.print("<META HTTP-EQUIV='refresh' CONTENT='1; URL=/'>\n");
            PageUpdated = true;
          }
          else{ //normally once everyy 10 sec a page update
            client.print("<META HTTP-EQUIV='refresh' CONTENT='10; URL=/'>\n");
          }
          client.print("</HEAD>\n");
          client.print("<BODY>\n\n");
          client.print("<a href='/?s=1'>\n");
          if (page==1){
            client.print("<div id='button_On'>");
          }
          else{
            client.print("<div id='button_Off'>");
          }
          client.print("LED ON");
          client.print("</div>\n");         
          client.print("</a>\n");
          client.print("<a href='/?s=2'>\n");
          if (page==2){
            client.print("<div id='button_On'>");
          }
          else{
            client.print("<div id='button_Off'>");
          }
          client.print("LED OFF");
          client.print("</div>\n");
          client.print("</a>\n");
          client.print("<a href='/?s=3'>\n");
          if (page==3){
            client.print("<div id='button_On'>");
          }
          else{
            client.print("<div id='button_Off'>");
          }
          client.print("LED FLASHING");
          client.print("</div>\n");
          client.print("</a>\n");

          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
  switch (page){
  case 1:
    digitalWrite(LedPin,HIGH);
    break;
  case 2:
    digitalWrite(LedPin,LOW);
    break;
  case 3:
    digitalWrite(LedPin, ledState);
    if(millis() - previousMillis > interval) {
      previousMillis = millis();  
      if (ledState == LOW)
        ledState = HIGH;
      else
        ledState = LOW;
    }
    break;
  }
}

Finally

go the the IP adres asigned in the code on a smartphone or computer connected to the same network as the arduino.

a 3 button page will appear.
Just click on one of the buttons and see whats happening…..

If you want to know more in detail, refer to

Source : http://www.instructables.com/id/iphone-controlled-led-without-a-computer-or-intern/

 

This project is an example of Ethernet shield. User can manage his house easily by using Arduino platform through iPhone. This project would be included in Remote control category of WIZnet Museum.

Iphone controlled led without a computer or internet
2015-01-28_iPhone

I build a small webside running on the arduino with ethernet I/O using HTML and a little bit of css.
When sending a HTTP request the script reads the request and gets a command from it.
You don’t need internet, only a working network and a computer of smartphone connected to the same network.

Parts: 1 arduino, 1 ethernet shield, or a Sparkfun Pro Ethernet (not for sale anymore….) 1 LED connected to digital pin 9 and GND, 1 network-cable working network

 

The Code

just upload this code to the arduino:

/* IPhone controlled LED

Turns on and off a LED connected to a digital pin, via a computer or
IPhone (or even a android device) without using internet.

combined examples:
Examples > Ethernet > Webserver and Examples > Digital > BlinkWithoutDelay

The circuit:
* LED attached from pin 9 to ground.
* EthernetShield using pins 10,11,12,13.

created mar 2013
by Floris
floris (at) deboktor.nl

This example code is in the public domain.
*/

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,30,178); //choose a IPadress so you can easily find it on your computer
EthernetServer server(80);

String currentLine = "";
char Command[100];
int page = 2;
int prevpage = page;
long previousMillis = 0;
long interval = 500;
int ledState = LOW;
boolean PageUpdated = false;
int LedPin = 9;

void setup() {
  pinMode(LedPin, OUTPUT);
  currentLine.reserve(256);
  Ethernet.begin(mac, ip);
  server.begin();
  digitalWrite(LedPin,LOW);
}

void loop() {
  EthernetClient client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    boolean ValidCommand = false;
    int i = 0;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        currentLine += c;
        if (!ValidCommand){
          Command[i] = c;
          i++;
        }
        if (c == '\n') {
          currentLine = "";
        }
        if ( currentLine.endsWith("HTTP/1.1")) { //line format is like: GET /?s=1 HTTP/1.1 or GET /favicon.ico HTTP/1.1
          ValidCommand = true;
          if (Command[5]-'?'==0){ //if the 5th karakter is ?
            if (Command[6]-'s'==0){ //then a s
              prevpage = page; //to prevent giving a strange command
              page = Command[8]-'0';//after the ?= is the actual command
              if(page!=1 && page !=2 && page!=3){ //1 = on, 2 = of, 3 = flashing
                page = prevpage;
              }
              PageUpdated = false;
            }
          }
        }

        if (c == '\n' && currentLineIsBlank) {
          delay(10);
          client.print("<!DOCTYPE HTML>\n");
          client.print("<HTML>\n<HEAD>\n");
          client.print("<TITLE>led-online</TITLE>\n");
          client.print("<meta name='viewport' content='user-scalable=yes, width=device-width'>");
          client.print("<style type='text/css'>\n");
          client.print("body {\n background-color: white; \n color: #222; \n font-family: Helvetica; \n margin: 0; \n padding: 0\n }\n");
          client.print("div#button_On {\n background-color: blue; \n border-bottom: 1px solid #666; \n color: #222; \n display: block; \n font-color: black; \n font-size: 14px; \n font-weight: bold; \n padding: 10px 0; \n text-align: center; \n text-decoration: none\n }\n\n");
          client.print("div#button_Off {\n background-color: #ccc; \n border-bottom: 1px solid #666; \n color: #222; \n display: block; \n font-color: black; \n font-size: 14px; \n font-weight: bold; \n padding: 10px 0; \n text-align: center; \n text-decoration: none\n }\n\n");
          client.print("a {\n text-decoration: none;\n }");
          client.print("\n </style>\n");
          if ((page!=0)&&(!PageUpdated)){//1 sec after a command refresh the page
            client.print("<META HTTP-EQUIV='refresh' CONTENT='1; URL=/'>\n");
            PageUpdated = true;
          }
          else{ //normally once everyy 10 sec a page update
            client.print("<META HTTP-EQUIV='refresh' CONTENT='10; URL=/'>\n");
          }
          client.print("</HEAD>\n");
          client.print("<BODY>\n\n");
          client.print("<a href='/?s=1'>\n");
          if (page==1){
            client.print("<div id='button_On'>");
          }
          else{
            client.print("<div id='button_Off'>");
          }
          client.print("LED ON");
          client.print("</div>\n");         
          client.print("</a>\n");
          client.print("<a href='/?s=2'>\n");
          if (page==2){
            client.print("<div id='button_On'>");
          }
          else{
            client.print("<div id='button_Off'>");
          }
          client.print("LED OFF");
          client.print("</div>\n");
          client.print("</a>\n");
          client.print("<a href='/?s=3'>\n");
          if (page==3){
            client.print("<div id='button_On'>");
          }
          else{
            client.print("<div id='button_Off'>");
          }
          client.print("LED FLASHING");
          client.print("</div>\n");
          client.print("</a>\n");

          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
  switch (page){
  case 1:
    digitalWrite(LedPin,HIGH);
    break;
  case 2:
    digitalWrite(LedPin,LOW);
    break;
  case 3:
    digitalWrite(LedPin, ledState);
    if(millis() - previousMillis > interval) {
      previousMillis = millis();  
      if (ledState == LOW)
        ledState = HIGH;
      else
        ledState = LOW;
    }
    break;
  }
}

Finally

go the the IP adres asigned in the code on a smartphone or computer connected to the same network as the arduino.

a 3 button page will appear.
Just click on one of the buttons and see whats happening…..

If you want to know more in detail, refer to

Source : http://www.instructables.com/id/iphone-controlled-led-without-a-computer-or-intern/

 

COMMENTS

Please Login to comment
  Subscribe  
Notify of