Garçon, du WiFi pour mon Arduino
Transcription
Garçon, du WiFi pour mon Arduino
« Garçon, du WiFi pour mon Arduino ! » aka guide de mise en route rapide du module Wifi RN-XV Grâce à ce petit module, il devient enfin possible de faire communiquer l’Arduino directement avec votre box adsl en Wifi et donc Internet sans passer par le sempiternel Ethernet. Cela peut se révéler bien pratique quand vos capteurs se trouvent à l’extérieur ou bien dans tout autre endroit dépourvu de prise Ethernet, ce qui est souvent le cas au domicile …Fini les câbles qui serpentent sur le plancher et dans lesquels on se prend les pieds ! Le module offre bien plus puisqu'il intègre une stack TCPI/IP assez complète. Il pourra par exemple se comporter comme client Web ou même serveur HTTP. Il réutilise la carte Arduino Wireless Shield que l'on a l'habitude d'utiliser pour brancher un module Xbee. En avant ! 1- Première étape : se procurer un module RN-XV, un Arduino Wireless Shield (en version SD ou sans, selon qu’on a besoin d’enregistrer les données mesurées en local ou non) et un Arduino (toutes les versions à partir de l’Arduino duemilanove feront l’affaire). L’Arduino Wireless Shield n’est pas absolument indispensable mais bien commode. On les emboîte ensemble comme sur la photo ci-dessous : 2- Installer la librairie WiFly-Shield depuis https://github.com/jcrouchley/WiFly-Shield (librairie créée par Sparkfun et élégamment distribuée sous licence LGPL) soit en clonant le dépôt Git soit en téléchargeant l’archive et en la dé-zippant dans le répertoire des librairies de votre IDE Arduino. Redémarrer l’IDE. 3- Positionner le commutateur de la carte Arduino Wireless Shield sur “USB”. De cette façon, votre terminal (hyperterminal sous Windows, screen ou autre sous Linux) communique directement avec le module sans passer par le micro-contrôleur de l’Arduino. ça tombe bien car c’est de cette façon qu’on explique au module RN-XV ce qu’il doit faire. Il s’agit de commandes ASCII qui font penser aux commandes AT mais qui font bien plus. La première fois que vous mettez le module sous tension, celui-ci communique à 9600 bauds avec les paramètres standards sous Hyperterminal ou Screen (c’est-à-dire 8 bits de donnée, aucune parité, bit d’arrêt à 1 et aucun contrôle de flux) 4- On indique au module comment se connecter au réseau WiFi local $$$ set wlan phrase <mot de passe du réseau> [pour passer en mode commande. Si tout se passe [bien, le module répond en affichant “CMD”. [le module négociera de lui-même le [fait de savoir si il s’agit de WPA, WPA2 ou WEP set wlan ssid <ssid du réseau> save reboot Le module doit répondre avec un message du genre : WiFly Ver numVersionCourrante, 02-13-2012 on RN-171 MAC Addr=00:06:66:71:3a:38 Auto-Assoc leSSIDdemonResau chan=1 mode=WPA2 SCAN OK Joining leSSIDdemomReseau now.. *READY* Associated! DHCP: Start DHCP in 4244ms, lease=86400s IF=UP DHCP=ON IP=192.168.1.24:2000 NM=255.255.255.0 GW=192.168.1.1 Listen on 2000 A noter qu’à partir de ce moment, nous pouvons accéder au mode commande via un telnet sur l’adresse IP du RN-XV (port 2000), ce qui va nous éviter de commuter inlassablement entre la position “micro” et “USB” du Wireless Shield. Attention, puisque nous sommes en DHCP, l’adresse IP du module peut potentiellement changer. Une solution sera par exemple d’établir une réservation d’adresse IP sur le serveur DHCP à partir de l’adresse MAC du module. 5- Après le reboot, on met à jour (une fois, pas la peine de le refaire sans cesse !) le firmware du module si la version affichée après le reboot est inférieure à 2.32: $$$ ftp update le module devrait répondre par : <num version courante> FTP connecting to 208.109.78.34 FTP file=53 ......................................................... FTP OK. UPDATE OK Pour finir cette étape, on redémarre le module à nouveau avec la commande “reboot”. La sortie devrait être équivalente à la précédente au numéro de version et adresse DHCP près. 6- Repasser le commutateur de l’Arduino Wireless Module en position micro pour laisser maintenant dialoguer le module avec la carte Arduino et donc les sketchs. Pour télécharger un nouveau sketch sur la carte Arduino, le plus simple consiste à tout débrancher, enlever la carte Arduino Wireless Shield, rebrancher la carte Arduino sur l’USB, uploader le sketch et rebrancher l’ensemble. De cette façon, on est certain que durant l’upload, le module RN-XV ne vient pas polluer le dialogue ordinateur ↔ carte Arduino. 7- à partir de là, le module est prêt à fonctionner depuis un sketch Arduino classique à l’aide des fonctions de la librairie WiFly.h. La particularité de cette librairie est qu’elle permet de réutiliser les fonctions de la librairie Ethernet “traditionnelle” d’Arduino donc de minimiser la réécriture du code destiné initialement à fonctionner avec cette librairie. Note 1 : Bien qu’il soit possible d’utiliser la fonction WiFly.join("ssid", "passphrase"), la plupart des exemples rencontrés partent du principe que les identifiants réseau/mot de passe ont été entrés dans le fichier credentials.h qui se trouve dans le répertoire de l’exemple, du type : \..\arduino-1.0-windows\arduino-1.0\libraries\WiFly\examples\WiFly_WebServer Attention, cela signifie que vos identifiants réseau WiFi sont en clair dans votre ordinateur ... Note 2: à ma connaissance, il faut impérativement ajouter les lignes suivantes dans le code des exemples au début du setup des exemples fournis par la librairie WiFly : Serial.begin(9600); WiFly.setUart(&Serial);WiFly.begin(); (au lieu de WiFly.begin();) Pour tester, on peut donc télécharger sur la carte Arduino (en suivant la procédure de l’étape 6) l’exemple WyFly_WebServer (Arduino IDE File → Examples → WiFly → WiFly_WebServer) qui va transformer votre Arduino en petit serveur Web local. Le résultat peut s’observer via le navigateur et le terminal série de l’IDE Arduino : Bons projets ! Rendez-vous sur forum.snootlab.com pour vos questions ou pour parler de vos projets! Pour aller plus loin, l’ensemble des commandes que comprend le module RN-XV est ici : http://www.rovingnetworks.com/resources/download/93/WiFly_User_Manual