arduino riceve risposte da php

Ciao Ragazzi
vi chiedo ancora un piccolo aiuto, che mi sta bloccando in modo pesante.

Devo comunicare con il mio Arduino (o i miei Aduini) dei dati a una pagina php.
Fino qui, ci sono riuscito usando il metodo GET

es. pagina.php?address=1;idtag=12345678

la mia pagina, con uno script elabora i dati e scrive in una variabile "accesstatus" true o false;

nello sketch, come faccio a raccogliere questa variabile in modo da andare ad aprire un relè o meno?

thanks y'all!

molto semplice, quando fai la richeista, poi puoi leggere l'HTML della risposta; quindi il tuo bellissimo script PHP scriverà il valor della variabile nell'HTML, che il tuo arduino leggerà ed interpreterà.

<?php
// imposto ip arduino
// 1270.0.1 se la macchina e la stessa 
// localhost se la macchina locale e la stessa 
$ipArduino = "192.168.1.200";


// prelevo i dati
//es. pagina.php?address=1;idtag=12345678

$azione        = $_GET['address'];
$IDlettore    = $_GET['idtag'];

if ($azione = 1){

  if ($IDlettore == "12345678"){

   echo "accesstatus=true";
   echo '<iframe src="http://'.$ipArduino.'?accesstatus=true"></iframe>';
  }

}else{
// attendo che mi passano la variabile azione 
echo "In attesa di un azione..."
echo "accesstatus=impossibile";

}


?>

grazie del supporto....

se ho interpretato bene il php, avrò una stampa a monitor se l'arduino che mi passa la sringa è abilitato o meno...
Non capisco se l'arduino sa cosa deve fare (aprire un relè o meno...). nel senso, accesstatus viene "rispedita" al arduino?

tutto ciè che è in echo, o fuori dai tag <? > viene spedito all'arduino

no signori ..

l'unica parte in qui la pagina PHP parla con arduino e il barba trucco dell 'iframe ..

la pagina PHP prende i valori passatogli dalle variabili , gli elabora come voi decidete e posta il risultato a schermo , A SCHERMO del BROSWER.

digendogli di aprire un iframe gli sto dicendo che a schermo deve aprire un "contenitore" e dentro caricarci la pagina XXX per postare il tutto a schermo ;

Quindi ora arduino in quanto rimmarra in ascolto di eventuali variabile che gli passeremo dovra prendere la variabile passata dall 'iframe :

accesstatus

e decidere il da fare .

In questo caso la pagina php visto che questo post e collegato ad un precedente servirebbe ad effettuare un controllo su un databse
SELECT from XX WHERE idtag LIKE 12345678

if MYSQL success

echo IFRAME

l'iframe e l'unico modo a me conosciuto per rispedire da una pagina php normale , NON lato server una richiesta ad arduino .
ci sarebbe la possibilita di avviare uno script bash dalla pagina php ..
ma non infiliamoci in cose troppo grosse ..

l'iframe in quanto per essere visualizzato a schermo deve caricare la pagina , cerca di aprire la pagina come se fosse un sottobroswer ..
quindi proviamo ad immaginare :

Arduino pagina html :
se il lettore tag legge una tessera dice al web di creare una pagina HTML con un iframe il quale carica la pagina
php

la pagina php in risposta elabora il tutto e apre un altro iframe e riamanda una variabile all web di arduino

ora arduino legge la variabile e dcide che fare .

tutto questo senza un utente che sta davanti ad un broswer

ah, ma tu stai pilotando l'arduino dall'HTML, con un iframe che fa una GET all'ardauno che fa da SERVER.

Invece la richiesta iniziale è che l'arduino faccia da CLIENT verso una pagina PHP; in tal caso arduino si becca come ho detto l'echo, in oltre NON parsando la risposta non si accorgerà dell'iframe e quindi non farà la get a se stesso con i dati che però a questo punto già contiene. (l'iframe/frmae è eseguito lato client, non lato server!)

ripetiamo da capo: arduino fa una richeista get (cambiare ip del server nell'ip o nome host):

GET pagina.php?address=1;idtag=12345678 HTTP/1.1
Host: ip del server

e il server web risponde (seguendo il tuo codice, gli header possono variare) (cambiare '.$ipArduino.' con il valore relae):

HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
ETag: "3f80f-1b6-3e1cb03b"
Content-Type: text/html; charset=UTF-8
Content-Length: 131
Connection: close

accesstatus=true
<iframe src="http://'.$ipArduino.'?accesstatus=true"></iframe>

fine. Senza bisogno di passare da un browser (aperto da chi? e quando? e come?), senza bisogno dell'iframe, basta che arduino leggendo la risposta del server cerchi "accesstatus=" e legga il valore successivo.
Ancora meglio, puoi fare così:

<?php
// imposto ip arduino
// 1270.0.1 se la macchina e la stessa 
// localhost se la macchina locale e la stessa 
$ipArduino = "192.168.1.200";


// prelevo i dati
//es. pagina.php?address=1;idtag=12345678

$azione        = $_GET['address'];
$IDlettore    = $_GET['idtag'];

if ($azione = 1 && $IDlettore == "12345678"){
  echo "1";
}else{
  echo "0";
}
?>

a questo punto la risposta sarà solo 0 o 1, facilmente interpretabile lato arduino, basta scartare tutti i caratteri fino alla riga vuove (che significa fine header, cercare \n\n) e leggere il carattere successivo: se 1 allora il codice è valido, se 0 è imnvalido, se altro è un messaggio di errore in PHP, magari perchè la connessione DB non ha avuto successo o altro.

Non Conoscevo questa funzione GET mi ero fatto tutti i miei viaggi con gli iframe e non l'avevo nenache cercata ..
Chiedo scusa , ecco perchè non ci si capiva l'uno con l'altro sorry !

io la usavo in modo che da un broswer quando cliccavo su una link mandava una variabile ad arduino , se arduino aveva fatto tutto a dovere apriva un iframe e andava a scrivere sul DB che cosa aveva fatto e intanto postava a schermo .. va be i miei viaggi da fuso !!

Sorry , direi che meglio abbandonare gli iframe quando si ha questo a disposizione

esatto, c'è stata confusione, tu da un browser esterno volevi comandare arduino (che quindi faceva da server web) passando da un ulteriore server web PHP (ma tanto valeva passare direttamente da delle pagine generate da arduino no?), invece lui vuole che arduino faccia browser (client) ed interroghi il server web :slight_smile:

nell indecisione litigo solo col mio cane e il codice ..con te NO !!! :slight_smile: :slight_smile: :slight_smile: