ok .... dunque mettere le mani nel tuo prog è un po' complicato, bisognerebbe averlo completo e fare prove in loco ma da come è strutturato direi che è in ascolto e potresti anche non toccarlo
io ti scrivo qui un esempio di web server controllato anche da una pagina html da mettere sul tuo desktop per provare e vedi
questo è lo sketch di esempio che possiede una paginetta web dentro con un off e on che non userai
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 2, 177 }; // ip in lan
//byte gateway[] = { 192, 168, 2, 1 }; // internet accesso via router
//byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
Server server(80); //server porta
String readString;
void setup()
{
pinMode(40, OUTPUT);
Ethernet.begin(mac, ip);
server.begin();
Serial.begin(9600);
Serial.println("servertest1");
}
void loop()
{
Client client = server.available();
if (client)
{
while (client.connected())
{
if (client.available())
{
char c = client.read();
if (readString.length() < 100)
{
readString += c;
}
if (c == '\n')
{
Serial.println(readString); //debug
if(readString.indexOf('?') >=0)
{
client.println("HTTP/1.1 204 Prova.....");
client.println();
client.println();
}
else
{
client.println("HTTP/1.1 200 OK"); //send new page
client.println("Content-Type: text/html");
client.println();
client.println("<HTML>");
client.println("<HEAD>");
client.println("<TITLE>Arduino GET test page</TITLE>");
client.println("</HEAD>");
client.println("<BODY>");
client.println("<H1>ARDUINO Semplice ON-OFF</H1>");
client.println("<a href=\"/?on\" target=\"inlineframe\">ON</a>");
client.println("<a href=\"/?off\" target=\"inlineframe\">OFF</a>");
client.println("<IFRAME name=inlineframe style=\"display:none\" >");
client.println("</IFRAME>");
client.println("</BODY>");
client.println("</HTML>");
}
delay(1);
client.stop();
if(readString.indexOf("on") >0)//controlla se on
{
digitalWrite(40, HIGH);
Serial.println("Led On");
}
if(readString.indexOf("off") >0)//controlla se off
{
digitalWrite(40, LOW); // set pin 4 low
Serial.println("Led Off");
}
readString="";
}
}
}
}
}
questa la copi in un file di testo e la rinomini "cometipare.html" e la metti sul desktop del pc col touch
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<meta name="generator" content="PSPad editor, www.pspad.com">
<title></title>
</head>
<body>
<input type=button onClick="parent.location='http://192.168.2.177/?on'" value='ON'>
<input type=button onClick="parent.location='http://192.168.2.177/?off'" value='OFF'>
</body>
</html>
ho messo 2 tasti di esempio, come puoi notare richiamo l'ip con allegato l'istruzione
aggiungi altri tasti a piacere con indirizzo di un altro arduino
oppure crea un breve javascript sempre dentro a questa paginetta html che ti invia un treno di IP+istruzioni per centralizzare tutto
Per ottenere il tuo indirizzo completo di stringa di comando dei tuoi arduini fai cosiì
entra in un arduino caricando la pagina html del suo sketch
clicca col tasto destro sul pulsante che ti interessa avere l'indirizzo completo di istruzione
fai copia indirizzo e incollalo su un notepad lo userai nella tua html sul desktop
Provalo così e vedi se il comando arriva all'arduino di destinazione.
puoi otenere molti dati anche facendo col tasto destro sulla pagina del tuo arduino selezionando "visualizza sorgente pagina" anche li hai i collegamenti ipertestuali
copiando l'intera sorgente pagina e mettendola dentro un file sul desktop rinominandola sempre .html dovresti ottenere una copia di quella dentro ad arduino, che va poi modificata nell'esecuzione delle istruzioni.
questo è lo stesso identico sketch di prima, ma è "cieco" funziona ugualmente ma nessuna pagina web è visualizzata, (se invii http://192.168.2.177 si avrà una pagina bianca) arduino in questo caso prende ordini dal client con metodo get senza avere nessuna html incorporato nello sketch. Comunichi via lan, ma esclusivamente con una pagina caricata nel tuo pc e solamente se conosci le stringhe giuste da inviare potrai usarlo.
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 2, 177 }; // ip in lan
Server server(80); //server porta
String readString;
void setup()
{
pinMode(40, OUTPUT);
Ethernet.begin(mac, ip);
server.begin();
}
void loop()
{
Client client = server.available();
if (client)
{
while (client.connected())
{
if (client.available())
{
char c = client.read();
if (readString.length() < 100) readString += c;
if (c == '\n')
{
if(readString.indexOf('?') >=0)
{
client.println("HTTP/1.1 204 ");
}
else
{
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
}
delay(1);
client.stop();
if(readString.indexOf("on") >0)//controlla se on
{
digitalWrite(40, HIGH);
Serial.println("Led On");
}
if(readString.indexOf("off") >0)//controlla se off
{
digitalWrite(40, LOW); // set pin 4 low
Serial.println("Led Off");
}
readString="";
}
}
}
}
}
così semplificato dovresti capire meglio come arduino riceve i dati. Per quanto concerne il limite di dati in una stringa verso arduino (parlavi di 9000 caratteri) nessuno ti vieta di inviarli a blocchi, io invio file da 200 e + Kb ad arduino e non si è mai arrabbiato.
Per per l'invio di dati da arduino al client ti rimando alla prossima puntata
è molto tardi, per il momentro guardati questo.
ciao