Go Down

Topic: Inviare dati a PHP e ricevere comandi via HTTP in un unica sessione (Read 6 times) previous topic - next topic

fvlgnn

Salve a tutti, è un po' di tempo che cerco di fare un progetto che mi permetta di inviare dati da Arduino a PHP e contemporaneamete ricevere dati via HTTP da un client ad Arduino, tutto questo in un unica sessione.
Ho già dei progetti che fanno queste cose, uno invia con un GET o con un POST dei dati ad una pagian PHP, appoggiata su un server, la quale scrive in un DB.
L'altro progetto mette Arduino in ascolto  e tramite il client.read e con il readString.indexOf a seconda dei parametri che mando via HTTP con un browser Arduino compie delle azioni.
Il problema è che non sono mai riuscito a farle funzionare insieme.

Tralasciando le strade di utilizzare un applicazione Java o un computer server AMP con Arduino connesso sulla seriale e comandato tramite una classe in PHP, secondo voi è possibile che nel loop Arduino riesca a  fare un client.read e successivamente un GET?

O meglio può Arduino funzionare da Client per inviare i dati a PHP e contemporaneamente stare in ascolto per ricevere una stringa via HTTP?

Ringrazio anticipatamente tutta la comunity per il supporto che può donarmi.
Il 99% dei problemi informatici si trovano tra la tastiera e la sedia!

Marco Benini

Ciao,

si', si puo' fare avere il webserver + client conteporaneamente.
Il chip supporta fino a 4 connessioni contemporanee (in entrata, uscita o miste).

Se parti dagli esempi che hai gia' realizzato o che trovi online devi stare attento a come nomini gli oggetti client/server quando vengono definiti.

Ciao,
Marco.

lesto

non intendi avere più connessioni, ma una sola che possa eseguire più get/post, giusto?
E' possibile utilizzando lo standard HTTP 1.1, c'è una flag da aggiungere al post o al get per rendere la connessione "permanente" (forse si chiama keep-alive).
mi pare che puoi fare infinite richieste, basta che tra una e l'altra non passi più di un certo tot di tempo, nel qual caso la connessione viene chiusa.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

fvlgnn

Cioa, inanzitutto grazie per le risposte.
Quote
non intendi avere più connessioni, ma una sola che possa eseguire più get/post, giusto?

Non proprio io invio i dati ogni tot secondi, tramite il loop, ad una pagina PHP non è fondamentale che la la conennssione rimanga  permanente.
Quello che non riesco a fare è di invare dei GET/POST e contemporaneamente mantenere Arduino in ascolto su una chiamata via HTTP in modo tale che in base al MAC (es. http://indirizzomioarduino.it/?PIN6=ON&PIN8=OFF) che arriva ad Arduino e che lui legge compie determiante funzioni.

Con degli sketch distinti riesco a fare queste cose, è farli lavorare insieme che non riesco. Ma con tutta probabilità ha ragione Marco Benini, sbaglio l'inizializzazione e devo stare più attento ai nomi degli oggetti client/server.

Se riesco a fare questa cosa sarò lietissimo di postare sia lo sketch che il php.

Vi ringrazio ancora e spero di non dovervi disturbare ulteriormente.

Ciao,
Gianni
Il 99% dei problemi informatici si trovano tra la tastiera e la sedia!

Marco Benini

Ciao,

se invii lo sketch cosi' com'e' ora potremmo vedere dov'e' il problema.

Ciao,
Marco.

fvlgnn

Detto fatto!!! :)
Non so come ringraziarti e una mano o una dritta è ben gradita.
Come puoi immaginare la versione è ALPHAissima, ma come ogni buon tinkerer che si rispetti ho cercato di commentare il più possibile.
Spero che sia chiaro.
Quote

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

#include <Client.h>
#include <Server.h>

/* ***
controllare un attuatore via web e salvare dati in DB
con sensori di temperatura, luce e interruttore magnetico
ARDUINO UNO
ETHERNET SHIELD
*** */

/*inizializzazione ethernet shield*/

byte mac[] = {
 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {
 192, 168, 0, 100 }; // ip arduino internet in ***
byte gateway[] = {
 192, 168, 0, 1 };
byte subnet[] = {
 255, 255, 255, 0 };
byte server[] = {
 000, 000, 000, 000 }; // server a cui inviare dati
Client client(server, 80); //porta del client server

/*FINE inizializzazione ethernet shield*/

long ContaCicli = 0;   // contatore di loop

int outPinRele = 9; // pin attuatore
//char link[]="http://www.giannifavilli.it"; //link
String leggoStringa; // string del MAC in arrivo

boolean RELE1ON = false; // flag status attuatore RELE1ON
boolean logIn = false; // flag status attuatore logIn

/*termistore*/
float Temp; // variabile da calcolare
float inTemp = 1;   // pin analogico IN temperature sensor
int ledPinTemp = 6; // pin led termistore
float TempReg = 20.0; // temperatura di controllo in celsius
/*end termistore*/

/*fotoresistore*/
int Lux; // variabile da calcolare
int ledPinLux = 7; // pin led fotoresistenza
int inPhotoresistor = 0; // pin analogico IN fotoresistore
float LuxReg = 150; // valore controllo luce da 0 a 255
/*end fotoresistore*/

/* interruttore allarme a contatto magnetico*/
int ledPinSwitch = 8; // scelgo il pin per il led interruttore
int inSwitch = 2;   //  scelgo il pin DIGITALE per l'interruttore
int valSwitch = 0;     // variabile per leggere lo stato del pin
/* end interruttore allarme a contatto magnetico*/

/*imposto la variabile e scrivo la stringa POST*/
void inviaDataServer (Client c) {

 c.print("POST http://000.000.000.000/arduino/listener.inc.php?cod=3&"); // indirizzo del server dove gira PHP
 c.print("temp=");
 c.print(Temp);
 c.print("&");
 c.print("lux=");
 c.print(Lux);
 c.print("&");
 c.print("swt=");
 c.print(valSwitch);
 c.print("&");
 c.print("Server=NOMESERVER");
 c.print("&");
 c.print("Board=ArduinoUNO");
 c.print("&");
 c.print("Cicli=");
 c.println(ContaCicli);
}

void setup()
{
 //delay(10000);
 Ethernet.begin(mac, ip, gateway, subnet);
 pinMode(outPinRele, OUTPUT); // dichiaro l'output del rele
 pinMode(ledPinLux, OUTPUT); // dichiaro l'output delled lux
 pinMode(ledPinTemp, OUTPUT); // dichiaro l'output della Temp
 pinMode(ledPinSwitch, OUTPUT);  // dichiaro l'output del led interruttore
 pinMode(inSwitch, INPUT);    // dichiaro l'input dell'interruttore
 Serial.begin(9600);
 Serial.println("connecting...");
}

void loop()
{
 ContaCicli = ContaCicli++;

 /*inizio calcolo temperatura*/
 Temp = ((5 * analogRead(inTemp) * 100.0 ) / 1024) - 50;
 /*fine calcolo temperatura*/

 /*inizio calcolo luce*/
 Lux = analogRead(inPhotoresistor);
 Lux = constrain(Lux, 0, 1023); // limiti dei valori tra 0 e 1023
 Lux = map(Lux, 0, LuxReg, 255, 0);
 /*fine clacolo luce*/

 /*inizio clacolo switch*/
 valSwitch = digitalRead(inSwitch);  // legge il valore dell'input switch
 /*fine clacolo switch*/

 if (client.connect()) {

   inviaDataServer(client);
   Serial.println("Connesso -> Valori Inviati");

   //     receiviDataServer(client);
   //     Serial.println("Connesso -> Valori Ricevuti");

   /*inizio client*/
   if (client) {
     boolean currentLineIsBlank = true;
     while (client.connected()) {
       if (client.available()) {
         char c = client.read();
         leggoStringa.concat(c);
         if (c == '\n' && currentLineIsBlank) {
           Serial.print(leggoStringa);
           /*imposto una stringa di controllo*/
           if(leggoStringa.indexOf("User=nome&Pwd=password") > 0) {
             logIn=true;
           }
           else {
             logIn=false;
           }
           if(logIn == true){
             /*inizio controllo attivazione del rele RELE1ON*/
             if(leggoStringa.indexOf("&OUT=11") > 0) {// check per attivare outPinRele
               //led ON
               digitalWrite(outPinRele, HIGH); // outPinRele ON
               RELE1ON = true;
               // *** //Serial.print("ON pin "); // scrivo in console il valore
               // *** //Serial.println(outPinRele); // scrivo in console il valore
             }
             else
               if(leggoStringa.indexOf("&OUT=01") > 0) // check per disattivare outPinRele
               {
                 //led OFF
                 digitalWrite(outPinRele, LOW); // outPinRele OFF
                 RELE1ON = false;
                 // *** //Serial.print("OFF pin "); // scrivo in console il valore
                 // *** //Serial.println(outPinRele); // scrivo in console il valore
               }
             /*fine controllo attivazione del rele RELE1ON*/
           }
         } // FINE if client

       }
       else {
         Serial.println("Connessione Fallita -> Impossbile Inviare/Ricevere Dati");
       }
       // pulisco la stringa per la successiva lettura
       leggoStringa="";
       //fermo il client
       client.stop();
       delay(10000);
     } // FINEif client disponibile
   }// FINEwhile client connesso
 }// FINE if client
} // FINE loop


Ciao e ancora grazie,
Gianni
Il 99% dei problemi informatici si trovano tra la tastiera e la sedia!

Marco Benini

Ciao,

gli ho dato un primo sguardo al volo.

Non ho ben capito capito se l'attivazione del rele' e' nella risposta che ricevi dal server remoto (quello su cui gira il webserver con PHP) in seguito alla richiesta dei dati data dalla funzione inviaDataServer, oppure vuoi che da un un pc qualsiasi si faccia una richiesta direttamente all'Arduino (meglio dire all'IP pubblico del gateway (router ADSL) che poi fa la richiesta all'indirizzo e porta dell'Arduino nella rete privata).

Ad ogni modo ecco alcune cose che cambierei

Utilizzerei, vista la quantita' dei dati da inviare, il GET al posto del POST per l'invio dei dati.
Nel codice PHP cambi i $_POST con $_GET.

Code: [Select]
void inviaDataServer (Client c) {
  c.print("POST http://000.000.000.000/arduino/listener.inc.php?cod=3&"); // indirizzo del server dove gira PHP


diventerebbe 

Code: [Select]
c.print("GET /arduino/listener.inc.php?cod=3&");
...
c.print(" HTTP 1.0");


Allla fine andrebbe inserito il protocollo di trqasmissione che vuoi utilizzare.
Guardati le differenze fra HTTP 1.0 e HTTP 1.1

Anche se utilizzi HTTP 1.1 e lasci la connessione aperta hai sempre a che vedere con eventuali disconnessioni da timeout o per altre ragioni.
Va quindi inserito un meccanismo per la riconnessione nel codice.

La parte a partire da

Code: [Select]
/*inizio client*/
    if (client) {
      boolean currentLineIsBlank = true;
      while (client.connected()) {
        if (client.available()) {
          char c = client.read();
          leggoStringa.concat(c);
  ....


va rivista in funzione se e' nella risposta all'invio dei dati che vi e' il comando di accensione o meno del rele'.

Io scinderei le due cose.

Se vuoi fare tutto interrogando sempre il webserver PHP allora:
- Farei una richiesta al server PHP per inviare i dati e controllerei se va a buon fine.
- Poi farei un'altra richiesta ad altro file per sapere se vi e' richiesta di attivazione rele'.

Spero di essermi spiegato, piu' tardi posso vedere meglio il tutto, ora devo finire del codice PHP.

Ciao,
Marco.

lesto

ah ok, vuoi un server ce gestisca più client contemporaneamente http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238640832, se vuoi che possa gestire più richieste (non di contemporaneamente), allora basta che dopo il client.stop(), o quando rilevi il client disconnesso & non in ascolto, lo rimetti in ascolto.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

fvlgnn

Provo a rispondere.

Quote
Non ho ben capito capito se l'attivazione del rele' e' nella risposta che ricevi dal server remoto (quello su cui gira il webserver con PHP) in seguito alla richiesta dei dati data dalla funzione inviaDataServer, oppure vuoi che da un un pc qualsiasi si faccia una richiesta direttamente all'Arduino (meglio dire all'IP pubblico del gateway (router ADSL) che poi fa la richiesta all'indirizzo e porta dell'Arduino nella rete privata).

La richiesta per l'attivazione del relè deve arrivare dal server dove gira PHP è più sicuro da un punto di vista informatico.

Utilzzando il GET
Code: [Select]
c.print("GET http://www.mioserverphp/arduino/listener.inc.php?cod=3&");
...
c.print(" HTTP 1.0");

Ho provato ad inserire HTTP 1.0 o 1.1 e non invia i dati ... ma lo correggo come minimo sbaglio qualche spazio. Grazie della dritta del GET al posto del POST.

Quote
Se vuoi fare tutto interrogando sempre il webserver PHP allora:
- Farei una richiesta al server PHP per inviare i dati e controllerei se va a buon fine.
- Poi farei un'altra richiesta ad altro file per sapere se vi e' richiesta di attivazione rele'.

E' un eccellente soluzione.

Quote
ah ok, vuoi un server ce gestisca più client contemporaneamente http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238640832, se vuoi che possa gestire più richieste (non di contemporaneamente), allora basta che dopo il client.stop(), o quando rilevi il client disconnesso & non in ascolto, lo rimetti in ascolto.

Sì, mi sono spiegato male a dire in contemporanea ... sì l'idea è che Arduino manda i valori al server PHP e connettendomi a quest'ultimo tramite un form mando una stringa ad Arduino che la legge e la interpreta.
Comunque la soluzine che mi dai di rimettere in ascolto Arduino dopo l'invio del GET seguito dal client.stop() non mi era mai balenta nell testa e mi sembra eccellente.

Non sò ancora come ringraziarvi ... provo a fare dei test e vi aggiorno.

Ciao,
Gianni
Il 99% dei problemi informatici si trovano tra la tastiera e la sedia!

lesto

ah ok, ora mi è tutto più chiaro.
quindi arduino è un client, se fai che appena chiudi la connessione si riapre, avrai arduino che contina a richiedere pagine al tuo server HTTP, creando in pratica un simil attacco dos... metti un pò di tempo di attesa. (come il delay che c'è già dopo client.stop() )

ah HTTP 1.0 non ti funziona perchjè la sintassi corretta è:

GET /index.html HTTP/1.1
Host: www.example.com
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

fvlgnn

#10
Aug 26, 2011, 12:45 pm Last Edit: Aug 26, 2011, 12:50 pm by fvlgnn Reason: 1
Ciao a tutti,
scusate la latitanza ma il mare chiamava :)
Ho ripreso a lavorare sul progetto e ho sviluppato la parte PHP che rimane in attesa di ricevere i dati da arduino, fin qui tutto bene. Purtroppo non riesco ancora a far leggere ad Arduino la stringa indexOf che arrvia da un browser o direttamente dalla pagina PHP che rimane in attesa di un determinato evento.
Quote
Se vuoi fare tutto interrogando sempre il webserver PHP allora:
- Farei una richiesta al server PHP per inviare i dati e controllerei se va a buon fine.
- Poi farei un'altra richiesta ad altro file per sapere se vi e' richiesta di attivazione rele'.

Marco, non ho capito bene il secondo punto. La parte di invio dati funziona ed è come la volevo, addirittura usando le notifiche di Google Calendar riesco a ricevere degli SMS nel caso avvenga un determinato evento su Arduino.
Il mio problema "insormontabile" rimane il fatto che non riesco a far leggere ad arduino una stringa che gli dovrebbe arrivare come un indirizzo o meglio un MAC del tipo http://indirizzo-arduino/?LUCE=ON
Posto nuovamente il codice all'ultima versione sperando che voi più esperti riuscite a capire dove sbaglio o se faccio confusione io.
Code: [Select]

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

byte mac[] = {
 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = {
 192, 168, xxx, xxx }; // ip arduino internet in ***
byte gateway[] = {
 192, 168, xxx, xxx }; // internet access via router ***
byte subnet[] = {
 255, 255, xxx, xxx }; //subnet mask ***
byte server[] = { xxx, xxx, xxx, xxx }; // server a cui inviare dati
Client client(server, 80); //client server port

...

/*imposto la variabile e scrivo la stringa GET*/
void inviaDataServer (Client c) {

         c.print("GET /listener.php?test=p25&");
...
         client.println(" HTTP/1.1");
         client.println("Host:xxx.xxx.xxx.xxx");
         client.println();
}

void setup()
{
 Ethernet.begin(mac, ip, gateway, subnet);
...
 Serial.begin(9600);
 Serial.println("connecting...");
}

void loop()
{

...
 
if (client.connect()) {

//     inviaDataServer(client);
    Serial.println("Connesso -> Valori Inviati");

/*** DA QUI IN POI IL CAOS ***/
/*** Le parti di "CAOS" remmate sono le varie prove che ho eseguito
per far leggere ad Arduino la stringa in arrivo ma senza successo!***/
//if (client) {
//  while (client.connected()) {
//    if (client.available()) {

while (client.available()) {
     char s = client.read();
       leggoStringa.concat(s);
      if (s == '\n' && currentLineIsBlank) {
        Serial.print(leggoStringa);
       if(leggoStringa.indexOf("LUCE=ON") > 0) {
         digitalWrite(outPinRele, HIGH);
         LEDON = true;
         }else{
         digitalWrite(outPinRele, LOW);
         LEDON = false;
       }
       } //if (s == '\n' && currentLineIsBlank)
} //while (client.available())
//} //if (client.available())
//} //while
//}   //if (client)
} else {
Serial.println("Connessione Fallita -> Impossbile INVIARE Dati");
}
       //fermo il client
       client.stop();
       delay(5000);
} // FINE loop


Spero in un vostro cortese aiuto.
Ciao a tutti,
Gianni
Il 99% dei problemi informatici si trovano tra la tastiera e la sedia!

lesto

il tuo arduino fa da client è invia la richesta GET, il server NON risponde con una GET ma con un messaggio di OK.

allora per capire cosa stai combinando anche a lato PHP fai così:
Code: [Select]
#include <String.h>
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {
 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = {
 192, 168, xxx, xxx }; // ip arduino internet in ***
byte gateway[] = {
 192, 168, xxx, xxx }; // internet access via router ***
byte subnet[] = {
 255, 255, xxx, xxx }; //subnet mask ***
byte server[] = { xxx, xxx, xxx, xxx }; // server a cui inviare dati
Client client(server, 80); //client server port

...

/*imposto la variabile e scrivo la stringa GET*/
void inviaDataServer (Client c) {

         c.print("GET /listener.php?test=p25&");
...
         client.println(" HTTP/1.1");
         client.println("Host:xxx.xxx.xxx.xxx");
         client.println();
}

void setup()
{
 Ethernet.begin(mac, ip, gateway, subnet);
...
 Serial.begin(9600);
 Serial.println("connecting...");
}

void loop()
{

...
 
if (client.connect()) {

//     inviaDataServer(client);
    Serial.println("Connesso -> Valori Inviati");

/*** DA QUI IN POI NON FUNZIONA ***/

if (client) {

Serial.println("Inizio lettura:");

while (client.available()) {
     char s = client.read();
      Serial.print(leggoStringa);
} //while (client.available())

Serial.println();
Serial.println();

}   //if (client)
} else {
Serial.println("Connessione Fallita -> Impossbile INVIARE Dati");
}
       //fermo il client
       client.stop();
       delay(5000);
} // FINE loop
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

fvlgnn

#12
Aug 26, 2011, 01:36 pm Last Edit: Aug 26, 2011, 01:53 pm by fvlgnn Reason: 1
Grazie lesto della risposta!
Il PHP può rispondere in due maniera, manuale con un FORM in HTML o in automatico.
Ho utilizzato il tuo esempio ma non ricevo nessuna risposta ...  :(
Il codice PHP che mi deve rispondere per fare un esempio molto semplice è questo.
Code: [Select]
header ("Location: http://indirizzo-arduino/?LEDON");
Ma non funziona!!!
Nell'inizializzazione del codice di Arduino la variabile leggoStringa messa così:
Code: [Select]
String leggoStringa; // stringa

Mentre se aggiungo al codice: leggoStringa.concat(s);
Code: [Select]
while (client.available()) {
     char s = client.read();
     leggoStringa.concat(s);
     Serial.print(leggoStringa);
} //while (client.available())

Ricevo delle risposte ma non belle :( tipo HTTP 302 Found come se PHP non riuscisse ad eseguire il redirect.
http://en.wikipedia.org/wiki/HTTP_302
Il 99% dei problemi informatici si trovano tra la tastiera e la sedia!

lesto

ehmmm... veramente l'errore 302 è proprio quello che indica che la pagina è stata spostata, ed include anche il link alla nuova pagina (la famosa location)
secondo me in PHP NON devi restituire una location, o un URL, ti complichi solo la vita. Fagli rispondere una normale pagina HTML con tutti i dati che ti serve inviare all'arduino
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

fvlgnn

#14
Aug 29, 2011, 07:40 pm Last Edit: Aug 29, 2011, 10:41 pm by fvlgnn Reason: 1
Grazie ancora lesto dei tuoi consigli molto utili.
Sono riuscito a fere quello che volevo ma ho dovuto utilizzare delle "toppe" e ho dovuto far fare ad arduino la costruzione dell'html, una cosa che volevo evitare che facesse lui. Nel mio progetto arduino doveva solo leggere una stringa e non doveva oberarsi di costruire anche l'html ma provando e riprovando non ci sono riuscito.
Il progetto al momento è molto Alpha comunque Arduino riceve delle chiamate in ingresso sotto forma di stringhe http e invia un get con un report dei vari sensori ad una pagina php che elabora i dati.
C'erano degli errori nei codici postati in precedenza.
Inanzitutto l'inizializzazione ... questa che segue è la corretta:
Code: [Select]
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, xxx, xxx };
byte gateway[] = { 192, 168, xxx, xxx };
byte subnet[] = {  255, 255, xxx, 0 };
byte serverphp[] = { xxx, xxx, xxx, xxx }; // indirizzo ip del server a cui inviare dati
Server server(80); //porta del server

Quindi il risultato finale è il seguente, ripeto che è molto Alpha come versione tra qualche giorno vi posterò quella definitiva e testata ad utilizzo della community
Code: [Select]
#include <String.h>
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, xxx, xxx };
byte gateway[] = { 192, 168, xxx, xxx };
byte subnet[] = {  255, 255, xxx, 0 };
byte serverphp[] = { xxx, xxx, xxx, xxx }; // indirizzo ip del server a cui inviare dati
Server server(80); //porta del server

...

void setup()
{
 Ethernet.begin(mac, ip, gateway, subnet);
...
 Serial.begin(9600);
 Serial.println("connecting...");
}

void loop()
{

...
 
/*parte che riceve i dati*/
Client client = server.available();

if (client) {
 boolean currentLineIsBlank = true;
 while (client.connected()) {
   if (client.available()) {
     char c = client.read();
       leggoStringa.concat(c);
     if (c == '\n' && currentLineIsBlank) {
        Serial.print(leggoStringa);
       if(leggoStringa.indexOf("qualcosa") > 0) {
         Serial.println("ON");
       
         }else{
         Serial.println("OFF");
       }
       //costruzione html
       client.println("HTTP/1.1 200 OK");
       client.println("Content-Type: text/html");
       client.println();
       // inizializzo pagina
       client.print("<html><head><title>ARDUINO WEB TEST</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");
       ...
       client.println("</body></html>");
       
       //pulisco la stringa
       leggoStringa="";
       //fermo il client
       client.stop();

       } //if c == /n
   } // if client available
 } // while client connesso
} // if client
/*fine parte che riceve i dati*/

/*parte che invia i dati*/
Client client_t(serverphp,80);
if (client_t.connect()) {  
         s.print("GET /arduino/paginaphp.php?campo=qualcosa&");
...
         s.println(" HTTP/1.1");
         s.println("Host:192.138.80.81");
         s.println();
client_t.stop();
}
/*fine parte che invia i dati*/

delay(1000);    
         
} //loop


Non sono del tutto contento perchè avrei voluto evitare ad Arduino di costruire l'html per non sovraccaricarlo di lavoro ma ho imparato un sacco di cose che mi saranno utili, pertanto al momento mi ritengo soddisfatto  :D

Grazie ancora di tutto a tutti voi per l'aiuto fondamentale in questo progettino!!!

PS tra qualche giorno finiti i test posterò il codice funzionante con annesso file PHP per l'invio di SMS senza GSM shield utilizzando il servizio di notifica via SMS messo a disposizione da Google Calendar.

A presto e grazie ancora,
Gianni
Il 99% dei problemi informatici si trovano tra la tastiera e la sedia!

Go Up