Ethernet sur réseau non-local ?

Salut à tous, je requiert votre aide suite à la réalisation d'un programme avec l'arduino UNO et l'ethernet shield officiel. J'ai développé un programme permettant la lecture et la mise à l'état HAUT ou BAS des Pin Digital et Analogs grâce à une page HTML. L'ensemble (page HTML) est hébérgé sur l'arduino ethernet shield mais je me rends compte que je ne peut utiliser l'ip du shield que sur un réseau local (celui de la maison).Ainsi, je vous demande s'il m'est possible de controler l'arduino ethernet shield en dehors du réseaux local.Si oui, comment ??

PS: Gratuitement (et légalement de préférence) bien sûr !! :%

Fabinou30:
Salut à tous, je requiert votre aide suite à la réalisation d’un programme avec l’arduino UNO et l’ethernet shield officiel.
J’ai développé un programme permettant la lecture et la mise à l’état HAUT ou BAS des Pin Digital et Analogs grâce à une page HTML.
L’ensemble (page HTML) est hébérgé sur l’arduino ethernet shield mais je me rends compte que je ne peut utiliser l’ip du shield que sur un réseau local (celui de la maison).Ainsi, je vous demande s’il m’est possible de controler l’arduino ethernet shield en dehors du réseaux local.Si oui, comment ??

PS: Gratuitement (et légalement de préférence) bien sûr !! :%

bonjour
je vais présupposer que tu a une box internet ? (free,orange ou autre FAI ? )
perso j’ai fait sur ma livebox (orange) une redirection de port vers l’IP locale du shield ethernet , ça fonctionne sans problemes
ATTENTION neanmoins à une chose , il te faut connaitre ton adresse IP externe si ton FAI ne t’attribue pas une IP fixe

et pour avoir une adresse fixe au lieu de l'ip tu peux utiliser noip ou dydns ca marche impeccable chez moi pour un accès a mon nas donc pourquoi pas a un arduino

anthology: et pour avoir une adresse fixe au lieu de l'ip tu peux utiliser noip ou dydns ca marche impeccable chez moi pour un accès a mon nas donc pourquoi pas a un arduino

oui, mais avec noip, dydns ou autre "services approchants" tu mets un tiers dans la boucle 8)

Pour accéder à ton LAN depuis "n'importe ou dans le monde", c'est "beaucoup de tiers" qu'il faut mettre dans la boucle. Dans le cas, ou son IP n'est pas fixe, il n'est plus à un tiers près.

Pac2Kro: Pour accéder à ton LAN depuis "n'importe ou dans le monde", c'est "beaucoup de tiers" qu'il faut mettre dans la boucle. Dans le cas, ou son IP n'est pas fixe, il n'est plus à un tiers près.

je parle du tiers qui attribue une adresse IP exploitable vue de l'exterieur si ton FAI est dans les choux , il est dans les choux :grin: les services tiers dynamiques là sont des tiers dont la fiabilité/pérennité/intégrité ne sont pas garanties/certifiées, ça n’empêche pas que l'utilisation soit pratique, il faut juste avoir à l'esprit celà 8)

Le tiers en question n'attribue pas une adresse IP mais un nom de domaine. Le service qu'il gère est la diffusion aux serveurs DNS du couple "nom de domaine-adresseIP tournante de ta connexion". J'ai rarement vu des problèmes sur ces services.

ok merci de votre aide rapide donc pour résumer : - j'ouvre le port que je déclare dans la programme sur ma box - je vais sur dydns et je créé une adresse ip fixe (la même que celle que je déclare dans mon programme ??)

PS: pour la manip avec dydns c'est gratuit ?

donc voici le code pour m’aider :
(celui là c’est un de recup qui fonctionne en local)

//simple button GET server code to control servo and arduino pin 5
//for use with IDE 1.0
//open serial monitor to see what the arduino receives
//use the \ slash to escape the " in the html
//for use with W5100 based ethernet shields
//Powering a servo from the arduino usually DOES NOT WORK.
//note that the below bug fix may be required
// http://code.google.com/p/arduino/issues/detail?id=605
 
#include <SPI.h>
#include <Ethernet.h>
 
#include <Servo.h>
Servo myservo;  // create servo object to control a servo
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 1, 177 }; // ip in lan
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port
 
String readString;
 
//////////////////////
 
void setup(){
 
  pinMode(6, OUTPUT); //pin selected to control
  //start Ethernet
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  //the pin for the servo co
  //enable serial data print
  Serial.begin(9600);
  Serial.println("server LED test 1.0"); // so I can keep track of what is loaded
}
 
void loop(){
  // Create a client connection
  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("</BODY>");
          client.println("</HTML>");
 
          delay(1);
          //stopping client
          client.stop();
 
          ///////////////////// control arduino pin
          if(readString.indexOf("?lighton") >0)//checks for on
          {
            digitalWrite(6, HIGH);    // set pin 4 high
            Serial.println("Led On");
          }
          else{
          if(readString.indexOf("?lightoff") >0)//checks for off
          {
            digitalWrite(6, LOW);    // set pin 4 low
            Serial.println("Led Off");
          }
          }
          //clearing string for next read
          readString="";
 
        }
      }
    }
  }
}

Et là, c’est le blanc…
En faite, je souhaite acceder à cette page (généré parfaitement sur mon réseaux local de livebox) mais au niveau mondial (au moins international).
J’imagine qu’il me faut une adresse IP qui n’existe pas et donc quelque chose pour la générer, j’imagine aussi qu’il faut ouvrir des ports sur la livebox et/ou modifier ceux du programme arduino.Mais comment faire ? quels ports ouvrir ? comment avoir une adresse IP statique non existante qui redirige vers l’arduino ? C’est pour ces questions que je demande votre aide.En plus (pour être un peu plus… chiant :roll_eyes:) j’aimerai le faire gratuitement.

Merci de votre aide future

Tu n'as rien à modifier dans ton sketch. Tout se passe au niveau de ta box. Tu dois diriger les requêtes entrantes vers l'ip de ton arduino. Seulement, j'espère que tu as prévu un contrôle d'accès du type "login/MDP", sinon tout le monde pourra se connecter sur ton arduino.

j'ai pas prévu de système de login mais tu pourrais être plus précis sur les manips que j'ai à faire voir me guider s'il te plait ? Car je n'ai jamais fait cela et je n'ai vraiment aucune idée de ce que je dois faire.

Merci ;)

Pour des redirections de port, nous allons être ici un peu hors sujet. Par contre, tu trouveras une foultitude de tutos sur google.

Pour comprendre le NAT : http://fr.wikipedia.org/wiki/Network_address_translation

Si ton FAI ne te fourni pas une IP fixe, regardes du coté de "dyndns" ou ses homologues.

Pour comprendre le DNS : http://fr.wikipedia.org/wiki/Domain_Name_System

De la même manière, il faudra que tu configures ta box (qui a un client dyndns) pour qu'elle fournisse la nouvelle IP à chaque changement de ton FAI, dyndns se chargera de faire la correspondance entre le nom de domaine que tu auras choisie et la nouvelle ip.

Depuis l'extérieur, tu n'auras juste qu'à taper dans ton navigateur : http://monadressedyndns

Si tu as une freebox, il y a un service à activer pour avoir gratuitement une ip fixe, sans tiers!

Fabinou30: En faite, je souhaite acceder à cette page (généré parfaitement sur mon réseaux local de livebox) mais au niveau mondial (au moins international).

C'est une livebox.

Fabinou30: j'ai pas prévu de système de login mais tu pourrais être plus précis sur les manips que j'ai à faire voir me guider s'il te plait ? Car je n'ai jamais fait cela et je n'ai vraiment aucune idée de ce que je dois faire.

Merci ;)

de toutes façons dans un premier temps, IP fixe ou pas (externe), pour faire un test il faut que tu crée ta regle dans ta livebox

port entrée ----> adresse locale:port ça se trouve dans les options avancées de ta livebox (règles NAT/PAT)

oui mais je vois pas l'équipement "arduino" sur la page livebox donc je peux pas créer le port tant que je vois pas ça. Comment faire ?

Fabinou30: oui mais je vois pas l'équipement "arduino" sur la page livebox donc je peux pas créer le port tant que je vois pas ça. Comment faire ?

en principe tu mets ton arduino en ip fixe. tu connais la mac que tu lui as inscrit. tu créé un équipement sur l'admin de la lb, attribue une ip fixe, puis ouvre le(s) port(s) nécessaire(s). comme ca, tu auras toujours la même ip pour l'arduino.

j'ai réussi ça hier mais j'ai encore 1 question (même si j'ai toujours pas réussi à mettre en WAN) j'ai une adresse mac au dos de mon shield sur une etiquette mais pas de la même forme que celle du programme. Comment je la rentre dans le programme ?

Fabinou30: j'ai réussi ça hier mais j'ai encore 1 question (même si j'ai toujours pas réussi à mettre en WAN) j'ai une adresse mac au dos de mon shield sur une etiquette mais pas de la même forme que celle du programme. Comment je la rentre dans le programme ?

suffit simplement de remplacer la mac telqule dans le programme en remplacant les : par les virgules si je me trompe pas.

Fabinou30: j'ai réussi ça hier mais j'ai encore 1 question (même si j'ai toujours pas réussi à mettre en WAN) j'ai une adresse mac au dos de mon shield sur une etiquette mais pas de la même forme que celle du programme. Comment je la rentre dans le programme ?

bonjour l'adrersse mac se rentre sous cette forme ,

byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

mais tu peux affecter ce que tu veux, l'adresse MAC du sticker n'est qu'indicative (obligation reglementaire ? )