Buonasera a tutti,
stavo curiosando nel web e trovo un esempio che dovrebbe fare esattamente quello che mi serve.
Ovvero da una pagina web inviare ad arduino con il metodo get delle variabili.
Purtroppo non funziona...sapete aiutarmi?
//Arduino 1.0.3
//Ethernet Shield
#include <SPI.h>
#include <Ethernet.h>
//mac address ethernet shield
byte mac[]={0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 1, 177);
char Data_RX;
String msg = "";
int cmd = 0;
String a,b,c;
EthernetServer server(80);
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
//pinMode(8, OUTPUT); //collegare un led per testare il comando da web
}
void loop()
{
msg = "";
EthernetClient pc_client = server.available();
//controllo se pc_client è true
if (pc_client != false)
{
//controllo continuamente che il client sia connesso
while (pc_client.connected())
{
//Controllo se ci sono byte disponibili per la lettura
if (pc_client.available())
{
//leggo i byte disponibili provenienti dal client
Data_RX = pc_client.read();
//ricostruisco la stringa ricevuta concatenando i singoli byte
msg += Data_RX;
//Se Data_RX = '\n' ho ricevuto tutti i caratteri
if (Data_RX == '\n')
{
/*Adesso devo estrarre i valori dalla stringa ricevuta:
ho usato il comando 'substring' percui bisogna sapere la posizione del carattere da leggere.
Usando, ad es., i comandi 'startsWith' o 'endsWith' si può migliorare questa parte
*/
cmd = msg.indexOf("PIN8"); //controllo se è stato inviato in comando PIN8x
if (cmd > 0) //se si i valori da leggere sono spostati
{
a = msg.substring(13,14); //estraggo il valore 0~9 spedito
b = msg.substring(17,18);
c = msg.substring(21,22);
}
else{
a = msg.substring(8,9);
b = msg.substring(12,13);
c = msg.substring(16,17);
}
cmd = msg.indexOf("=&"); //controllo che non ci siano campi vuoti
if (cmd > 0)
{
pc_client.print("<p>Attenzione: spedito valore nullo!</p>");
a=b=c="0";
}
//codice HTML
pc_client.print("<head>");
pc_client.print("<META HTTP-EQUIV='refresh' CONTENT='25; /'>");//refresh automatico: 25s
pc_client.print("</head>");
pc_client.println("<html><head></head><body>");
pc_client.println("<h1>Test Arduino</h1>");
pc_client.println("Stringa ricevuta da Arduino: ");
pc_client.println(msg);
pc_client.println("
Valori letti da Arduino
A: ");
pc_client.println(a);
pc_client.println("
B: ");
pc_client.println(b);
pc_client.println("
C: ");
pc_client.println(c);
pc_client.println("
");
//form per inviare valori ad Arduino
pc_client.println("
Inserire nuovi valori (0~9)");
pc_client.print("<form method=get>A:<input type=text size=3 name=a value=");
pc_client.print(">
B:<input type=text size=3 name=b value=");
pc_client.print(">
C:<input type=text size=3 name=c value=");
pc_client.println(">
<input name=H type=submit value=INVIA></form>");
pc_client.println("</body></html>");
pc_client.println("
Comando pin 8 di Arduino
");
//Comandi predefiniti da spedire ad Arduino
pc_client.println("<button onclick= location.href='http://192.168.1.177/PIN8H'> Pin 8 ON </button>");
pc_client.println("<button onclick= location.href='http://192.168.1.177/PIN8L'> Pin 8 OFF </button>");
//controllo se arriva il comando
cmd=0;
cmd = msg.indexOf("PIN8H");
if (cmd > 0)
{
digitalWrite(8, HIGH);
Serial.println("pin 8 on");
pc_client.print("<p>PIN 8 ON</p>");
}
cmd=0;
cmd = msg.indexOf("PIN8L");
if (cmd > 0)
{
digitalWrite(8, LOW);
pc_client.print("<p>PIN 8 OFF</p>");
}
//scrivo sulla seriale
Serial.println("A: ");
Serial.print(a);
Serial.println("B: ");
Serial.print(b);
Serial.println("C: ");
Serial.print (c);
Serial.println("Stringa completa: ");
Serial.println(msg);
break;
pc_client.print("</body></html>");
//aspetto 1 ms affinche la risposta giunga al browser del client
delay(1);
//esco dal ciclo while una volta completato l'invio della risposta
break;
}
}
}
//chiudo la connessione
pc_client.stop();
}
}