Ciao a tutti,
ho fatto un web server con Arduino che funziona egregiamente, ora però vorrei fare una modifica.
Vorrei che da una pagina esterna fatta in php io possa leggere i dati forniti da Arduino in modalità XML.
il mio codice Arduino è questo:
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
// MAC address from Ethernet shield sticker under board
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,121); //Brovello
EthernetServer server(806); // create a server at port 806 e quindi aprirla nel router
String HTTP_req; // stores the HTTP request
String strURL = "";
// non usare i 10-4-53M
byte Pin_termostato=2;//11;
void setup()
{
// i pin della ethernet e della sd devono sempre essere dichiarati
pinMode(SS_PIN, OUTPUT);
digitalWrite(SS_PIN, 1);
pinMode(10, OUTPUT);
digitalWrite(10, 1);
pinMode(4, OUTPUT);
digitalWrite(4, 1);
pinMode(53, OUTPUT);
digitalWrite(53, 1);
//Dichiarazione pin
pinMode(Pin_termostato, OUTPUT);
digitalWrite(Pin_termostato, LOW);
Ethernet.begin(mac, ip); // initialize Ethernet device
server.begin(); // start to listen for clients
Serial.begin(9600); // for diagnostics
}
void loop()
{
EthernetClient client = server.available(); // try to get client
if (client) { // got client?
while (client.connected()) {
if (client.available()) { // client data available to read
char c = client.read(); // read 1 byte (character) from client
HTTP_req += c;
if (c == '\n' ) { //leggo solo la prima riga perchè nelle altre c'è il
//al passaggio precedente e questo creano problemi
Serial.println(HTTP_req);
// gestisco i comandi che ricevo via internet
//Riscaldamento/////////////////////////////////////////////
if (HTTP_req.indexOf("termostato")>0) {
Serial.println(digitalRead(Pin_termostato));
if (digitalRead(Pin_termostato)){
digitalWrite(Pin_termostato, LOW);
}
else{
Serial.println("acceso");
digitalWrite(Pin_termostato, HIGH);
}
}
if (HTTP_req.indexOf("datiXML")>0) {
Serial.println("Richiesta dati XML");
client.println("Content-Type: text/xml");
client.println("Connection: keep-alive");
client.println();
client.print("<?xml version = \"1.0\" ?>");
client.println(' <languages>');
client.println(' <lang name="C">');
client.println(' <appeared>1972</appeared>');
client.println(' <creator>Dennis Ritchie</creator>');
client.println(' </lang>');
client.println(' <lang name="PHP">');
client.println(' <appeared>1995</appeared>');
client.println(' <creator>Rasmus Lerdorf</creator>');
client.println(' </lang>');
client.println(' <lang name="Java">');
client.println(' <appeared>1995</appeared>');
client.println(' <creator>James Gosling</creator>');
client.println(' </lang>');
client.println(' </languages>');
}
else{ //se non sono richiesto i dati XML invia la pagina come risposta
// send web page
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
server.println();
client.println("<!DOCTYPE html>");
client.println("<html>");
client.println("<head>");
client.println("<title>Brovello</title>");
client.println("</head>");
client.println("<body>");
client.println("<form method=get name=LED><input type=submit name=Riscaldamento value=termostato></form>");
client.println("<div id=a>");
if(digitalRead(Pin_termostato)==1 ) {
client.print("ON");
}
else
{
client.print("OFF");
}
client.println("</div>");
client.println("
");
client.println("</body>");
client.println("</html>");
}
HTTP_req = ""; // finished with request, empty string
break;
}
// every line of text received from the client ends with \r\n
} // end if (client.available())
} // end while (client.connected())
delay(1); // give the web browser time to receive the data
client.stop(); // close the connection
} // end if (client)
}//fine loop
La pagina php che richiede le informazione è questa:
<?php
$url="http://inven.........ddns.com:806/?datiXML=on";
$xmlinfo = simplexml_load_file($url);
print_r($xmlinfo);
?>
La pagina PHP funziona perché la ho provata su altri siti ed è ok, però quando la provo su arduino ottengo:
Warning: simplexml_load_file(http://inv.....ddns.com:806/?datiXML=on): failed to open stream: Connection timed out in /web/htdocs/www.inv....../prova_1.php on line 60
Warning: simplexml_load_file(): I/O warning : failed to load external entity "http://inv.....ddns.com:806/?datiXML=on" in /web/htdocs/www.inv.../prova_1.php on line 60
Sapete dirmi il perché ?
Grazie mille.