Buonasera a tutti, sto cercando di leggere dei valori con arduino da un php in rete! però non ho la minima idea di come si faccia, qualcuno ha qualche idea??
grazie mille
Buonasera a tutti, sto cercando di leggere dei valori con arduino da un php in rete! però non ho la minima idea di come si faccia, qualcuno ha qualche idea??
grazie mille
Neanche noi abbiamo la piú minima idea di quello che stai facendo perché non capiamo cosa vuoi fare.
Ciao Uwe
Scusate mi sono espresso male, vorrei riempire delle variabili in Arduino con dei valori letti da file php i rete.
Un file php è un programma (uno script che gira su un server), quello che dici è comunque insufficiente. Tu vuoi poter richiamare in http un certo indirizzo, che esegue "qualcosa" in php e che restituisce una "certa" risposta.
Tu sai come richiamare come client http un indirizzo web e ricevere la risposta e quindi vuoi sapere come "interpretare" la risposta (in tal caso devi dirci che tipo di risposta ottieni e un esempio di questa), o non sai proprio come richiamare con Arduino una pagina web?
Richiamare una pagina web sono capace, però non riesco ad interpretare la risposta (scusate per la confusione delle mie risposte ma è la prima volta che faccio un progetto del genere )
Ok, quindi allora devi spiegare cosa ottieni come risposta, ossia il programma php cosa risponde ed in quale formato? E' una risposta HTML, un XML, SOAP, cosa? Tu la memorizzi come stringa, immagino. Se hai già provato a fare qualcosa perché non posti il TUO codice così capiamo?
il codice che ho provato io è questo e credo che il dato da ricevere sia un txt
void loop() {
char server[] = "www.miosito.it";
float temperatura = 0.0;
if (temperatura >= 27 and temperatura < 50)
digitalWrite(led, LOW);
if (temperatura <= 25)
digitalWrite(led, HIGH);
String temperature = "";
client.stop();
delay(1000);
client.print("GET www.miosito.it/Snicolo.php HTTP/1.0");
temperature = "GET /Snicolo.php?datox=";
temperature += temperatura;
temperature += " HTTP/1.1";
Serial.println(temperature);
// se ottiene una connessione, stampa i dati sulla seriale
if (client.connect(server, 80))
{
//Serial.println("connected to server");
// Make a HTTP request:
client.println(temperature);
client.println("Host: wwwmiosito.it");
client.println("User-Agent: ArduinoWiFi/1.1");
client.println("Connection: close");
client.println();
}
mentre il codice neesario in php del servere è questo:
<?php
$content = file("public/dati_nicolo/datox.txt");
$datax = implode("
",$content);
<body>
<div class="top">
<div class="header">
<div class="row_top">
<h1><span style="color: #787676;">PORTALE</span> NICOLO'</h1>
</div>
<div class="row_bottom">
<h1> <img src="img/foto2.jpg"</h1>
</div>
</div>
</div>
<div class="nav">
<h2> </h2>
<ul>
<li><a href="index.html"> </a></li>
<li><a href="maz80.html"> </a></li>
</ul>
<p></p>
<p> </p>
<p> </p>
<p></p>
<p> </p>
<p> </p>
<p> </p>
</div>
<div class="content">
<h3>INTERRUTTORI
<?php echo date ("d-m-y")?>
</h3>
<? echo "interruttore x: " . $datax?>
</p>
<p>
<? echo "interruttore 2: " . $data2?>
</p>
</html>
Perché stai inviando due GET? Devi metterne solo una!
nimasa98:
il codice che ho provato io è questo e credo che il dato da ricevere sia un txt
Come "credo"? Scusa ma se tu richiami con un browser l'indirizzo della pagina php, cosa ottieni? Tra l'altro il codice Arduino che hai postato è incompleto, fai la GET (anzi ne fai due, togli la prima!) ma poi dove leggi la risposta? E, in sostanza, cosa vuoi leggere dalla risposta?
Stando al codice php che hai mandato, vedo che risponde con una pagina html con immagini, link, e quant'altro, per cui non è rapidamente interpretabile. Ti servirebbe una versione specifica di quel codice php che mandi in risposta non tutta quella roba che serve solo agli utenti "umani", ma magari una semplice sequenza di valori secondo un formato che potresti/dovresti stabilire. Ma quel codice php l'hai fatto tu? E' modificabile?
Si sì quel codice php l'ho scritto io, ma c'è una sintassi per interrogare un file del genere ?
nimasa98:
Si sì quel codice php l'ho scritto io, ma c'è una sintassi per interrogare un file del genere ?
Tu non interroghi il file php, ricevi il suo output come risultato della GET, ed è questo che devi interpretare, ossia se le informazioni che ti servono sono "affogate" dentro quel codice html, devi necessariamente sapere dove si trovano, e cercare quei particolari tag.
Quindi rispondi anche alle altre mie domande che ti ho scritto sopra, e vediamo.
Se chiamo quell'indirizzo ottengo una pagina di un portale con al centro i valori dei dati che voglio leggere. Ho tolto il primo get e non leggo la risposta perchè non ne sono in grado e comunque vorrei solo leggere un 1 o un 0.
Scusa ma ancora non riesco a capire, dai sempre poche informazioni e incomplete...
Primo, se tu hai scritto quel codice PHP sarai pure in grado di fare un altro codice praticamente uguale ma che manda in risposta solo i dati che ti interessano, e che quini leggerai da Arduino?
Secondo, nel codice Arduino c'è un poco di confusione: se non erro stai cercando di acquisire una volta al secondo alcuni dati forniti dal server remoto (nel frattempo quindi Arduino non fa nient'altro), quindi per prima cosa prova qualche sketch di esempio che puoi trovare in rete e che richiama una qualsiasi pagina web memorizzandone la risposta in una stringa.
Terzo, fatto questo, devi quindi applicare lo stesso metodo al tuo sketch ed alla tua pagina PHP (o, meglio, ad una creata appositamente per un client "non umano"), quindi se non riesci a capire poi come analizzare la risposta allega qui la stringa che ricevi dalla pagina PHP (ed il nuovo codice PHP se ne avrai nel frattempo fatto uno specifico).
Se posso chiedere un ultimo aiuto...non riesco proprio a trovare nessun esempio che mi aiuti a stampare l'indirizzo del web, qualche aiuto?
Hehehe si, puoi ovviamente chiedere aiuti, ci mancherebbe, siamo qui apposta!
Però anche in questo caso, che significa "stampare l'indirizzo del web"? L'indirizzo della tua pagina PHP lo dovresti conoscere (altrimenti come ti ci colleghi), quindi di quale indirizzo parli?
Se invece parli di vedere cosa riceve Arduino inizia con l'esempio "Web Client" (tra gli esempi della libreria "Ethernet") per capire come ricevere la risposta, che qui semplicemente riporta su Serial tu invece accumulerai dentro una variabile stringa fino alla fine della risposta (vedi il loop()).
Grazie mille ora riesco a visualizzare la pagina, ma non riesco a farla aggiornare continuamente...è come se fosse fuori dal loop(), è possibile ?
Posta la versione attuale dello sketch.
Questo è il sketch:
void setup() ...if (client.connect(server, 80)) {
Serial.println("connected");
client.println("GET /Snicolo.php HTTP/1.1");
client.println("Host: www.miosito.it");
client.println("Connection: close");
client.println();
} else {
Serial.println("connection failed");
}
}
void loop() {
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
// do nothing forevermore:
while (true){
};
}
}
La connessione la fai solo nel setup(), se vuoi richiamarla continuamente devi metterla nel loop()
Ma in questo modo sul seriale ottengo solo continuamente "conneceted" senza nessuna pagina visualizzata.
Inoltre è sorto un ulteriore problema, ovvero quando il server risponde mi salva la pagina in un char e trasformandolo in una stringa per controllare la presenza di determinati valori, risulta una stringa composta da un carattere per riga
String uno;
if (client.connect(server, 80)) {
Serial.println("connected");
client.println("GET /Snicolo.php HTTP/1.1");
client.println("Host: www.miosito.it");
client.println("Connection: close");
client.println();
} else {
Serial.println("connection failed");
}
if (client.available()) {
char c = client.read();
uno = String(c);
//Serial.print(uno);
int s = uno.length();
Serial.print(s);
}
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
// do nothing forevermore:
while (true){
};
}