Skyduino:~#
Articles
arduino, Corrigé, programmation, python, tutoriel

[Tutoriel] Arduino et Ethernet Shield

Bonjour tout le monde !

Aujourd’hui tutoriel vidéo sur comment utiliser la ethernet shield dans un projet arduino.

Désolé du retard, normalement la vidéo devait être uploadée dimanche mais à cause de divers problèmes de licence adobe CS4, de codec quicktime et autre j’ai été énormément retardé …
J’étais aussi un peu (beaucoup) enrhumé, ça doit pas s’entendre énormément mais bon désolé je n’y peux rien ;)

Au programme :
– Qu’est ce que l’ethernet shield,
– les fonctions de la librairie ethernet officiel,
– exemple avec une led et un script python,
– extension arduino + relay.

Si vous avez des questions n’hésitez pas ;)

Le sketch d’exemple :

#include <SPI.h>
#include <Ethernet.h>

/* Détails technique de la connexion ethernet */
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 
  192,168,1, 177 };
byte gateway[] = { 
  192,168,1, 1 };

// Attachement d'un objet "server" sur le port 1337
Server server(1337);

void setup()
{
  // Configuration de la ethernet shield et du server
  Ethernet.begin(mac, ip, gateway);
  server.begin();

  // Mise en sortie de la broche avec notre led (par défaut éteinte)
  pinMode(9, OUTPUT);
  digitalWrite(9, LOW);
}

void loop()
{
  // Attente de la connexion d'un client
  Client client = server.available();
  if (client && client.connected()) {

    // si le client nous envoie quelque chose
    if (client.available() > 0) {

      // On regarde ce que le client nous demande
      switch(client.read()){
      case 'A': // allumer la led
        digitalWrite(9, HIGH);
        break;
      case 'a': // éteindre la led
        digitalWrite(9, LOW);
        break;
      }
    }
  }
}

ET le script python

import socket

print "~ Client WebLed ~"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.1.177", 1337))

q = 0
while q != 3:

    print "- Menu WebLed -"
    print "(1) Allume la led"
    print "(2) Eteint le led"
    print "(3) Quitte le programme."
    q = int(raw_input())
    
    if q == 1:
        print "Allumage de la led ..."
        s.send('A')
        continue

    if q == 2:
        print "Extinction de la led ..."
        s.send('a')

print "a+ !"
s.close()

Pour le câblage du relay :
http://www.arduino.cc/playground/uploads/Main/relays.pdf
(Pensez à regarder le datasheet de votre relay pour savoir comment le câbler ;))

About these ads

Discussion

68 réflexions sur “[Tutoriel] Arduino et Ethernet Shield

  1. Il y a un os avec la video

    Publié par Jean-Paul Rouze | 3 novembre 2011, 20 h 09 min
  2. Bonjour Skywodd
    Tous d’abord bravo pour tes vidéos et ton blog…
    J’ai regardé ton tuto sur l’Ethernet shied Arduino avec beaucoup d’intérêt (j’attend de recevoir mon shield prochainement)
    En attendant je me concentre sur l’interface web et donc ton script python.
    Je suppose que pour l’exécuter il est inclus dans une page html et lancé à partir d’un navigateur? (Oui/Non ?)
    Mais cette page elle est sur un serveur distant sur un serveur local, ou c’es un simple fichier sur ton disque dur ?
    J’arrive pas trop à faire le lien entre l’adresse IP renseigné dans le code de l’arduino et la page de commande.
    Si tu pouvais détailler un peu plus cette partie, ça m’aiderais pas mal

    Cordialement
    Peedjy

    Publié par Peedjy | 10 décembre 2011, 16 h 15 min
    • Le script python est totalement indépendant, pour l’exécuter je le lance comme un programme normal. Je n’utilise aucun interface web dans le tuto.

      L’adresse ip dans le sketch arduino est une adresse ip libre de mon réseau que j’attribut à l’arduino, de manière à pouvoir y accéder par la suite en ethernet.

      Pour faire une page html qui commande l’arduino (en utilisant mon systéme) il faut soit faire un mini serveur web python, soit faire une page php communiquant avec l’arduino via fsocketopen.
      J’avais fait un début de code sur ce principe cherche « arduino rpc » sur mon blog ;)

      Publié par skywodd | 10 décembre 2011, 16 h 32 min
  3. Merci pour la vidéo, génial.

    J’ai une question con du coup (je débute), le shield il squate quels PINs de l’Arduino ? Aucuns ? Uniquement les 6 pin du bloque SPI ?

    Publié par Julien | 29 décembre 2011, 12 h 03 min
  4. Pourrais-tu me dire s’il te plaît comment lancer le code python…? je n’arrive pas à le lance j’ai une erreur de syntaxe sur la ligne 1….rrrrrrrrrrrrrr

    Publié par hakim | 10 janvier 2012, 3 h 43 min
    • Vérifie que tu as bien python 2.7.x, (http://www.python.org/getit/) lance le .py avec l’ide python (clique droit > ouvrir avec python ide sous windows) ensuite si tu as ^c^v mon code correctement en faisant F5 il devrait se lancer dans une console.
      Si c’est pas le cas vérifie que l’indentation est bonne (en python l’indentation fait qu’un prog marche … ou plante).
      Au pire fait une capture d’écran de ton ide + msg erreur et post le tout dans un nouveau commentaire ;)

      Publié par skywodd | 10 janvier 2012, 9 h 51 min
  5. Bonjour ,je n’arrive pas à utiliser le script Python , oû faut-il écrire le programme et le lancer .??

    Je suis sur une plateforme Mac .

    Merci pour votre aide.

    Publié par Raph | 29 janvier 2012, 23 h 54 min
  6. Celà fonctionne vraiment bien !
    Merci pour ce tuto.

    Publié par Michel Z | 14 février 2012, 17 h 42 min
  7. Bravo super tuto ça me donne envie de me lancer!!
    je devoir encore bosser.
    kris

    Publié par heloderma-kris | 5 avril 2012, 9 h 37 min
  8. Salut,
    très bon blog !
    Je voudrais savoir quelle est la connexion utilisée entre le shield et arduino pour transmettre les données web.
    Es-ce que les E/S restent toutes libres ?

    Publié par x3n0zxenoz | 16 avril 2012, 23 h 57 min
    • La shield utilise le port SPI pour communiquer.
      Sur une carte arduino classique le port SPI se trouve sur D13, D12, D11, D10, la shield utilise aussi D4 pour la carte SD.

      Tu ne peut pas utiliser ces broches avec analogWrite, pinMode, digitalWrite, etc … sinon ton code ne marchera pas et la shield non plus (l’un faisant bugger l’autre).

      Publié par skywodd | 17 avril 2012, 13 h 28 min
  9. Bonjour ,
    je voudrais vous remercier pour ce tuto .
    Je suis débutante et j’utilise une carte Arduino Ethernet avec un USB2Serial light.
    Au début j’ai eu des problèmes d’installation de la carte (trouver les drivers) . Maintenant la carte est detectée via le port COM 32 , mais j’ai trouvé des problèmes lorsque j’essaye l’ upload du sketch .
    j’ai cette erreur : avrdude: stk500_getsync(): not in sync: resp=0x00.

    Pourriez vous m’aider ?? et merci

    Publié par Maha | 26 avril 2012, 15 h 08 min
  10. @MAHA : clique droit sur le .py (si tu est sous windows) et ouvre le fichier avec l’IDLE python.
    Ensuite appui sur F5 pour lancer l’exécution du script, les erreurs seront affiché en rouge dans la console.

    Publié par skywodd | 26 avril 2012, 21 h 51 min
  11. Chez moi j’ai du remplacer « Client client = server.available(); » par « EthernetClient client = server.available(); » et « Server server(8888); » par « EthernetServer server(8888); » pour ne pas avoir d’erreur

    Par contre je n’arrive toujours pas à lire correctement les caractères…

    Publié par sablier94 | 17 mai 2012, 17 h 45 min
    • Tu est sous arduino 1.0 ?
      Une des modifications entre la version 0023 et 1.0 est justement le passage de Server vers EthernetServer, Client vers Ethernetclient … mais ça devrait marcher de la même maniére.

      Publié par skywodd | 17 mai 2012, 17 h 55 min
      • Oui j’utilise l’IDE 1.0
        J’ai enfin trouvé le problème, c’était le port qui était utilisé par un autre programme. Merci.

        Publié par sablier94 | 17 mai 2012, 20 h 16 min
  12. Bonjour ,avez vous possibilité de faire parraitre un tuto pour utiliser ce sketch mais avec un serveur integré à la carte et consultable par le biais d’une page web.??

    Publié par Raph | 18 mai 2012, 15 h 56 min
  13. @HUGO:
    >> Est-il possible d’utiliser le même principe du script pithon pour commander l’arduino à partir d’un mac distant via internet et non plus à partir du réseau local??

    Oui c’est possible en « ouvrant » les ports adéquat dans l’interface admin du routeur.
    (Voir la doc du routeur dans la partie « tables de NAT »)

    PS: ouverture de port = accès depuis n’importe où.
    Pour une application « critique » telle qu’une chaudière il faudra prévoir des sécurités afin d’éviter les problémes.

    >> Quelles seraient les modifs à apporter pour y parvenir, sachant de plus que je voudrais envoyer par internet une série de commandes en impulsions de 1sec sur plusieurs relais et en une seule passe (commande de chaudière).

    En ajoutant un delay(1000) pour avoir des impulsions de 1sec et en faisant une boucle for ?

    http://arduino.cc/en/Reference/for

    J’ai pas trop compris le fonctionnement désiré …

    Publié par skywodd | 26 juin 2012, 15 h 51 min
  14. Superbe vidéo !
    Juste un petit problème avec le Py (je n’ai jamais programmé en Python, juste C/C++).
    J’ai installé Python 2.6 et l’autre truc qui va avec, mais lorsque j’exécute avec le « ouvrir avec », çà m’affiche juste le titre et pas le menu programmé.

    Une idée ? Est-il possible de communiquer avec le port Ethernet en C avec un programme du même genre ?

    Publié par Simon | 19 juillet 2012, 14 h 49 min
    • Fait click droit sur le fichier .py -> ouvrir avec l’ide.
      Puis fait F5 pour lancer le programme en console, ça t’affichera les erreurs si il y en a ;)

      Pour le C oui c’est tout à fait faisable, sous windows il y a la librairie winsock, ou socket sous linux.

      Publié par skywodd | 19 juillet 2012, 15 h 37 min
  15. Est-il possible de connecter en même temps que l’Ethernet Shield officiel Arduino d’autres périphériques en SPI ?

    J’ai besoin d’un ADC, je veux lire les valeurs (en SPI) et ensuite les mettre dans une page HTML web-serveur avec l’ethernet Shield. J’ai défini des Chip Select différents mais çà semble poser quelques soucis quand même, dès que je relie à l’Arduino les MOSI et MISO : mon serveur crash.

    Publié par Tony | 20 juillet 2012, 15 h 15 min
    • Le port SPI est un port, il est donc possible d’utiliser plusieurs périphériques SPI, mais pas en même temps !
      Il faut que seul UN périphérique SPI soit activé simultanément (CS = LOW).

      Regarde de plus prés ta gestion des broches CS, tu doit oublier de libérer le port SPI quelque pars ;)

      Publié par skywodd | 20 juillet 2012, 15 h 21 min
  16. Bonjour Skywodd
    C’est avec beaucoup d’intérêt que j’ai regardé ton tuto et t’en remercie ! ;o)

    Juste une question: Tu parles dans ta vidéo d’un topic très consulté du forum arduino traitant d’une mini-station domotique.
    Malgré mes recherches, je ne l’ai pas trouvé, pourrais tu nous mettre le lien stp?
    Merci encore pour tes tutos ^^

    Publié par Simon. | 4 août 2012, 17 h 18 min
  17. Salut je suis en version 2.7.3 de python et quand je lance le porgramme (run–>run module), j’ai ce message d’erreur: There’s an error in your program:invalid syntax
    pourrais-tu m’aider s’il te plait ??
    Merci

    Publié par fabien | 10 août 2012, 17 h 50 min
    • Ça doit te mettre automatiquement le curseur au niveau de l’erreur ;)
      Tu as une tabulation quelques par au lieu de 4 espaces ou ce genre de chose.

      Publié par skywodd | 10 août 2012, 18 h 19 min
      • le message d’erreur a changé maintenant c’est ça mais ça m’aide toujours pas a allumer ma led ;(

        Traceback (most recent call last):
        File « C:\Users\Julie\Desktop\pyth », line 5, in
        s.connect((« 192.168.1.177″, 1337))
        File « C:\Python27\lib\socket.py », line 224, in meth
        return getattr(self._sock,name)(*args)
        error: [Errno 10060] Une tentative de connexion a échoué car le parti connecté n’a pas répondu convenablement au-delà d’une certaine durée ou une connexion établie a échoué car l’hôte de connexion n’a pas répondu

        Publié par fabien | 10 août 2012, 19 h 40 min
      • finalement c’est bon j’ai trouvé seul le problème merci de ton aide quand même parce qu’elle m’a permis de m’orienter sur la bonne voix.

        Publié par fabien | 10 août 2012, 19 h 48 min
  18. @FABIEN : Il faut changer l’adresse IP par celle utilisé par ton arduino ;)
    (De même dans le code il faut modifier l’adresse ip de la gateway (ton routeur) si il n’est pas sur 192.168.1.1)

    L’erreur dit simplement que le programme n’as pas pu ce connecter à l’adresse ip / port donné.

    Publié par skywodd | 10 août 2012, 19 h 45 min
  19. j’ai lu plus haut dans les commentaires que le shield utilisait D4 pour la carte SD mais je me pose une question :
    Si j’utilise le shield en mode ethernet alors est-il possible de brancher un composant sur la broche D4 ?
    Merci de ton aide

    Publié par fabien | 11 août 2012, 14 h 15 min
  20. donc je peux faire un digitalWrite dessus??
    en faite c’est pour connecter mon écran nokia 5110 avec la librairie mais je dois conecter sur D3–>D7 donc aussi D4

    Publié par fabien | 11 août 2012, 16 h 49 min
  21. j’utilise la même mais je ne sais pas comment on change les broches parce que en faite c’est juste la broche SDIN que je voudrais passer de 4 à 8 mais comment ??

    Publié par fabien | 11 août 2012, 17 h 57 min
    • C’est à la déclaration de l’objet PCD8544 qu’il faut déclarer les broches.

      Exemple :

      PCD8544 lcd(3,   /* clock */
                      4,   /* data-in */
                      5,   /* data select */
                      6,   /* reset */
                      7);  /* enable */
      

      Publié par skywodd | 11 août 2012, 18 h 04 min
      • bizarre ça j’ai la même librairie mais moi je mets juste ça :
        (exemple du hello world qui n’est pas de moi mais je procède de la même façon):

        #include <PCD8544.h>
        
        // A custom glyph (a smiley)...
        static const byte glyph[] = { B00010000, B00110100, B00110000, B00110100, B00010000 };
        
        static PCD8544 lcd;
        
        void setup() {
          // PCD8544-compatible displays may have a different resolution...
          lcd.begin(84, 48);
          
          // Add the smiley to position "0" of the ASCII table...
          lcd.createChar(0, glyph);
        }
        
        
        void loop() {
          // Just to show the program is alive...
          static int counter = 0;
        
          // Write a piece of text on the first line...
          lcd.setCursor(0, 0);
          lcd.print("Hello, World!");
        
          // Write the counter on the second line...
          lcd.setCursor(0, 1);
          lcd.print(counter, DEC);
          lcd.write(' ');
          lcd.write(0);  // write the smiley
        
          delay(500);  
          counter++;
        }
        

        Publié par fabien | 11 août 2012, 18 h 19 min
      • Normal ça c’est l’exemple avec les broches par défaut ;)

        Remplace: static PCD8544 lcd;
        par ma version juste au dessus et tu pourras choisir les broches ;)

        Publié par skywodd | 11 août 2012, 18 h 45 min
  22. ok super merci beaucoup de ton aide, super site dans lequel on peut largement avoir de l’aide en moins de 24 h.
    prochaine étape pour moi, trouver si dans le python, le s.received existepour peut-être réussir à recevoir les données d’un capteur branché sur l’arduino pour éviter d’utiliser un protocole comme celui de l’exemple webserver de la librairie.J’éspère de tout coeur que c’est possible.

    Encore merci à toi parce que tu m’as vraiment permis de progresser en programmation arduino.

    Publié par fabien | 11 août 2012, 19 h 29 min
  23. j’ai beau chercher sur internet,je trouve pas les instructions qu’il faut pour recevoir les données d’un capteur avec un script python, je sais même pas si c’est possible ;(
    Saurais-tu m’aider dans ce « mini-projet » ?? Je voudrais en faite savoir si c’est possible de faire ce que je veux puis peut-être, pourquoi pas un exemple des codes ?? (python et arduino).
    En éspérant que tu pourras m’aider.
    @+

    Publié par fabien | 12 août 2012, 19 h 24 min
  24. dac mais c’est possible ou pas ?

    Publié par fabien | 12 août 2012, 19 h 35 min
  25. Bonjour,

    J’aimerais développez une page de navigation C# (avec visual c#) et j’aimerais savoir si ton code en python peut être transformé en c#?

    j’ai vu que tu utilises une librairie « import socket » est ce que je vais la retrouver en c#?

    Merci

    Publié par Jérémy | 1 octobre 2012, 16 h 41 min
  26. Merci c’est sympas ;)

    Publié par Jérémy | 2 octobre 2012, 16 h 18 min
  27. Désolé de revenir vers toi mais j’ai des soucies pour mon code c# peux tu me le corriger si sa ne te dérange pas?

    j’ai mis le code sur developpez.com

    http://www.developpez.net/forums/d1266363/dotnet/langages/csharp/convertion-python-csharp/#post6917884

    Je ne suis pas très fort en dev.

    Merci

    Publié par Jérémy | 3 octobre 2012, 22 h 17 min
  28. Bonjour à tous,

    Très bon tuto pour commencer ^^ moi ce que je voudrais faire c’est contrôler l’arduino via une page web

    Je m’explique, j’ai vu une vidéo (http://www.youtube.com/watch?v=sqkOo4-7aek) et j’ai pour projet de faire quelque chose plus ou moins comme cela. Je voudrais contrôler l’arduino (brancher uniquement ! par USB) via une interface web et donc un serveur local, cette personne explique qu’il utilise le php pour la page web, un script python pour récupérer le fichier généré sur la page web, pour au final contrôler directement l’arduino…

    Personne n’a encore trouvé solution à mon problème, j’espère pouvoir trouver ici de l’aide car ça fait un bon bout de temps que je cherche sur internet sans grand résultat >< merci beaucoup d'avance ^^

    ZiiC

    Publié par Guillaume | 8 novembre 2012, 22 h 54 min
  29. Salut deja bravo et merci de faire des super tuto ;) pour le lycée je dois faire un projet ( commander une camera et des lampes a partir d’un site internet, on a deja tout fait sauf les lampes, quels branchemet et quel programme tu pourrais me conseille ? ps : on utilise ethernet shield et un relais merci

    Publié par tomy | 20 février 2013, 17 h 26 min
  30. Bonjour et merci pour ce tuto.
    Je ne comprend pas le rôle du transistor : D9 peut-il alimenter directement le relais ?
    Le transistor sert à isoler D9 du reste du montage ?
    Merci pour vos réponses.

    Publié par Patrice | 21 février 2013, 19 h 07 min
  31. Merci pour le tuto et le blog !

    Bonne continuation ! :)

    Publié par John John K. | 24 juin 2013, 12 h 13 min

Rétroliens/Pings

  1. Pingback: [Tutoriel] Arduino et Ethernet Shield | Projet TS1 Aquarium | Scoop.it - 17 janvier 2013

  2. Pingback: [Tutoriel] Arduino et Ethernet Shield | Projet | Scoop.it - 7 février 2013

  3. Pingback: Frederic Roquencourt (frederic.roquencourt) | Pearltrees - 18 mars 2013

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Archives

Wow. Dogecoin. Amaze.

Laissez un tip en Dogecoin

DMMNFk6WBVTpx2Wu1Z35GL61QXSd6r6WQx

Suivre

Recevez les nouvelles publications par mail.

Rejoignez 801 autres abonnés