Buongiorno,
sto sperimentando un po il mio ethernet shield, ma ho un problemino, ho caricato uno sketch di esempio molto standard e molto semplice per l'accensione di 3 led, fin qui tutto ok. Quando lavoro in rete locale funziona egregiamente!
Ma se prendo l'ip della shield, faccio il port mapping sul ruoter, e la associo al mio dyndns succede una cosa particolare.
Prendo il cellulare vado su rete 3G (spengo il wireless) e digito: miodominio.dyndns.it:80 raggiungo subito arduino, ma quando do un comando vedo che nella barra degli indirizzi compare l'ip della scehda, 192.168.1.10/comando ed ovviamente non funziona!
Devo modificare qualche cosa?
Io ho come il sospetto che l'errore possa risiedere qua:
IPAddress serverIPAddress = Ethernet.localIP();
ho indovinato?
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDD, 0xAB, 0xCE, 0xFF, 0xEE, 0xED };
byte ip[] = { 192, 168, 1, 10};
EthernetServer server(80);
// Definisco i 3 LED
const int pinRosso = 2;
const int pinArancio = 3;
const int pinVerde = 4;
void setup()
{
Serial.begin(9600);
pinMode(pinRosso, OUTPUT);
pinMode(pinArancio, OUTPUT);
pinMode(pinVerde, OUTPUT);
Ethernet.begin(mac, ip);
server.begin();
digitalWrite(pinRosso, LOW);
digitalWrite(pinArancio, LOW);
digitalWrite(pinVerde, LOW);
Serial.println("Circuito pronto!");
}
void loop()
{
EthernetClient client = server.available();
// Se esiste...
if (client)
{
while (client.connected())
{
if (client.available())
{
if ( client.find("GET /") )
{
if(client.findUntil("?", "\n\r")){
char type = client.read();
if ( type == 'v' ) { toggle( pinVerde ); }
if ( type == 'a' ) { toggle( pinArancio ); }
if ( type == 'r' ) { toggle( pinRosso ); }
}
// Stampo la pagina HTML
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
// Leggo il valore dei LED
int verde = digitalRead(pinVerde);
int arancio = digitalRead(pinArancio);
int rosso = digitalRead(pinRosso);
// Stampo lo stato del pulsante Verde
client.print("LED Verde: ");
client.print(verde);
client.print("
");
// Stampo lo stato del pulsante Arancio
client.print("LED Arancio: ");
client.print(arancio);
client.print("
");
// Stampo lo stato del pulsante Rosso
client.print("LED Rosso: ");
client.print(rosso);
client.print("
");
// Indirizzo IP del server
IPAddress serverIPAddress = Ethernet.localIP();
// Verde
client.print("
");
client.print("<a href='http://");
client.print(serverIPAddress);
client.print("?v'>");
client.print("Accendi Verde");
client.print("</a>");
// Arancio
client.print("
");
client.print("<a href='http://");
client.print(serverIPAddress);
client.print("?a'>");
client.print("Accendi Arancio");
client.print("</a>");
// Rosso
client.print("
");
client.print("<a href='http://");
client.print(serverIPAddress);
client.print("?r'>");
client.print("Accendi Rosso");
client.print("</a>");
break;
}
}
}
delay(1);
client.stop();
}
}
void toggle(int pin)
{
int stato = digitalRead(pin);
if ( stato == LOW ) { digitalWrite(pin, HIGH); }
else if ( stato == HIGH ) { digitalWrite(pin, LOW); }
}