Comandare Arduino via HTTP

Ciao a Tutti.

ho fatto ricerche sull'argomento, ma tutti i dati che ho recuperato sono confusi, la maggior parte in inglese, ma soprattutto nessuno parla esattamente di quello che mi serve.

Ho una scheda Arduino con Ethernet Shield, evrei semplicemente bisogno di mandare dei messaggi alla scheda Arduino (una lettera, una lettera, 2 numeri, 2 numeri, un insieme di caratteri).

Ho provato con un semplice codice che parserizza tutta la URL, ma senza risultati, se serve posto il codice.
Volevo sapere se qualcuno ha affrontato questo problema e mi sa dare qualche indicazione.

Grazie

posta il codice. Ma in generale se vuoi "parlare" con arduino, l'HTTP ti limita molto, molto meglio usare direttamente il socket come se fosse una porta seriale! certo, dovrai farti il programmino ad-hoc lato PC, ma puoi embeddarlo in una pagina HTML servita dal server...

In che modo usare il socket come se fosse seriale?
Devo comunicare con Arduino, possibilmente ma non necessariamente in modo bidirezionale. Il mezzo però deve essere l’Ethernet, perchè sono connessioni a lunga distanza e a più dispositivi.

Mi sta benissimo che devo farmi il codice ad-Hoc, pensavo proprio a Visual Basic come programmazione lato PC, anche perchè la risposta deve essere pressocchè immediata.

Di seguito il codice.
Preso da internet, per un semplice esempio di funzionamento.
Ma quando nella request metto stringhe lunge più di 10 caratteri, (esempio “?A#F#10#5#ciao-a-tutti”)
il programma non funziona, nel senso che non entra proprio nel ciclo.

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

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 
byte ip[] = { 192, 168, 1, 3 }; // indirizzo IP della shield
byte gateway[] = { 192, 168, 1, 1 }; // indirizzo ip del router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); 

int ledPin = 9; // LED pin
String readString; 
boolean LEDON = false; 

void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}

void loop(){
EthernetClient client = server.available();
if (client) {
 boolean currentLineIsBlank = true;
 while (client.connected()) {
 if (client.available()) {
 char c = client.read();
 readString.concat(c); 
 
 if (c == '\n' && currentLineIsBlank) {
 
 Serial.print(readString);
 
 if(readString.indexOf("Led=1") > 0) {
 
 digitalWrite(ledPin, HIGH); 
 LEDON = true;
 }else{
 
 digitalWrite(ledPin, LOW); 
 LEDON = false;
 }
 
 client.println("HTTP/1.1 200 OK");
 client.println("Content-Type: text/html");
 client.println();
 client.print("<html><head><title>Megalab.it by MGTeck & Gabry 1609</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");
 if (LEDON) {
 client.println("<img src=http://img849.imageshack.us/img849/1513/accesao.jpg />");
 }
 else
 {
 client.println("<img src=http://img10.imageshack.us/img10/4719/spenta.jpg />");
 }
 client.print("<h2><a href='/?Led=1'>ACCENDI</a> | <a href='/?Led=0'>SPEGNI</a></h2>");
 client.println("</body></html>");
 readString="";
 client.stop();

 } 
 } 
 } 
} 
}

guarda, non ti scrtivo il codice funzionale però

richiedi uno dei client che sono collegati:

EthernetClient client = server.available();

se esiste un client collegato

if (client) {

puoi scrivergli:

client.print("ciao");

e leggere cosa ti scrive:

client.read();

per collegati, fai start -> esegui (o cerca in > win7) -> cmd
(se hai linux o mac apri il terminale (sì, hai un terminale già installato su mac, ed è unix))
(in alcune versioni di windows è da attivare il servizio telnet... google è tuo amico)

a questo punto hai la fida riga di comando, il bello che quello che scrivo ora vale per linux, mac, windows e anche android (installa l'app emulatore terminale)

telnet ipArduino portaArduino

quindi con le tue impostazioni

telnet 192.168.1.3 80

A questo punto avrai una connessione "grezza" col tuo arduino! tutto ciò che scrivi verrà inviato via socket TCP ad arduino, e viceversa! esattamente come ilserial monitor!

ps. se usi visual basic non ti parlo più :grin:
lato consiglio java, C#, forse phyton. Assolutamente eviterei linguaggicon tipizzazione debole come JS o VB (che addirittura aiutodichiara le variabili... se fa un errore di battitura NON TE NE ACCORGERAI MAIIIIIIIIII