Pages: [1]   Go Down
Author Topic: Funzionamento parziale sotto dyndns  (Read 194 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?

Code:
#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("<br />");

          // Stampo lo stato del pulsante Arancio
          client.print("LED Arancio: ");
          client.print(arancio);
          client.print("<br />");

          // Stampo lo stato del pulsante Rosso
          client.print("LED Rosso: ");
          client.print(rosso);
          client.print("<br />");

          // Indirizzo IP del server
          IPAddress serverIPAddress = Ethernet.localIP();
           
          // Verde
          client.print("<br />");
          client.print("<a href='http://");
          client.print(serverIPAddress);
          client.print("?v'>");
          client.print("Accendi Verde");
          client.print("</a>");

          // Arancio
          client.print("<br />");
          client.print("<a href='http://");
          client.print(serverIPAddress);
          client.print("?a'>");
          client.print("Accendi Arancio");
          client.print("</a>");

          // Rosso
          client.print("<br />");
          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); }
}
Logged

Pordenone (IT)
Offline Offline
Jr. Member
**
Karma: 3
Posts: 51
dagli anni 70 appassionato di elettricita per approdare all'elettronica analogica.Negli anni 80 passato all'informatica ed elettronica digitale.Faccio a pugni con il c ma prima o poi lo metto al tappeto....
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho provato e in effetti non funziona...
secondo me devi formattare bene la pagina html che crei.
Logged

www.infoportal.it support at infoportal.it

Battipaglia (SA)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,

in effetti il problema è "quasi" quello.

Il tuo codice Arduino restituisce una pagina HTML con URL assoluti del tipo "http://192.168.1.10?v". In questo caso un browser qualsiasi tenterà di collegarsi esattamente all'URL indicato.

Se invece usi un URL relativo del tipo "?v" il browser costruirà l'URL a cui collegarsi a partire da quello attuale. In pratica la pagina è stata presa da "http://miodominio.dyndns.it:80" lui quindi costruirà un URL del tipo "http://miodominio.dyndns.it:80?v" continuando quindi a collegarsi all'IP pubblico e non a quello privato. Nello specifico devi inviare un HTML del tipo <a href='?v'>Accendi il verde</a>.

Aggiungo pure che un URL sarebbe http://host:porta/risorsa?parametro1=valore1&parametro2=valore2&...&parametron=valoren

Nel tuo caso sembra mancare il nome risorsa (per esempio index.htm).

Tuttavia credo che per i tuoi scopi possa andare bene perchè il browser crea il comando GET dell'HTTP con tutto ciò che trova dopo il singolo "/" (non dopo i doppi "//"). Se proprio vuoi essere più standard aggiungi un nome risorsa anche fittizio che semplicementi scarti cercando il "?" e non il "/". Potrebbe però esserti utile se in futuro volessi gestire pagine diverse per attività diverse.

Ciao.
Vittorio.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie mille Funziona al 100%
Ho fatto la modifica qua: <a href='?v'>Accendi il verde</a> come indicato, ed ora il problema non sussiste più! Beh devo ancora imparare un pò di cose ma almeno ora per quel che mi serviva funziona alla grande!!! smiley grazi
Logged

Pages: [1]   Go Up
Jump to: