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