Offline
Full Member
Karma: 0
Posts: 104
|
 |
« on: January 13, 2013, 11:07:48 am » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 2
Posts: 103
|
 |
« Reply #1 on: January 13, 2013, 02:52:30 pm » |
Ciao, devi implementare una pagina html + javascript AJAX. Nella sezione megatopic trovi un mio progettino che ne fa uso, file show.php
Ciao
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 104
|
 |
« Reply #2 on: January 13, 2013, 07:02:16 pm » |
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? //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><hr />"); client.println("<br />"); client.print("Temperatura interna : "); client.print((int)tempC); client.println(" C"); client.println("<br /><br />"); client.println("<h3><a href=""/"">Aggiorna Sensore</a></h3>"); client.println("<br />"); client.println("<hr />"); client.println("<br />"); client.print("Comandi LED su pin "); client.println(ledpin); client.println("<br />"); client.print("Stato LED :"); if(ledstatus){ client.println("<font color=""green""> ON</font>"); }else{ client.println("<font color=""red""> OFF</font>"); } client.println("<br />"); client.println("<h2><a href=""/?led=1"">ACCENDI</a> | <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
|
|
|
|
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 14
Posts: 2442
|
 |
« Reply #3 on: January 13, 2013, 07:29:54 pm » |
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\">");
|
|
|
|
« Last Edit: January 13, 2013, 07:44:22 pm by pablos »
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
Offline
Full Member
Karma: 2
Posts: 103
|
 |
« Reply #4 on: January 18, 2013, 06:19:52 pm » |
Già scusa  , io l'ho fatto però di mezzo c'è un server web
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 104
|
 |
« Reply #5 on: January 20, 2013, 03:37:52 pm » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 2
Posts: 103
|
 |
« Reply #6 on: January 21, 2013, 06:47:08 pm » |
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  ma e' una considerazione personale )
|
|
|
|
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 14
Posts: 2442
|
 |
« Reply #7 on: January 21, 2013, 07:39:30 pm » |
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 .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 se non vuoi ricaricare tutta la pagina ma solo un elemento devi usare ajax
|
|
|
|
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 104
|
 |
« Reply #8 on: January 22, 2013, 08:11:23 am » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 14
Posts: 2442
|
 |
« Reply #9 on: January 22, 2013, 02:45:03 pm » |
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
|
|
|
|
« Last Edit: January 22, 2013, 02:46:35 pm by pablos »
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 104
|
 |
« Reply #10 on: January 22, 2013, 04:18:29 pm » |
Sorry..... 
|
|
|
|
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 14
Posts: 2442
|
 |
« Reply #11 on: January 22, 2013, 04:46:55 pm » |
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à.
|
|
|
|
« Last Edit: January 22, 2013, 04:49:09 pm by pablos »
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 104
|
 |
« Reply #12 on: January 23, 2013, 05:45:50 pm » |
@pablos stavo appunto dando uno sguardo ad un post che hai commentato: http://arduino.cc/forum/index.php/topic,56928.0.htmldove si sfruttava il tyni webserver per accendere 5 led. Con questo sketch avrò l'aggiornamento dinamico della pagina? Grazie, fabio
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 104
|
 |
« Reply #13 on: January 27, 2013, 07:27:42 am » |
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?
|
|
|
|
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 14
Posts: 2442
|
 |
« Reply #14 on: January 27, 2013, 07:31:03 am » |
si, c'e' un po di js, jquery ajax, ma non è difficile
|
|
|
|
« Last Edit: January 27, 2013, 07:34:34 am by pablos »
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
|