Arduino + Ethernet Shield + Relè

Ciao a tutti ragazzi,

mi è arrivata da qualche giorno la schedina Ethernet Shield per arduino uno…
dopo qualche giorno a documentarmi in rete e a fare prove sono riuscito a farla funzionare con lo skech che vi incollo di seguito:

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


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] =  { 192,168,1, 177 };

const int MAX_PAGENAME_LEN = 8; // max characters in page name 
char buffer[MAX_PAGENAME_LEN+1]; // additional character for terminating null

EthernetServer server(80);



void setup()
{
 
 Serial.begin(9600);
 
 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);
 pinMode(9, OUTPUT);
 pinMode(10, OUTPUT);
 

 
 Ethernet.begin(mac, ip);
 server.begin();
 digitalWrite(10,HIGH);
 delay(2000);
}

void loop()
{
 EthernetClient client = server.available();
 if (client) 
 {
   int type = 0;
   while (client.connected()) 
    {
       if (client.available()) 
       {
       // GET, POST, or HEAD
        memset(buffer,0, sizeof(buffer)); // clear the buffer | scrive l'array con 0
        if(client.readBytesUntil('/',buffer,sizeof(buffer)))
        { 
         if(strcmp(buffer,"POST ") == 0)  //cerca la scritta post http://ruturajv.wordpress.com/2005/12/25/http-post-request/
         {
           client.find("\n\r"); // skip to the body
           // find string starting with "pin", stop on first blank line
           // the POST parameters expected in the form pinDx=Y
           // where x is the pin number and Y is 0 for LOW and 1 for HIGH
           while(client.findUntil("pinD", "\n\r")){
             int pin = client.parseInt();       // the pin number
             int val = client.parseInt();       // 0 or 1
             pinMode(pin, OUTPUT);
             digitalWrite(pin, val);
             
           }
         }
         sendHeader(client,"Domotica");
         //create HTML button to control pin 8
         client.println("<h2>Controllo Pin Digitali</h2>");
         client.println("<table border='1' >");
         for(int i=2;i<=3;i++)
          {
           client.print("<tr><td>Fronte Luce ");
           client.print(i-1);
           client.print(" </td><td>");
           client.print("<form action='/' method='POST'><p><input type='hidden' name='pinD");
           client.print(i);
           client.print("'");
           client.println(" value='0'><input type='submit' value='Off'/></form>");
           client.print(" </td><td>");
           client.print("<form action='/' method='POST'><p><input type='hidden' name='pinD");
           client.print(i);
           client.print("'");
           client.print(" value='1'><input type='submit' value='On'/></form>");
           client.print(" </td><td>stato: ");
           if(digitalRead(i)==1)
              client.print("ON");
            else
              client.print("OFF");
           client.println("</td></tr>");
           }
         
         for(int i=4;i<10;i++)
          {
           client.print("<tr><td>digital pin ");
           client.print(i-1);
           client.print(" </td><td>");
           client.print("<form action='/' method='POST'><p><input type='hidden' name='pinD");
           client.print(i);
           client.print("'");
           client.println(" value='0'><input type='submit' value='Off'/></form>");
           client.print(" </td><td>");
           client.print("<form action='/' method='POST'><p><input type='hidden' name='pinD");
           client.print(i);
           client.print("'");
           client.print(" value='1'><input type='submit' value='On'/></form>");
           client.print(" </td><td>stato: ");
           if(digitalRead(i)==1)
              client.print("ON");
            else
              client.print("OFF");
           client.println("</td></tr>");
           }
         
         
         client.println("</table>");
         client.println("</body></html>");
         client.stop();
       }
     }
   }
   // give the web browser time to receive the data
   delay(1);
   client.stop();
 }
}

void sendHeader(EthernetClient client, char *title)
{
 // send a standard http response header
 client.println("HTTP/1.1 200 OK");
 client.println("Content-Type: text/html");
 client.println();
 client.print("<html><head><title>");
 client.print(title);
 client.println("</title><body>");
}

sono anche riuscito ad aprire le porte del router ed riesco a pilotare i relè anche da remoto senza problemi… ora però mi domandavo… dato che chiunque potrebbe accedere alla pagina online pubblica ed accendermi o spegnermi le luci di casa… c’è un modo modificando il mio programma per inserire ad una password all’apertura della pagina online prima di avere accesso ai comandi dei relè?

in questo caso mi trovo in difficoltà e non saprei proprio come fa… se avete consigli o suggerimenti da darmi vi ringrazierei molto…

Buon sabato a tutti

Mattia

Ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

Guglielmo

gpb01:
Ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

Guglielmo

Grazie mille Guglielmo,

ora ho imparato come inserire il codice senza scrivere un post infinito…
ti chiedo scusa ma era una cosa che non sapevo fare :slight_smile:

Grazie di nuovo

Mattia

Buon pomeriggio a tutti,

vi porgo un quesito, con lo skech che ho postato in precedenza sopra posso comandare 8 relè via ethernet e tramite rete wifi di casa, però accendo e spengo una luce per volta…
diciamo che io volessi oltre ad avere il comando su una con una dicitura accendere e spegnerle tutte…
come potrei fare?

vi posto alcune cose:
1-l’imagine di quello che vedo normalmente sulla pagina internert
2-lo skech che ho provato a modificare per far funzionare la mia idea (che però non funziona)
3-l’immagine di quello che vedo ora con lo skech modificato…

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


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] =  { 192,168,1, 177 };

const int MAX_PAGENAME_LEN = 8; // max characters in page name 
char buffer[MAX_PAGENAME_LEN+1]; // additional character for terminating null

EthernetServer server(80);



void setup()
{
 
 Serial.begin(9600);
 
 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);
 pinMode(9, OUTPUT);
 pinMode(10, OUTPUT);
 

 
 Ethernet.begin(mac, ip);
 server.begin();
 digitalWrite(10,HIGH);
 delay(2000);
}

void loop()
{
 EthernetClient client = server.available();
 if (client) 
 {
   int type = 0;
   while (client.connected()) 
    {
       if (client.available()) 
       {
       // GET, POST, or HEAD
        memset(buffer,0, sizeof(buffer)); // clear the buffer | scrive l'array con 0
        if(client.readBytesUntil('/',buffer,sizeof(buffer)))
        { 
         if(strcmp(buffer,"POST ") == 0)  //cerca la scritta post http://ruturajv.wordpress.com/2005/12/25/http-post-request/
         {
           client.find("\n\r"); // skip to the body
           // find string starting with "pin", stop on first blank line
           // the POST parameters expected in the form pinDx=Y
           // where x is the pin number and Y is 0 for LOW and 1 for HIGH
           while(client.findUntil("pinD", "\n\r")){
             int pin = client.parseInt();       // the pin number
             int val = client.parseInt();       // 0 or 1
             pinMode(pin, OUTPUT);
             digitalWrite(pin, val);
             
           }
         }
         sendHeader(client,"Domotica");
         //create HTML button to control pin 8
         client.println("<h2>Controllo Pin Digitali</h2>");
         client.println("<table border='1' >");
         for(int i=2;i<=3;i++)
          {
           client.print("<tr><td>Fronte Luce ");
           client.print(i-1);
           client.print(" </td><td>");
           client.print("<form action='/' method='POST'><p><input type='hidden' name='pinD");
           client.print(i);
           client.print("'");
           client.println(" value='0'><input type='submit' value='Off'/></form>");
           client.print(" </td><td>");
           client.print("<form action='/' method='POST'><p><input type='hidden' name='pinD");
           client.print(i);
           client.print("'");
           client.print(" value='1'><input type='submit' value='On'/></form>");
           client.print(" </td><td>stato: ");
           if(digitalRead(i)==1)
              client.print("ON");
            else
              client.print("OFF");
           client.println("</td></tr>");
           }
         
         for(int i=4;i<10;i++)
          {
           client.print("<tr><td>digital pin ");
           client.print(i-1);
           client.print(" </td><td>");
           client.print("<form action='/' method='POST'><p><input type='hidden' name='pinD");
           client.print(i);
           client.print("'");
           client.println(" value='0'><input type='submit' value='Off'/></form>");
           client.print(" </td><td>");
           client.print("<form action='/' method='POST'><p><input type='hidden' name='pinD");
           client.print(i);
           client.print("'");
           client.print(" value='1'><input type='submit' value='On'/></form>");
           client.print(" </td><td>stato: ");
           if(digitalRead(i)==1)
              client.print("ON");
            else
              client.print("OFF");
           client.println("</td></tr>");
           }
         



         
          {
           client.print("<tr><td>Tutte le luci ");
           client.print(" </td><td>");
           client.print("<form action='/' method='POST'><p><input type='hidden' name='pinD");
           client.print("'");
           client.println(" value='0'><input type='submit' value='Off'/></form>");
           client.print(" </td><td>");
           client.print("<form action='/' method='POST'><p><input type='hidden' name='pinD");

           client.print("'");
           client.print(" value='1'><input type='submit' value='On'/></form>");
           client.print(" </td><td>stato: ");
           if(digitalRead(2)==1)
              client.print("ON");
            else
              client.print("OFF");
           client.println("</td></tr>");
           }




         
         client.println("</table>");
         client.println("</body></html>");
         client.stop();
       }
     }
   }
   // give the web browser time to receive the data
   delay(1);
   client.stop();
 }
}

void sendHeader(EthernetClient client, char *title)
{
 // send a standard http response header
 client.println("HTTP/1.1 200 OK");
 client.println("Content-Type: text/html");
 client.println();
 client.print("<html><head><title>");
 client.print(title);
 client.println("</title><body>");
}

qualcuno sa dirmi cosa sbaglio? non riesco a capire come fare… si accettano suggerimenti…
il problema è tutto nella parte finale dove devo impostare che alla pressione del tasto on ed off mi faccia scattare tutti i relè, ora mi fa scattare solo il due usando if(digitalRead(2)==1)
come posso dirgli cambiami lo stato ai pin da 2 a 9?

grazie mille e buona giornata a tutti

Cattsura.JPG

Cattusra.JPG

in questo modo ?

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] =  { 192,168,1, 177 };
const int MAX_PAGENAME_LEN = 8; // max characters in page name
char buffer[MAX_PAGENAME_LEN + 1]; // additional character for terminating null

EthernetServer server(80);

void setup()
{
  //Serial.begin(9600); Se non serve, meglio non abilitarlo, perchè rallenta il tutto
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT); // pin riservato al CS della scheda ethernet
  Ethernet.begin(mac, ip);
  server.begin();
  digitalWrite(10, HIGH);
  delay(2000);
}

void loop()
{
  EthernetClient client = server.available();
  if (client)
  {
    int type = 0;
    while (client.connected())
    {
      if (client.available())
      {
        // GET, POST, or HEAD
        memset(buffer, 0, sizeof(buffer)); // clear the buffer | scrive l'array con 0
        if (client.readBytesUntil('/', buffer, sizeof(buffer)))
        {
          if (strcmp(buffer, "POST ") == 0) //cerca la scritta post http://ruturajv.wordpress.com/2005/12/25/http-post-request/
          {
            client.find("\n\r"); // skip to the body
            // find string starting with "pin", stop on first blank line
            // the POST parameters expected in the form pinDx=Y
            // where x is the pin number and Y is 0 for LOW and 1 for HIGH
            while (client.findUntil("pinD", "\n\r")) {
              int pin = client.parseInt();       // the pin number
              int val = client.parseInt();       // 0 or 1
              //pinMode(pin, OUTPUT);
              if (pin == 10) {
                for (int i = 2; i < 10; i++) {
                  digitalWrite(i, val) ;
                }
              }
              else {
                digitalWrite(pin, val);
              }
            }
          }
          sendHeader(client, "Domotica");
          //create HTML button to control pin 8
          client.println("<h2>Controllo Pin Digitali</h2>");
          client.println("<table border='1' >");
          for (int i = 2; i <= 3; i++)
          {
            client.print("<tr><td>Fronte Luce ");
            client.print(i - 1);
            client.print(" </td><td>");
            client.print("<form action='/' method='POST'><p><input type='hidden' name='pinD");
            client.print(i);
            client.print("'");
            client.println(" value='0'><input type='submit' value='Off'/></form>");
            client.print(" </td><td>");
            client.print("<form action='/' method='POST'><p><input type='hidden' name='pinD");
            client.print(i);
            client.print("'");
            client.print(" value='1'><input type='submit' value='On'/></form>");
            client.print(" </td><td>stato: ");
            if (digitalRead(i) == 1)
              client.print("ON");
            else
              client.print("OFF");
            client.println("</td></tr>");
          }

          for (int i = 4; i < 10; i++)
          {
            client.print("<tr><td>digital pin ");
            //client.print(i - 1);
            client.print(i);
            client.print(" </td><td>");
            client.print("<form action='/' method='POST'><p><input type='hidden' name='pinD");
            client.print(i);
            client.print("'");
            client.println(" value='0'><input type='submit' value='Off'/></form>");
            client.print(" </td><td>");
            client.print("<form action='/' method='POST'><p><input type='hidden' name='pinD");
            client.print(i);
            client.print("'");
            client.print(" value='1'><input type='submit' value='On'/></form>");
            client.print(" </td><td>stato: ");
            if (digitalRead(i) == 1) {
              client.print("ON");
            }
            else {
              client.print("OFF");
            }
            client.println("</td></tr>");
          }
          client.print("<tr><td>Tutte le luci ");
          client.print(" </td><td>");
          client.print("<form action='/' method='POST'><p><input type='hidden' name='pinD");
          client.print(10);
          client.print("'");
          client.println(" value='0'><input type='submit' value='Off'/></form>");
          client.print(" </td><td>");
          client.print("<form action='/' method='POST'><p><input type='hidden' name='pinD");
          client.print(10);
          client.print("'");
          client.print(" value='1'><input type='submit' value='On'/></form>");

          //          client.print(" </td><td>stato: ");
          //          if (digitalRead(2) == 1) {
          //            client.print("ON");
          //          }
          //          else {
          //            client.print("OFF");
          //          }

          client.println("</td></tr>");
          client.println("</table>");
          client.println("</body></html>");
          client.stop();
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    client.stop();
  }
}

void sendHeader(EthernetClient client, char *title)
{
  // send a standard http response header
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println();
  client.print("<html><head><title>");
  client.print(title);
  client.println("</title><body>");
}