Partage
  • Partager sur Facebook
  • Partager sur Twitter

Connexion Ethernet Shield Arduino depuis ailleurs

Anonyme
    29 janvier 2015 à 11:29:58

    Bonjour à tous,

    Ce n'est pas la première fois que je viens ici pour trouver des solutions, mais la première fois que je post sur ce site.

    voici ma question :

    Je possède une Arduino avec Shield Ethernet et un capteur IR. Pour l'instant, lorsque le capteur détecte quelque chose, un message s'écrit sur une page via la carte Shield Ethernet, que l'on peu consulter seulement connecté à la même Box que la Shield.

    J'aimerais donc savoir si il est possible d'accéder à cette page depuis une autre connexion internet.

    J'ai vu un sujet sur ce forum qui répondait à cette question, mais j'avoue avoir eu du mal à comprendre.

    Merci

    PS : mes connaissances en informatique/internet sont assez limitées.

    • Partager sur Facebook
    • Partager sur Twitter
      29 janvier 2015 à 12:38:45

      Il te faut ouvrir un port de ta box pour le rediriger sur ton arduino.

      Cela se passe dans les menus de configuration de la Box et dépend donc de la Box que tu as.

      Tu devrais trouver ton bonheur ici : https://craym.eu/tutoriels/utilitaires/ouvrir_les_ports_de_sa_box.html

      Vu que le protocole HTTP des pages WEB utilise le port 80 en TCP, c'est lui que je te conseille d'ouvrir.

      Ensuite, tu pourras accéder à ton arduino depuis n'importe où en tapant l'adresse IP de ta box.

      Pour connaitre l'adresse IP de ta Box, c'est facile, tu peux allez la consulter ici : http://www.mon-ip.com/

      -
      Edité par lorrio 29 janvier 2015 à 12:40:37

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        29 janvier 2015 à 12:58:14

        merci pour votre réponse,

        j'ai fait ce que vous avez conseillé :

        -aller sur le site de ma freebox, et ouvrir le port 80 vers l'adresse IP utilisé dans mon programme Arduino.

        -puis j'ai rallumé ma Box.

        -mais en rentrant mon adresse IP (trouvé sur le site que vous avez posté), depuis une autre connexion, la page est inaccessible.

        Merci pour votre aide.

        • Partager sur Facebook
        • Partager sur Twitter
          29 janvier 2015 à 13:22:02

          Es tu sur d'avoir tout bien fait correctement ?

          Normalement, tu devrais avoir :

          Port externe : 80

          Protocole : TCP

          Port interne : 80

          IP interne : l'adresse IP de ta carte arduino (normalement en 192.168.x.x)

          Ensuite, il te faut connaitre l'adresse IP de ta Freebox.

          Pour cela, tu dois allez faire un tour sur http://www.mon-ip.com/ depuis un PC connecté à la Freebox et non depuis ton téléphone portable ou un autre PC sur internet !

          Attention lors d'un redémarrage de Box : si celle-ci Box est en IP dynamique, son IP changera à chaque redémarrage (donc tu devras refaire un tours sur mon-ip.com pour connaitre sa nouvelle IP).

          Une fois que tu connais l'adresse IP de ta box et que le port 80 a bien été redirigé, tu dois pouvoir te connecter à l'aduino depuis Internet en tapant l'adresse IP de la box.

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            29 janvier 2015 à 16:23:33

            Je ne comprends vraiment pas, j'ai réalisé exactement ce que vous me demandez :

            -j'ai mis port interne et externe sur 80, en protocole TCP, et j'ai mis comme adresse celle de l'Arduino : 192.168.0.10

            -je regarde après ça mon IP grâce à l'ordinateur connecté à ma box, après l'avoir rallumé, au cas où elle changerais.

            -mais en tapant l'adresse IP, la page est toujours inaccessible.

            EDIT : en réalité je viens de vérifier, sur le site de Free, j'ouvre le port puis il me disent de redémarrer la Freebox. c'est ce que je fais, mais en réalité je viens de voir que le port ne s'ouvre pas, je ne sais pas pourquoi

            -
            Edité par Anonyme 29 janvier 2015 à 16:46:43

            • Partager sur Facebook
            • Partager sur Twitter
              29 janvier 2015 à 18:03:56

              Le port 80 est peut être utilisé comme une interface d’administration.

              Du coup, je te propose de mettre autre chose :

              - Port externe : une valeur entre 1024 et 65535 (8080 par exemple, c'est facile à retenir)

              - Port interne : laisser 80

              Pour accédé à ton arduino de l’extérieur,  l’adresse sera : http://IpDeTaBox:PortExterne/

              Par exemple, cela pourrait être : http://45.62.14.57:8080/


              -
              Edité par lorrio 29 janvier 2015 à 18:04:35

              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                29 janvier 2015 à 18:38:03

                Je suis désolé,

                la page web reste toujours inaccessible, malgré tout les paramètres changés comme vous me l'avez conseillé.

                Merci quand même pour votre aide

                • Partager sur Facebook
                • Partager sur Twitter
                  29 janvier 2015 à 18:49:46

                  Alors là, je ne sais plus quoi te dire...

                  L'arduino est il toujours accessible en local ?

                  Quel code as tu mis dessus ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    29 janvier 2015 à 19:06:02

                    Oui, l'Arduino est toujours accessible en local.

                    voici le programme qui se trouve dans mon Arduino :

                    #include <SPI.h>
                    #include <Ethernet.h>
                    
                    // Enter a MAC address and IP address for your controller below.
                    // The IP address will be dependent on your local network:
                    byte mac[] = {
                      0x90, 0xA2, 0xDA, 0x0F, 0x14, 0x8F };
                    IPAddress ip(192,168,0,10);  //  
                    
                    // Initialize the Ethernet server library
                    // with the IP address and port you want to use
                    // (port 80 is default for HTTP):
                    EthernetServer server(80);
                    int capteurMvt=0;
                    int spoted = 0;
                    int compteur = 0;
                    
                    
                    void setup() {
                     // Open serial communications and wait for port to open:
                      Serial.begin(9600);
                       while (!Serial) {
                        ; // wait for serial port to connect. Needed for Leonardo only
                      }
                    
                    
                      // start the Ethernet connection and the server:
                      Ethernet.begin(mac, ip);
                      server.begin();
                      Serial.print("server is at ");
                      Serial.println(Ethernet.localIP());
                    }
                    
                    
                    void loop() {
                      // listen for incoming clients
                      EthernetClient client = server.available();
                      if (client) {
                        Serial.println("new client");
                        // an http request ends with a blank line
                        boolean currentLineIsBlank = true;
                        while (client.connected()) {
                          if (client.available()) {
                            char c = client.read();
                            Serial.write(c);
                            // if you've gotten to the end of the line (received a newline
                            // character) and the line is blank, the http request has ended,
                            // so you can send a reply
                            if (c == '\n' && currentLineIsBlank) {
                              // send a standard http response header
                              client.println("HTTP/1.1 200 OK");
                              client.println("Content-Type: text/html");
                              client.println("Connnection: close");
                              client.println();
                              client.println("<!DOCTYPE HTML>");
                              client.println("<html>");
                                        // add a meta refresh tag, so the browser pulls again every 2 seconds:
                              client.println("<meta http-equiv=\"refresh\" content=\"0.4\">");
                              // output the value of each analog input pin
                                int capteurMvt = analogRead(capteurMvt);
                                if (capteurMvt>500) {
                                spoted = 1; //lettre qui est passée
                                }
                                
                                if (compteur >80){  // compteur : temps pendant lequel le message reste
                                  compteur = 0;
                                  spoted = 0;
                                  }
                                
                                if (spoted == 1){
                                  compteur ++;
                                  client.print("COURRIER");
                    
                                
                                client.println("<br />");      
                              }
                              client.println("</html>");
                              break;
                            }
                            if (c == '\n') {
                              // you're starting a new line
                              currentLineIsBlank = true;
                            }
                            else if (c != '\r') {
                              // you've gotten a character on the current line
                              currentLineIsBlank = false;
                            }
                          }
                        }
                        // give the web browser time to receive the data
                        delay(1);
                        // close the connection:
                        client.stop();
                        Serial.println("client disonnected");
                      }
                    }
                    


                    en faite, je me demandais,  le problème peut-il être du à des conflits d'adresse IP à l'intérieur de mon réseau local ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                      29 janvier 2015 à 19:25:16

                      Alors là, je ne peux rien de te dire de plus.

                      Si tu as bien paramétré le tout avec :

                      - Type : TCP

                      - Port Interne : 80

                      - Port Externe : yyy (une valeur entre 1024 et 65535)

                      - IP interne : l'adresse de ton arduino (celle qui s'affiche dans Serial.println(Ethernet.localIP());)

                      Et que tu te connectes sur http://xxx.xxx.xxx.xxx:yyy/ avec (xxx.xxx.xxx.xxx l'adresse IP  de ta box).

                      Alors ça devrait marché.

                      Peut -être une faute de frappe ? du genre un chiffre mal tapé ou un point à la place d'un deux points (oui, c'est bien un double point qui sépare l'IP et le port dans http://xxx.xxx.xxx.xxx:yyy/).


                      Histoire de tenter une dernière chose, tu peux changer la ligne 91 delay(1) en delay(500) au cas où ce 1ms ne soit pas suffisant.

                      -
                      Edité par lorrio 29 janvier 2015 à 19:26:57

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        29 janvier 2015 à 19:49:15

                        si je peux me permettre une précision, quand vous dites :

                        "IP interne : l'adresse de ton arduino (celle qui s'affiche dans Serial.println(Ethernet.localIP());)"

                        vous voulez parler de celle-ci :

                        "IPAddress ip(192,168,0,10)"

                        ou est-ce une autre adresse IP ?

                        -
                        Edité par Anonyme 29 janvier 2015 à 19:50:05

                        • Partager sur Facebook
                        • Partager sur Twitter
                          29 janvier 2015 à 19:55:53

                          Bah, vu que tu initialises ton EthernetServer avec cette adresse IP, c'est celle-ci qui devrait s'afficher avec le println.

                          Du coup, c'est bien celle-ci ;)

                          C'est d'ailleurs cette adresse IP que tu utilises pour te connecter en local à ton arduino non ?

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            29 janvier 2015 à 19:58:49

                            oui effectivement, c'est cette adresse avec laquelle je me connecte en local.

                            j'essayerai les derniers changements que vous m'avez indiqué, et je vous donnerais les résultats.

                            Merci pour votre aide et vos conseils, bien que le problème semble être quelque peu compliqué

                            • Partager sur Facebook
                            • Partager sur Twitter
                              8 mai 2016 à 21:00:27

                              bonjour

                              je vois que vous gérez bien l'arduino

                              j'aimerai avoir de l'aide a propos de la connexion a un relais en passant par un réseau mais je comprend pas comment créer

                               les lignes de code

                              je voudrai activer ou désactivé un voir plusieurs relais par internet ( a distance via un autre réseau internet )

                              pourriez vous m'aider sur ce projet ?

                              merci a vous

                              Nico

                              • Partager sur Facebook
                              • Partager sur Twitter
                                8 mai 2016 à 22:49:37

                                Tu ferais mieux d'ouvrir un nouveau sujet pour traiter ce problème.

                                Tu peux assu cherche sur google : arduino WEB controlled LED afin de trouver pleins d'exemple de mini serveur WEB permettant de contrôler une LED.

                                Il ne te restera alors plus qu'à remplacer la LED par ton shield relais et le tours sera joué ;)

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  9 mai 2016 à 12:03:27

                                  Hello

                                  Quelques idées en vrac pour le problème de réseau :

                                  - Est ce que la box et l'arduino sont sur le même sous réseau ? Genre une box en 192.168.1.1 et Arduino en 192.168.0.10 avec IPAddress subnet(255, 255, 255, 0) risque de ne pas fonctionner. Dans ce cas mettre l'arduino en 192.168.1.10.

                                  - Est-ce que tu teste l'adresse externe depuis ta connexion ou bien depuis une autre connexion extérieure ? Certaines box n'aiment pas ce genre de manip et ne redirigent pas si la connexion provient de l'intérieur, je crois que le terme c'est loopback qui peut être une option a activer sur la box si elle le propose.

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Connexion Ethernet Shield Arduino depuis ailleurs

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown