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
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