Partage
  • Partager sur Facebook
  • Partager sur Twitter

Arduino + shield ethernet

    3 janvier 2015 à 17:13:06

    Bonjour,

    J'aimerais envoyer des données depuis une page web vers mon arduino et vice versa. Pour cela j'utilise un arduino méga + shield éthernet. 

    J'ai suivi plusieurs tutos mais j'ai toujours des choses incomprises... 

    Je voudrais tout d'abord envoyer des variables à mon arduino depuis une textbox présente sur la page web.

    Première question : Ou héberger la page web? sur la carte sd du shield? comment procéder ?

    Deuxième question : Comment recevoir cette info? système d'interruption sur arduino pour enregistrer la variable? une fonction qui va bien?

    Donc si vous avez des réponses ou des tutos je suis preneur ! j'ai cherché pas mal mais je bloque toujours ...

    • Partager sur Facebook
    • Partager sur Twitter
      10 janvier 2015 à 20:17:15

      Salut,

      Si ça ne te dérange pas de faire transiter tes données par url alors j'ai peut-être une solution pour toi. Je ne sais pas comment une textbox marche alors si ma solution te convient tu vas devoir t'adapter ^^

      Première réponse : tu héberges ta page web où tu veux.

      _____________________________________________________

      Deuxième réponse : 

      J'ai eu a utiliser ma Arduino et mon shield ethernet un peu pour la même application que toi alors je vais t'expliquer étape par étape ce que j'ai fait. Si une étape n'est pas claire je reviendrai dessus sans aucun soucis.

      1) Configuration de la box sur laquelle ton shield ethernet est connectée

      Personnellement, j'ai une freebox chez moi. J'ai donc du aller sur free.fr pour configurer le routeur de ma freebox. Depuis la page de configuration du routeur j'ai ajouté un "Bail DHCP permanent" en attribuant a l'adresse mac récupérée au dos de mon shield une adresse IP. C'est cette adresse IP que j'ai utilisée dans la redirection de port (et de plages ports car je ne sais absolument pas quoi correspond à quoi) comme adresse IP de destination avec comme ports interne et externe (début/fin) le port 80 (http) avec les protocles TCP et UDP (car encore une fois je ne sais pas à quoi cela correspond ^^').

      Note également l'adresse publique de ta box, tu vas en avoir besoin ("Adresse IP Freebox" dans l'onglet "Configuration du routeur" pour les utilisateurs de free).

      2) Côté programmation

      #include <SPI.h>
      #include <Ethernet.h>
      
      boolean incoming = 0;
      
      // Enter a MAC address and IP address for your controller below.
      // The IP address will be dependent on your local network:
      byte mac[] = { 
        0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 }; //je n'ai pas touché à cela, il n'y en a surement pas besoin.
      IPAddress ip(192,168,0,3); //<<< Ici tu rentres l'adresse IP que tu as attribuée pdnt la configuration de ton routeur.
      
      // Initialize the Ethernet server library
      // with the IP address and port you want to use 
      // (port 80 is default for HTTP):
      EthernetServer server(80);
      
      void setup()
      {
        // start the Ethernet connection and the server:
        Ethernet.begin(mac, ip);
        server.begin();
        Serial.begin(9600);
      }
      
      void loop()
      {
        // listen for incoming clients
        EthernetClient client = server.available();
        if (client) {
          // an http request ends with a blank line
          boolean currentLineIsBlank = true;
          while (client.connected()) {
            if (client.available()) {
              char c = client.read();
              // 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
      
              //reads URL string from $ to first blank space
              if(incoming && c == ' '){ 
                incoming = 0;
              }
              if(c == '$'){ 
                incoming = 1; 
              }
      
              //Checks for the URL string $1 or $2
              if(incoming == 1){
                Serial.println(c); //debug only
                
                /* Cette chaine de caractère "c", c'est la chaîne
                de caractère que tu as voulu envoyer dans ton lien.
                C'est ici que tu vas l'utiliser */
      
              }
      
              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();
        }
      }

      Si tu gères un minimum l'anglais tu comprendras sans aucun mal ce code. Sinon, je peux toujours te le traduire.


      3) Interaction site - Arduino

      Admettons que l'adresse publique de ta box soit : 192.168.1.15

      Pour pouvoir envoyer les informations de ton site vers ta Arduino via Internet, tu les feras transiter par URL sous cette forme : http://192.168.1.15:80/$ta_donnee

      Explications rapides pas du tout professionnelles : tu envoies une requête http d'où le "http://" ; "192.168.1.15" est l'adresse IP publique de ta box, c'est vers là que tout ce qui se trouve après le troisième slash sera envoyé ; ":80" c'est une autre information envoyée à ta box pour lui dire de rediriger les informations récupérées vers le port 80 qui, je te rappelle, à pour IP de destination ton shield ethernet ; le troisième "/" est là pour séparer les informations sur la box de destination des données à envoyer ; le "$" est extrêmement important, si tu as compris le code ci-dessus tu as compris son utilité, au cas où je te dis qu'il sert à donner le top départ à la Arduino pour commencer à récupérer les informations que tu as voulu lui envoyer car tout le reste ne l'intéresse pas mais ça, elle ne le sait pas ; "ta_donnee", j'imagine que tu as compris que c'est la donnée que tu veux envoyer à la Arduino ^^

      Voilà je crois que je ne peux pas t'aider plus que ça. Je rappelle que je ne suis pas un expert, loin de là, je partage juste mon expérience.

      J'invite toute personne qui a plus d'expérience que moi à me corriger, me donner des conseils pour améliorer mes explications, je modifierai alors mon post :)

      -
      Edité par Matmdr 10 janvier 2015 à 20:32:03

      • Partager sur Facebook
      • Partager sur Twitter
        13 janvier 2015 à 16:34:59

        salut, 

        Merci de ta réponse, je n'avais pas trop le temps de m'y mettre avec le boulot. 

        Mais je vais regarder ça de plus prés . 

        Merci en tout cas . Je te tiens au courant si j'ai quelques problèmes

        • Partager sur Facebook
        • Partager sur Twitter
          13 janvier 2015 à 16:51:17

          j'ai réussi 2-3 trucs mais mon problème maintenant c'est que je voudrais stocker ma page html dans ma carte micro SD . Mais pas moyen d'accéder à cette page depuis internet... 

          Des solutions?

          • Partager sur Facebook
          • Partager sur Twitter
            14 janvier 2015 à 18:36:56

            Pour ça non mais je risque de m'y intéresser dans pas trop longtemps (moins d'un mois je dirais), je te tiens au courant si j'y arrive et tiens moi au courant si t'y arrives stp ^^
            • Partager sur Facebook
            • Partager sur Twitter
              22 juin 2015 à 8:43:39

              Bonjour MAtMDR, je n'iteresse beaucpoutp à ton code peux tu m'aider s'il vous plait?

              ce que je veux c'est recuperer 3 données de ma page web vers arduino donc comment faire?

              • Partager sur Facebook
              • Partager sur Twitter
                17 novembre 2017 à 13:25:43

                Matmdr a écrit:

                Salut,

                Si ça ne te dérange pas de faire transiter tes données par url alors j'ai peut-être une solution pour toi. Je ne sais pas comment une textbox marche alors si ma solution te convient tu vas devoir t'adapter ^^

                Première réponse : tu héberges ta page web où tu veux.

                _____________________________________________________

                Deuxième réponse : 

                J'ai eu a utiliser ma Arduino et mon shield ethernet un peu pour la même application que toi alors je vais t'expliquer étape par étape ce que j'ai fait. Si une étape n'est pas claire je reviendrai dessus sans aucun soucis.

                1) Configuration de la box sur laquelle ton shield ethernet est connectée

                Personnellement, j'ai une freebox chez moi. J'ai donc du aller sur free.fr pour configurer le routeur de ma freebox. Depuis la page de configuration du routeur j'ai ajouté un "Bail DHCP permanent" en attribuant a l'adresse mac récupérée au dos de mon shield une adresse IP. C'est cette adresse IP que j'ai utilisée dans la redirection de port (et de plages ports car je ne sais absolument pas quoi correspond à quoi) comme adresse IP de destination avec comme ports interne et externe (début/fin) le port 80 (http) avec les protocles TCP et UDP (car encore une fois je ne sais pas à quoi cela correspond ^^').

                Note également l'adresse publique de ta box, tu vas en avoir besoin ("Adresse IP Freebox" dans l'onglet "Configuration du routeur" pour les utilisateurs de free).

                2) Côté programmation

                #include <SPI.h>
                #include <Ethernet.h>
                
                boolean incoming = 0;
                
                // Enter a MAC address and IP address for your controller below.
                // The IP address will be dependent on your local network:
                byte mac[] = { 
                  0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 }; //je n'ai pas touché à cela, il n'y en a surement pas besoin.
                IPAddress ip(192,168,0,3); //<<< Ici tu rentres l'adresse IP que tu as attribuée pdnt la configuration de ton routeur.
                
                // Initialize the Ethernet server library
                // with the IP address and port you want to use 
                // (port 80 is default for HTTP):
                EthernetServer server(80);
                
                void setup()
                {
                  // start the Ethernet connection and the server:
                  Ethernet.begin(mac, ip);
                  server.begin();
                  Serial.begin(9600);
                }
                
                void loop()
                {
                  // listen for incoming clients
                  EthernetClient client = server.available();
                  if (client) {
                    // an http request ends with a blank line
                    boolean currentLineIsBlank = true;
                    while (client.connected()) {
                      if (client.available()) {
                        char c = client.read();
                        // 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
                
                        //reads URL string from $ to first blank space
                        if(incoming && c == ' '){ 
                          incoming = 0;
                        }
                        if(c == '$'){ 
                          incoming = 1; 
                        }
                
                        //Checks for the URL string $1 or $2
                        if(incoming == 1){
                          Serial.println(c); //debug only
                          
                          /* Cette chaine de caractère "c", c'est la chaîne
                          de caractère que tu as voulu envoyer dans ton lien.
                          C'est ici que tu vas l'utiliser */
                
                        }
                
                        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();
                  }
                }

                Si tu gères un minimum l'anglais tu comprendras sans aucun mal ce code. Sinon, je peux toujours te le traduire.


                3) Interaction site - Arduino

                Admettons que l'adresse publique de ta box soit : 192.168.1.15

                Pour pouvoir envoyer les informations de ton site vers ta Arduino via Internet, tu les feras transiter par URL sous cette forme : http://192.168.1.15:80/$ta_donnee

                Explications rapides pas du tout professionnelles : tu envoies une requête http d'où le "http://" ; "192.168.1.15" est l'adresse IP publique de ta box, c'est vers là que tout ce qui se trouve après le troisième slash sera envoyé ; ":80" c'est une autre information envoyée à ta box pour lui dire de rediriger les informations récupérées vers le port 80 qui, je te rappelle, à pour IP de destination ton shield ethernet ; le troisième "/" est là pour séparer les informations sur la box de destination des données à envoyer ; le "$" est extrêmement important, si tu as compris le code ci-dessus tu as compris son utilité, au cas où je te dis qu'il sert à donner le top départ à la Arduino pour commencer à récupérer les informations que tu as voulu lui envoyer car tout le reste ne l'intéresse pas mais ça, elle ne le sait pas ; "ta_donnee", j'imagine que tu as compris que c'est la donnée que tu veux envoyer à la Arduino ^^

                Voilà je crois que je ne peux pas t'aider plus que ça. Je rappelle que je ne suis pas un expert, loin de là, je partage juste mon expérience.

                J'invite toute personne qui a plus d'expérience que moi à me corriger, me donner des conseils pour améliorer mes explications, je modifierai alors mon post :)

                -
                Edité par Matmdr 10 janvier 2015 à 20:32:03


                merci je te suis reconnaissant
                • Partager sur Facebook
                • Partager sur Twitter

                Arduino + shield ethernet

                × 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