Arduino Forum

International => Italiano => Software => Topic started by: MichelePap on Feb 05, 2018, 09:49 pm

Title: Ethernet shield per ON/OFF led da browser, mi sfugge qualcosa?! Aiutoo
Post by: MichelePap on Feb 05, 2018, 09:49 pm
Ciao a tutti,
ho un piccolo problema con uno sketch per la ethernet shield; inserisco qui sotto il codice:
Code: [Select]

String stringa="";

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

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};

IPAddress ip(192, 168, 0, 177);

EthernetServer server(80);

void setup() {
 
  Ethernet.begin(mac, ip);
  server.begin();
 
  pinMode(5,OUTPUT);
  pinMode(7,OUTPUT);
}


void loop() {
 
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (c == '\n') {
          if(stringa.substring(5,11) == "acceso")
            digitalWrite(5,HIGH);
          else if(stringa.substring(5,11) == "spento")
            digitalWrite(5,LOW);
           
            if(stringa.substring(5,12) == "acceso2")
            digitalWrite(7,HIGH);
          else if(stringa.substring(5,12) == "spento2")
            digitalWrite(7,LOW);
         
         
          // Pagina in HTML
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
         
          client.println("<html>");
          client.println("<a href='http://");
          client.println(Ethernet.localIP());
          client.println("/acceso'> Accendi rosso </a>");
          client.println("<br>");
          client.println("<a href='http://");
          client.println(Ethernet.localIP());
          client.println("/spento'> Spegni rosso </a>");
          client.println("</html>");
          client.println("<br>");
     
          client.println("</html>");
          client.println("<a href='http://");
          client.println(Ethernet.localIP());
          client.println("/acceso2'> Accendi verde </a>");
          client.println("<br>");
         
          client.println("<a href='http://");
          client.println(Ethernet.localIP());
          client.println("/spento2'> Spegni verde </a>");
          client.println("</html>");
   
         
          stringa="";
          break;
         
        }
        stringa+=c;
      }
    }
    delay(1);

    client.stop();

  }
}


Aprendo la pagina dal browser vedo correttamente i quattro comandi uno sotto l'altro, i primi due funzionano correttamente, gli altri due no; mi spiego meglio sperando di riuscirci:

Se clicco sul comando "accendi rosso", il led rosso (abbinato al Pin 5) si accende, se clicco sul comando "spegni rosso", il led rosso si spegne.

Quando vado a cliccare sulla voce "accendi verde", mi si accendono entrambi i led (sia rosso che verde), cliccando "spegni verde" mi si spengono entrambi; se invece clicco su "accendi verde" (si accendono entrambi) e poi clicco su "spegni rosso", rimane acceso solo il led verde.
Cosa mi sfugge nel codice secondo voi?   :smiley-fat:


Grazie mille!!!

Miky


Funziona!!!
Grazie a tutti per l'aiuto, l'unico problema che è rimasto è che posso controllare solo in locale e non in remoto, non saprei come fare.

Chiedo scusa per gli errori commessi nel post, spero di aver usato l'anno funzione corretta ora.
Title: Re: Ethernet shield per ON/OFF led da browser, mi sfugge qualcosa?! Aiutoo
Post by: SukkoPera on Feb 05, 2018, 10:07 pm
Per forza, la stringa "acceso2" che accende il secondo led contiene anche la stringa "acceso", che accende il primo led.

Idem per lo spegnimento.
Title: Re: Ethernet shield per ON/OFF led da browser, mi sfugge qualcosa?! Aiutoo
Post by: MichelePap on Feb 05, 2018, 10:25 pm
Grazie mille!!!

Come faccio a dividerle?
Title: Re: Ethernet shield per ON/OFF led da browser, mi sfugge qualcosa?! Aiutoo
Post by: ORSO2001 on Feb 05, 2018, 10:39 pm
bhe...banalmente invia: acceso1 ed acceso2....spento1 e spento2 ...e per entrambi controlli la medesima substring(5,12).
Title: Re: Ethernet shield per ON/OFF led da browser, mi sfugge qualcosa?! Aiutoo
Post by: gpb01 on Feb 05, 2018, 10:43 pm
>MichelePap:   ti ricordo che in conformità al regolamento (http://forum.arduino.cc/index.php?topic=149082.0), punto 7, devi editare il tuo post iniziale (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). Grazie.

Guglielmo
Title: Re: Ethernet shield per ON/OFF led da browser, mi sfugge qualcosa?! Aiutoo
Post by: MichelePap on Feb 15, 2018, 10:20 am
Ciao a tutti,
ho seguito le indicazioni di Guglielmo, probabilmente in maniera errata e mi sono accorto che la mia risposta non l'ha visualizzata nessuno, probabilmente ho sbagliato quanlcosa.

Vorrei ringraziavi per il vostro aiuto, ora funziona tutto alla perfezione, grandi!!!
L'unica cosa che non riesco a fare è agire da remoto, ho provato a fare mille modifiche allo sketch ma niente da fare, il locale tutto perfetto, da remoto zero...
Come potrei fare?
Grazie mille!

Miky
Title: Re: Ethernet shield per ON/OFF led da browser, mi sfugge qualcosa?! Aiutoo
Post by: gpb01 on Feb 15, 2018, 10:25 am
Ciao a tutti,
ho seguito le indicazioni di Guglielmo, probabilmente in maniera errata
Ovviamnete SI ... hai messo '<' e '>' mentre ti ho detto di usare IL BOTTONE con il simbolo "</>" che include i tag CODE che vanno messi all'inizio ed alla fine del codice !

Ho corretto io il tuo post ... vai a vedere come ...

Guglielmo
Title: Re: Ethernet shield per ON/OFF led da browser, mi sfugge qualcosa?! Aiutoo
Post by: docdoc on Feb 15, 2018, 11:08 am
L'unica cosa che non riesco a fare è agire da remoto, ho provato a fare mille modifiche allo sketch ma niente da fare, il locale tutto perfetto, da remoto zero...
Non capisco, cosa intendi con "locale" e "remoto"?
Title: Re: Ethernet shield per ON/OFF led da browser, mi sfugge qualcosa?! Aiutoo
Post by: MichelePap on Feb 15, 2018, 01:29 pm
Chiedo scusa per l'errore, grazie mille.

Intendevo che se accedo alla pagina web inserendo l'indirizzo IP locale attribuito ad Arduino dai dispositivi collegati alla stessa rete, riesco ad eseguire il comando; se cerco di accedere alla pagina da remoto tramite l'IP pubblico attribuito al route, si apre la pagina corretta con i comandi, ma se clicco sui "pulsanti" il comando non viene eseguito.
Title: Re: Ethernet shield per ON/OFF led da browser, mi sfugge qualcosa?! Aiutoo
Post by: nid69ita on Feb 15, 2018, 02:02 pm
Probabilmente perché costruisci la pagina inserendo dei riferimenti all'IP interno
Code: [Select]
client.println("<a href='http://");
client.println(Ethernet.localIP());
Title: Re: Ethernet shield per ON/OFF led da browser, mi sfugge qualcosa?! Aiutoo
Post by: docdoc on Feb 15, 2018, 02:34 pm
Esatto. Togli dagli URI i riferimenti al protocollo e all'indirizzo IP, ossia invece di:

          client.println("<a href='http://");
          client.println(Ethernet.localIP());
          client.println("/acceso2'> Accendi verde </a>");

metti semplicemente:

          client.println("<a href='/acceso2'> Accendi verde </a>");

Il browser utilizzerà automaticamente protocollo (http o anche https se l'hai usato) e indirizzo IP o nome host (e magari con un DynamicDNS puoi definirti un nome senza stare ad impazzire per sapere quale sia l'IP pubblico, se dinamico).

Title: Re: Ethernet shield per ON/OFF led da browser, mi sfugge qualcosa?! Aiutoo
Post by: SukkoPera on Feb 15, 2018, 03:16 pm
Occhio però che così facendo chiunque da qualunque parte del mondo potrà accendere e spegnere le tue cose...
Title: Re: Ethernet shield per ON/OFF led da browser, mi sfugge qualcosa?! Aiutoo
Post by: MichelePap on Feb 15, 2018, 07:02 pm
Grandi, grazie mille, funziona alla grandissima!!!
Bhe ma per poter accedere da remoto occorre conoscere l'indirizzo IP pubblico, lo conosco solo io.

Ora l'ultimo step che mi blocca è riuscire ad utilizzare un router secondario come bridge, altrimenti sono obblicato a tenere la shield collegata al pc (che funziona da bridge)...
Title: Re: Ethernet shield per ON/OFF led da browser, mi sfugge qualcosa?! Aiutoo
Post by: SukkoPera on Feb 15, 2018, 08:00 pm
Certo, lo conosci solo tu, come no...
Title: Re: Ethernet shield per ON/OFF led da browser, mi sfugge qualcosa?! Aiutoo
Post by: gpb01 on Feb 15, 2018, 08:06 pm
Bhe ma per poter accedere da remoto occorre conoscere l'indirizzo IP pubblico, lo conosco solo io.
:D :D :D ... hai le idee piuttosto confunse sull'argomento ... t'assicuro che lo conoscono TUTTI quelli che vogliono fare "danni" !

Ci sono "bot" e "spyder" che girano 24/24 ore alla ricerca di "porte aperte" come vuoi fare tu ...  :smiley-twist:

Guglielmo
Title: Re: Ethernet shield per ON/OFF led da browser, mi sfugge qualcosa?! Aiutoo
Post by: MichelePap on Feb 16, 2018, 12:03 am
Scusate, ma mi sto avvicinando ora al complicato mondo del networking e non è facile capirne tutte le dinamiche in poco tempo.
Ci sarebbe un modo per ovviare a questo inconveniente?
Grazie