probleme Ethernet Shield et Freebox

Bonjour,

cela fait pas mal d’heures que j’essaye de resoudre mon probleme.
J’ai commencé à travailler sur l’ethernet shield. Mon programme fonctionne parfaitement en LAN mais je n’arrive absolument pas a me connecter depuis l’exterieur du reseau.

Je n’y connais pas grand chose en redirections de ports, DMZ etc etc… et je me dis que le probleme doit se situer là.
Dès que j’essaye de me connecter depuis l’exterieur j’arrive sur le Freebox Server au lieu de tomber sur ma page qui me permet de controller l’arduino.

Pour le moment je teste un code qui me créé une page web. 3 boutons qui : allume, eteint ou fait clignoter une LED.

Sur l’administration du reseau freebox , j’ai activé le mode routeur.
ETAT DU ROUTEUR : Actif
REDIRECTIONS :
Port externe : 80 – Protocole TCP – Ip de destination 192.168.0.1 – port interne 80

Et voici mon code :

#include <SPI.h>
#include <Ethernet.h>
 
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xB0, 0x52 }; //physical mac address
byte ip[] = { 192, 168, 0, 177 }; // ip de l'arduino 
byte gateway[] = { XX,XXX,XX,XXX }; // adresse publique de la Freebox que je recupere sur la base admin
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port
 
String readString;
int statePin = 0; 
 
//////////////////////
 
void setup(){
 
  pinMode(6, OUTPUT); // Pin de la Led
  //start Ethernet
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
 
  Serial.begin(9600);
  Serial.println("server LED test 1.0"); // verification que c'ets loadé. 
}
 
void loop(){
  // creation connexion
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
 
        //read char by char HTTP request
        if (readString.length() < 100) {
 
          //store characters to string
          readString += c;
          Serial.print(c);
        }
 
        //if HTTP request has ended
        if (c == '\n') {
 
          ///////////////
          Serial.println(readString); //print to serial monitor for debuging
 
          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("<meta name='apple-mobile-web-app-capable' content='yes' />");
          client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
          client.println("<link rel='stylesheet' type='text/css' href='http://homeautocss.net84.net/a.css' />");
          client.println("<TITLE>Home Automation</TITLE>");
          client.println("</HEAD>");
          client.println("<BODY>");
          client.println("<H1>Home Automation</H1>");
          client.println("<hr />");
          client.println("
");
         
          client.println("<a href=\"/?lighton\"\">Turn On Light</a>");
          client.println("<a href=\"/?lightoff\"\">Turn Off Light</a>
");     
       client.println("
");   
          client.println("<a href=\"/?lightblink\"\">Blink Led</a>
");   
 
          client.println("</BODY>");
          client.println("</HTML>");
 
          delay(1);
          //stopping client
          client.stop();
 
          ///////////////////// control arduino pin
          if(readString.indexOf("?lighton") >0)//checks for on
          {
          
            Serial.println("Led On");
            statePin = 0; 
          }

          if(readString.indexOf("?lightoff") >0)//checks for off
          {
            Serial.println("Led Off");
            statePin = 1; 
          }
          
          if(readString.indexOf("?lightblink") >0)//checks for off
          {
            Serial.println("Led blink");
            statePin = 2; 
          }
          
          
          //clearing string for next read
          readString="";
 
        }
        
        
      }
      
       
    }
     
    
  }
  
    if (statePin == 0)
       { Serial.println ("STATE PIN IS ON");
       digitalWrite (6, HIGH); 
       } 
    if (statePin == 1) 
       { 
         Serial.println ("STATE PIN IS OFF");
         digitalWrite (6, LOW); 
       }
    if (statePin == 2) 
       { 
         Serial.println ("STATE PIN IS BLINKING");
         digitalWrite (6, HIGH);
         delay(300); 
         digitalWrite (6, LOW); 
         delay(300); 
         
       }     
  
}

Pourriez vous me dire ce qui ne va pas. j’ai essayé pas mal de choses mais rien n’y fait… =(

Merci d’avance

M

Bonjour

meshellmesh:
byte ip = { 192, 168, 0, 177 }; // ip de l’arduino

Ton Arduino est en 192.168.0.177
Donc si ca marche en local en ouvrant dans ton navigateur http://192.168.0.177, c’est donc vers 192.168.0.177 que tu dois la faire la redirection :
Voir la copie d’écran ci-dessous
screenshot.21.png

Et bien sur tu dois alors de l’'extérieur ouvrir l’adresse IP externe de ta freebox ! qui est donné dans ton interface de configuration Freebox dans Ma Freebox → Afficher mon adresse IP

PS : Tu aurais du poster dans la section française. Ici tu es dans la section internationale où on parle anglais ! J’ai demandé au modo de déplacer le post.
Merci à Coding Badly de l’avoir fait.