Communication à l’aide du protocole ZigBee entre un PC et une carte Arduino
L’objectif de ce montage est de faire communiquer un PC avec une carte Arduino à l’aide du protocole ZigBee
Voici l’architecture de montage :
Cette article décrit la mise en place d’une topologie réseau simple, permettant de communiquer entre un PC et une carte Arduino à l’aide de modules XBee série 1 de chez Digi.
Les composants
Le montage nécessite les composants suivants :
- un PC, fonctionnant sous Debian GNU/Linux pour ma part ;
- une carte Arduino ou bien un adaptateur USB relié au PC ;
- deux modules de communication XBee ;
- une carte Arduino avec un adaptateur XBee.
A propos du protocole ZigBee
![]() |
ZigBee est un protocole de haut niveau permettant la communication de petites radios, à consommation réduite, basée sur la norme IEEE 802.15.4 pour les réseaux à dimension personnelle (WPANs). C’est vraiment un très bon protocole, qui est bien plus simple à mettre en œuvre que le protocole Bluetooth. Je ne sais pas si vous avez déjà vu la stack du protocole. Il y a de quoi avoir peur ;-) |
xBee, ZigBee et beeee?
Si vous êtes perdus avec tous ces sigles, c’est normal. Moi aussi ;-) Voici ce que j’ai compris :
- ZigBee : est le nom du protocole ;
- XBee : est le nom du produit chez le constructeur Digi ;
- IEEE 802.15.4 : c’est le nom du standard qui définit le communication dans un WPAN ;
Ok, c’est vraiment pas plus claire ;-) Mais c’est dit.
Liste des composants
Vous avez besoin des composants suivants :
Nom du composant | Archeter chez | Quantité | Prix |
---|---|---|---|
Platine d’interface USB pour modules “XBEE” | Lextronic | 1 (optionnel) | 23€ TTC |
Module xBee | Matlog | 1 (optionnel) | 20€ TTC |
Arduino Duemilanove | Libelium | 2 | 24€ TTC |
Arduino Xbee ZB 2mW + UFL Antenna | Libelium | 2 | 50€ TTC |
Partie PC
La connexion entre le module Xbee et un PC peut se faire de deux manières :
- à l’aide d’un adaptateur USB ;
- à l’aide d’une carte Arduino et d’un Shield XBee ;
L’objectif pour la partie PC du montage est de communiquer avec le module XBee, à fin de lui envoyer des commandes.
Cette communication se fait à l’aide d un convertisseur USB-Serial, ce rôle est joué par l’adaptateur USB ou bien par la carte Arduino + Shield.
Connexion à l’aide de l’adaptateur USB
L’adaptateur XBee se connect directement sur le port USB du PC :
Un fois branché, le module est visible à l’aide de la commande lsusb :
Bus 002 Device 013: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Communication à l’aide d’une carte Arduino + XBee Shield
L’adaptateur XBee se connecte directement sur la carte Arduino :
Il est nécessaire de modifier la configuration par du shield pour mettre la carte en mode USB-Serial.
Pour cela, il faut mettre les deux jumper à droite (éloigner du port USB), comme sur cette photo : Configuration mode USB-serial
Vous pouvez ensuite brancher la carte Arduino et voir le module XBee à l’aide de la commande lsusb :
Bus 002 Device 013: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Connexion à l’aide d’un gestionnaire de terminal
Une fois que le module XBee est connecté au PC, il doit être disponible sur /dev/ttyUSB0 :
[31016.280327] ftdi_sio 2-8.3:1.0: FTDI USB Serial Device converter detected
[31016.280354] /build/buildd/linux-2.6.24/drivers/usb/serial/ftdi_sio.c: Detected FT232RL
[31016.280449] usb 2-8.3: FTDI USB Serial Device converter now attached to ttyUSB0
Pour communiquer avec le module, il faut utiliser un programme de gestion de terminal ( gtkterm, minicom ou bien l’IDE de la carte Arduino).
Voici la configuration pour gtkterm :
Configuration du module XBee
Une fois que vous etes connecté au module XBee, vous pouvez lui envoyer des commandes à l’aide du gestionnaire de terminal.
Le module dispose de deux mode de fonctionnement : normal et configuration.
Pour passer en mode configuration, il faut saisir +++ (sans CR, retour à la ligne).
Si le module a compris la commande, alors il retourne OK.
Voici un exemple de session :
.
Configuration d’un réseau bidirectionnelle simple
Voici les différentes instructions pour configurer un réseau simple, c’est à dire une communication bidirectionnelle entre deux cartes Arduino ou bien entre un PC et une carte Arduino
Configuration sur la carte reliée au PC
+++OK
ATMY1234
OK
ATDL5678
OK
ATDH0
OK
ATID1111
OK
Configuration du module Arduino
+++OK
ATMY5678
OK
ATDL1234
OK
ATDH0
OK
ATID1111
OK
Les commandes importantes sont :
- ATMY : adresse source ;
- ATDL : adresse de destination (bite de poids faible) ;
- ATDH : adresse de destination (bite de poids fort) ;
- ATID : identifiant du réseau ;
Utilisation au niveau de la carte Arduino
Il faut inscrire le programme suivant dans la mémoire de la carte :
void setup() {
Serial.begin(9600);
Serial.print("+++");
Serial.print("ATDH0\r");
Serial.print("ATDL1234\r");
Serial.print("ATMY5678\r");
Serial.print("ATID1111\r");
Serial.print("ATCN\r");
}
void loop() {
delay(1000);
Serial.print("42\n");
}
La programmer et changer le sens des deux “jumper” pour faire communiquer le module avec la carte.
Référence
- Le Data sheet du module ;
- Le livre Making Things Talk de Tom Igoe chez O’reilly.
Si vous voulez vous simplifier la vie, il existe une bibliothèque pour la programmation des modules xbee : xbee-arduino.
Vous connaissez s^rement http://openservo.com/
@Michel: Non! Merci beaucoup pour ce lien!