Go Down

Topic: aggiornare pagina web da client (Read 2 times) previous topic - next topic

fafidio

Salve, riprendo dopo mesi il mio progetto di comunicazione client- server web con due arduino con ethernet shield.
Con il mio codice sono riuscito con successo ad accendere un led su arduino server chiudendo un pulsante su arduino client. Il tutto gestito da una pagina web caricata sul server e visibile da un pc in rete. Naturalmente anche via web riesco ad  inviare post al server che eseguirà il comando: quello che non riesco ancora a fare è aggiornare in tempo reale la pagina web che controllo dal pc quando il client manda un comando al server: per spiegarmi meglio, quando chiudo il pusante sul client, il server esegue l'accensione del led, ma contemporaneamente non cambia lo stato sulla pagina web del pc. Per fare ciò ho bisogno di aggiornare la pagina dal pc stesso: come posso fare per aggiornare da arduino la pagina che vedo dal pc? Grazie in anticipo a chi mi verrà in aiuto.

andrea86

Ciao, devi implementare una pagina html + javascript AJAX. Nella sezione megatopic trovi un mio progettino che ne fa uso, file show.php

Ciao

fafidio

Ti ringrazio della celere risposta, ma purtroppo non sono ferrato nella programmazione. Ho provato al leggere il tuo codice ma lo trovo troppo complesso:questo è  la pagina web in html lato server che utilizzo. Si può modificare, magari non tanto,  per ottenere quella funzione?
          
Quote

               //Creazione pagina web
          client.println("<html><head>");
          
          client.println("<title>Domotic-Arduino</title>");
          
          client.println("</head>");
          client.println("<body bgcolor=""black"" text=""white"">");
          
          client.println("<h1 align=""center"">Domotic-Home</h1>
"[/color]);
          client.println("
"
);
          client.print("Temperatura interna : ");
          client.print((int)tempC);
          client.println(" C");
          client.println("

"
);
          client.println("<h3><a href=""/"">Aggiorna Sensore[/url]</h3>");
          client.println("
"
);
          client.println("
"[/color]);
          client.println("
"
);
          client.print("Comandi LED su pin ");
          client.println(ledpin);
          client.println("
"
);
          client.print("Stato LED :");
          if(ledstatus){
            client.println("<font color=""green""> ON</font>");
          }else{
            client.println("<font color=""red""> OFF</font>");
          }
          client.println("
"
);
          client.println("<h2><a href=""/?led=1"">ACCENDI[/url] | <a href=""/?led=0"">SPEGNI</></h2>");
          
          client.println("</body></html>");
          
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
  }
}

}}

Grazie

pablos

#3
Jan 14, 2013, 01:29 am Last Edit: Jan 14, 2013, 01:44 am by pablos Reason: 1

Ciao, devi implementare una pagina html + javascript AJAX. Nella sezione megatopic trovi un mio progettino che ne fa uso, file show.php

Ciao

Scusa Andrea, come interpreta il suo browser il file php?
Lui sta parlando di pagine costruite con client.print che arrivano da arduino, sul client mi pare di capire che ha solo un browser che interroga arduino.

prova a mettere un client.print("<meta http-equiv=\"refresh\" content=\"2\">");
no comment

andrea86

Già scusa :smiley-red:, io l'ho fatto però di mezzo c'è un server web

fafidio

Bene, potrebbe essere una soluzione..ma il problema è che il browser si aggiorna ogni tot secondi col fastidioso suono.....Dovrei aggiornare solo se il pulsante cambia stato! Posso utilizzare lo stesso comando però lato client (è lui che sa quando il pulsante cambia stato)? Grazie.

andrea86

il comando che hai aggiunto fa si che il client ogni un tot di tempo richiede al server la pagina in html...

se non vuoi ricaricare tutta la pagina ma solo un elemento devi usare ajax.  se non erro c'e' una libreria che permette di emulare un server web... pero' non l'ho mai usata ( trovo la cosa un po' innaturale  :smiley-red: ma e' una considerazione personale )

pablos


Bene, potrebbe essere una soluzione..ma il problema è che il browser si aggiorna ogni tot secondi col fastidioso suono....

il suono fastidioso si può sempre eliminare

Quote
.Dovrei aggiornare solo se il pulsante cambia stato! Posso utilizzare lo stesso comando però lato client (è lui che sa quando il pulsante cambia stato)? Grazie.


non può arduino chiamare il client e dirgli .... ehiii sono cambiato aggiorna la pagina!!!! altrimenti non sarebbe più un webserver, ma sarebbe un "webclient".

te lo hanno detto qui
Quote
se non vuoi ricaricare tutta la pagina ma solo un elemento devi usare ajax
no comment

fafidio

Grazie dell'interesse! Ora spiego mi meglio, magari sto sbagliando tutto!!!
Ho due arduino  con ethernet shield, uno sever e l'altro client. Sul client si chiude un pulsante, con il codice che ho caricato mando una post al server che riceve la post e mi accende un led (sul server).
Sul server ho caricato la pagina web che ho postato: quando il client comunica  al server di accendere, lui esegue ed io posso verificare il tutto collegandomi dal mio pc all'indirizzo del server su cui e caricata la pagina. Ma mentre sono collegato,se chiudo il pusante sul client, il mio pc rimane fisso sulla schermata (a meno che non faccia il refresh come suggerito) fino a quando non aggiorno manualmente.
Mi sa che devo studiare ajax....
Ma questa è solo una chicca....dato che userò i due arduino per la domotica, non credo che sarà indispensabile avere un monitor aggiornato al secondo.....
Invece un altro quesito che sottopongo alla vostra attenzione è il seguente:
posso da arduino server accendere un led su arduino client? Oppure il client è nato solo per trasmettere dati senza poter ricevere alcun comando? Grazie, Fabio.

pablos

#9
Jan 22, 2013, 08:45 pm Last Edit: Jan 22, 2013, 08:46 pm by pablos Reason: 1
ahhhh ora capisco la confusione ... parliamo della stessa cosa su 2 post identici aperti da te.... pensa se ne aprissimo tutti 2 o 3 che casino scoppia :)
http://arduino.cc/forum/index.php/topic,144070.0.html sei sempre tu con lo stesso problema
no comment

fafidio


pablos

#11
Jan 22, 2013, 10:46 pm Last Edit: Jan 22, 2013, 10:49 pm by pablos Reason: 1
Quote
posso da arduino server accendere un led su arduino client? Oppure il client è nato solo per trasmettere dati senza poter ricevere alcun comando?

Non è questione di nascere o meno, il concetto è:
Le comunicazioni http (in questo caso) avvengono su richiesta e conseguente risposta....senza risposta si va in timeout
Es: Il server è in attesa di qualche domanda.... la domanda la fa il client, il server manda i dati, il client riceve la risposta ... fine sessione.
Se voglio aggiornare i dati sulla pagina, il client deve sempre chiederli al server e il server glieli manda, ad ogni ricevuta dei dati la sessione finisce.
Il server non invia dati se nessuno glieli chiede, il server non fa domande e non invia dati di sua spontanea volontà.
Per questo ti ho detto che il tuo programma deve contenere sia le funzioni server che client, io personalmente non l'ho mai fatto, ma so con certezza che potrei farlo. Ci sono esempi in rete, anche se è una particolare necessità.
no comment

fafidio

@pablos
stavo appunto dando uno sguardo ad un post che hai commentato:
http://arduino.cc/forum/index.php/topic,56928.0.html
dove si sfruttava il tyni webserver per accendere 5 led.
Con questo sketch avrò l'aggiornamento dinamico della pagina?
Grazie, fabio

fafidio

Purtroppo non riesco a trovare uno straccio di codice che mi permetta di avere l'esempio  client-server insieme, che faccia al caso.....
qualcuno sa aiutarmi?

pablos

#14
Jan 27, 2013, 01:31 pm Last Edit: Jan 27, 2013, 01:34 pm by pablos Reason: 1

@pablos
stavo appunto dando uno sguardo ad un post che hai commentato:
http://arduino.cc/forum/index.php/topic,56928.0.html
dove si sfruttava il tyni webserver per accendere 5 led.
Con questo sketch avrò l'aggiornamento dinamico della pagina?
Grazie, fabio


si, c'e' un po di js, jquery ajax, ma non è difficile
no comment

Go Up