lunedì 17 giugno 2013

Arduino Tutorial 14: Web Server Led on/off



in questo post vi mostrerò come comandare un led da una pagina web.





//ARDUINO 1.0+ ONLY
String readString;
#include <Ethernet.h>
#include <SPI.h>
boolean reading = false;

////////////////////////////////////////////////////////////////////////
//CONFIGURE
////////////////////////////////////////////////////////////////////////
  byte ip[] = { 192, 168, 1, 17 };   //Manual setup only
  byte gateway[] = { 192, 168, 1, 1 }; //Manual setup only
  byte subnet[] = { 255, 255, 255, 255 }; //Manual setup only

  // if need to change the MAC address (Very Rare)
  byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

  EthernetServer server = EthernetServer(80); //port 80
////////////////////////////////////////////////////////////////////////

void setup(){
  Serial.begin(9600);

  //Pins 10,11,12 & 13 are used by the ethernet shield

  pinMode(2, OUTPUT);//led
  

  Ethernet.begin(mac, ip, gateway, subnet);
  //Ethernet.begin(mac, ip, gateway, subnet); //for manual setup

  server.begin();
  Serial.println(Ethernet.localIP());

}

void loop(){


  // listen for incoming clients, and process qequest.
  checkForClient();

}

void checkForClient(){

  EthernetClient client = server.available();

  if (client) {

    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    boolean sentHeader = false;

    while (client.connected()) {
      if (client.available()) {

        if(!sentHeader){
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<html>");
          client.println("<head><title>Arduino accendere e spegnere LED</title>");
          client.println("<center><h1>Accendere e spegnere LED</h1></center> </head>");
          client.println("<body>");
          
  client.println("<center>");   
  client.println("<table width=100>");
  client.println("<form METHOD=get action=\"\">");
  client.println("<input type=hidden name=\"c\" value=\"2\">");
  client.println("<input type=submit value=\"LED On\">");
  client.println("</form>");
  client.println();
  
  client.println("<form METHOD=get action=\"\">");
  client.println("<input type=hidden name=\"c\" value=\"3\">");
  client.println("<input type=submit value=\"LED Off\">");
  client.println("</form>");
  client.println();
  
  client.println("</table>");
  client.println("</center>");  
  
  client.println("</body>");
  client.println("</html>");
  
          sentHeader = true;
        }

        char c = client.read();

        if(reading && c == ' ') reading = false;
        if(c == '?') reading = true; //found the ?, begin reading the info

        if(reading){
          Serial.print(c);

           switch (c) {
            case '2':
              //add code here to trigger on 2
              digitalWrite(2, HIGH);
              break;
            case '3':
            //add code here to trigger on 3
              digitalWrite(2, LOW);
              break;
            
          }

        }

        if (c == '\n' && currentLineIsBlank)  break;

        if (c == '\n') {
          currentLineIsBlank = true;
        }else if (c != '\r') {
          currentLineIsBlank = false;
        }
if (c == '\n' && currentLineIsBlank)  break;

        if (c == '\n') {
          currentLineIsBlank = true;
        }else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }


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

  } 

}


Se avete dei problemi a far funzionare il circuito commentate o scrivete sul forum.

5 commenti:

  1. buongiorno Luciano Lamberti,
    ho appena provato il codice caricandolo con l'ide 1.0.6 su un arduino uno con wiznet5100, e funziona correttamente "Ledon" accende, "ledoff" spegne, hai fatto modifiche al codice o lo hai caricato così com'è?

    RispondiElimina
    Risposte
    1. Salve, dopo tanto tempo, ho riprovato il Tuo sketch,
      e devo dirti che funziona, probabilmente avevo sbagliato qual'cosa. Ho inserito i miei dati mac, ecc ecc.
      Ho constatato che funziona anche da remoto, se, avendo dns dinamico, quando cambia ip dns, arduino rimane sempre collegato,

      Elimina
    2. Salve, e possibile, suddividere e commentare lo sketch, in modo di renderlo modificabile.
      Mi spiego, se io volessi usare questo programma per abbinarlo a una scheda con 8 rele,Logicamente visto
      la corrente in gioco, i rele avranno un loro circuito di alimentazione, come dovrei modificare il circuito, e, se volessi, alcuni di questi rele, si sganciassero dopo, tot, tempo, come dovrei fare?
      grazie per la risposta

      Elimina
    3. Ciao Luciano, per aggiungere commenti basta mettere prima //commento, per quanto riguarda i relè se usi una shield 8ch 5v non ti serve altro, colleghi i pin 5v e gnd all' arduino e le uscite di arduino che in questo caso è un led ai relè, in pratica scrivi il programma per 8 led ma in realtà piloti dei relè a 5v e all'uscita puoi gestire anche la 220v, per quanto riguarda lo spegnimento ritardato puoi dare un occhiata allo scketch blink, in pratica pin5 high delay(1000) pin5 low, si accende e dopo 1 secondo si spegne e rimane spento fino al prossimo comando...

      Elimina

Commenta