Ho scripto la luce…e luce fù! (accendi un led via web con arduino)

Oggi ho scripto uno sketch per permettere ad Arduino di controllare via web un semplice LED. Questo esercizio apre le porte ai prossimi test per controllare da remoto alcune periferiche…una lampada, la caldaia, la lavatrice…

Per far girare lo sketch basta collegare  un led in serie con la sua resistenza alla porta 9 di Arduino. Ricordarsi anche di cambiare l’IP in base alla rete a cui è collegato Arduino. Funziona anche dietro al router dall’esterno, basta fare NAT sulla porta 80 reindirizzando la comunicazione su Arduino. (se non si capisce chiedete…a qualcuno in grado di spiegarvelo meglio :-P )

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

/*
Simple Ethernet Test
Arduino server outputs simple text to browser
and controlling LED with simple checkbox
The circuit:
* Arduino Duemilanove
* Arduino Ethernet shield
* Basic FTDI breakout 5V
* LED connected to GND and digital pin 4 via resistor
*/

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 1, 5 }; // ip in lan
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
Server server(80); //server port

int ledPin = 9; // LED pin
char link[]="http://www.ioscripto.it"; //link data
String readString; //string
boolean LEDON = false; //LED status flag

void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}

void loop(){
Client client = server.available();
if (client) {
  boolean currentLineIsBlank = true;
  while (client.connected()) {
    if (client.available()) {
      char c = client.read();
        readString.concat(c); //store characters to string
      //if HTTP request has ended
      if (c == '\n' && currentLineIsBlank) {
         Serial.print(readString);
        if(readString.indexOf("L=1") > 0) {//lets check if LED should be lighted
          //led has to be turned ON
          digitalWrite(ledPin, HIGH); // set the LED on
          LEDON = true;
          }else{
          //led has to be turned OFF
          digitalWrite(ledPin, LOW); // set the LED OFF
          LEDON = false;
        }
        // now output HTML data starting with standart header
        client.println("HTTP/1.1 200 OK");
        client.println("Content-Type: text/html");
        client.println();
        // inizializzo pagina (da togliere se uso ajax)
        client.print("<html><head><title>ARDUINO Controllo Led via WEB</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");
        //send first heading
        client.println("<h1>LED CONTROL by internet connection by Viser</h1>");
        client.println("<hr />");
        client.println("<h1>LED control</h1>");
        //address will look like http://192.168.1.110/?L=1 when submited
        client.println("<form method=get name=LED><input type=checkbox name=L value=1>LED<br><input type=submit value=submit></form>");
        client.println("<br />");
        //printing LED status
        client.print("<span>LED status: </span>");

          if (LEDON) {
          	client.println("<span style='color:green'>ON</span>");
            }
            else
            {
          	client.println("<span style='color:grey'>OFF</span>");
          }
        client.print("<h2><a href='/?L=1'>accendi!</a> | <a href='/?L=0'>spegni!</a></h2>");

        //print link
        client.println("<hr />");
        client.print("<h2><a href='link'>Visita www.ioscripto.it!</a></h2>");
        client.println("<hr />");

        // chiudo pagina da togliere se uso ajax
        client.println("</body></html>");

        //clearing string for next read
        readString="";
        //stopping client
        client.stop();

        } //if c == /n .... devo capire che significa
    } // if client available
  } // while client connesso
} // if client
} //loop

8 Replies to Ho scripto la luce…e luce fù! (accendi un led via web con arduino)

  1. fra scrive:

    Ciao sarei interessato ad applicare questa cosa a un progetto, solo che so poco o niente di arduino… Come fa l’Arduino a ricevere comandi dal web, cioè come è collegato a internet? So che esiste una cosa chiamata Ethernet shield…

    • Gianni scrive:

      Sì è proprio così, devi acquistare un modulo aggiuntivo che si chiama Ethernet Shield costa circa 30 euro. L’Ethernet Shield viene montato sopra Arduino (core) e tramite apposite librerie e appositi comandi caricati sul microcontrollore è possibile far funzionare arduino come un client e/o un server e/o un’altro dispositivo di rete.

  2. maurizio scrive:

    Ciao ti faccio i complimenti è un ottimo progetto!
    Non ho però capito una cosa. Il client web, esempio il telefono o un altro pc, a che sito web dovrebbe connettersi per controllarlo? E come andrebbe scritto sul programma di arduino?

  3. Stefano scrive:

    Ciao, ho seguito il tuo esempio, quando clicco su accendi il led rimane accesso mentre carica, poi si spegne subito, come mai?

  4. Stefano scrive:

    Ho fatto diverse prove, il problema dipende da google chrome, strano!

  5. Adrian scrive:

    mi potresti spiegare per favore che modifiche dovrei fare all’inizio del codice (subnet e gateway) se l’arduino è collegato direttamente al router e perche usi un ip che inizia con 192.168 quando tutti router nelle loro reti locali hanno indirizzi che iniziano con questi numeri, non so se mi spiego, ma vorrei capire bene come e dove mettere un ip che sia unico per il mio arduino e che sia accessibile anche dall’esterno della rete locale

Trackbacks for this post

  1. Arduino controllo remoto via WEB | IoScripto.it

Leave a Reply


Warning: array_rand() expects parameter 1 to be array, null given in /home/mhd-01/www.ioscripto.it/htdocs/wp-content/plugins/text-captcha/text-captcha.php on line 257

Fatal error: Call to undefined method text_captcha::tc_() in /home/mhd-01/www.ioscripto.it/htdocs/wp-content/plugins/text-captcha/text-captcha.php on line 174