Gruino : DIY – Communication sans fil entre arduino et votre PC !

Salut à  tous,

J’ai enfin un peu de temps pour rédiger quelque chose sur le projet Gruino, voici donc  un petit article qui va vous détailler comment faire communiquer votre carte Arduino avec votre PC et ce sans fils en utilisant deux modules XBee Pro Série 1. Cela va s’avérer fort pratique pour notre montage Gruino et nous évitera de devoir brancher le pc pour visualiser les mesures ou pire d’avoir des fils qui trainent   partout…

Faire communiquer la carte Arduino et le PC via les modules XBee était une première pour moi. J’avais acheté ces deux modules XBee en me disant que je les testerai mais n’ayant jamais eu besoin de sans fil avant ils étaient resté au placard.

Etape 1 : Configuration des modules Arduino sur le PC

Prérequis :
Une petite carte recevant la XBee et ayant une sortie USB, ça ressemble à  ça avec la XBee dessus :

IMAG0001

Le pc voit cette carte comme un port série, c’est donc simple à  programmer, j’ai utilisé cette interface pour préparer les deux cartes XBee (réglages).

Configuration des modules :
On branche la carte USB / XBee sur le PC puis on regarde quel port série elle utilise et enfin on le paramètre dans son terminal série préféré (Hyper terminal ou putty par exemple sous Windows).

Les paramètres par défaut sont :
– 9600 bits par secondes pour la vitesse
– 8 bits de données,
– Pas de parité,
– 1 bit de stop
– Pas de contrôle de flux

Une fois le terminal ouvert on tape +++ et on attend un « OK » en retour (sans appuyer sur entrer). Si rien ne se passe vérifiez les quelques points suivantes :

  • Essayez encore en attendant environ 10 secondes entre chaque tentative et tapez bien les +++ rapidement.
  • Vérifier que le module est bien alimenté (le petit voyant vert doit clignoter)
  • Vérifiez bien que vous n’avez pas inversé les fils Rx et Tx si c’est un branchement « maison »
  • Vérifiez le paramétrage de votre liaison série. Les valeurs par défaut sont  rappellée juste au dessus.

Ensuite on envoient la commande ATID xxxx ou xxxx est le numéro que l’on souhaite attribuer à  notre réseau. Par exemple ATID 1111 et on valide en appuyant sur « Entrer »

Ensuite on envoient la commande ATMY xxxx ou xxxx est l’adresse que l’on souhaite donner au module. Par exemple ATMY 1000 et on valide en appuyant sur « Entrer »

Ensuite on envoient la commande ATDL xxxx ou xxxx est l’adresse du module que l’on souhaite joindre. Par exemple ATDL 1001  et on valide en appuyant sur « Entrer »

Ensuite on envoient la commande ATWR pour dire au module XBee de sauvegarder les commandes et on valide en appuyant sur « Entrer ».

Ce qui donne par exemple :

Module 1 :
+++
ATID 1111
ATMY1000
ATDL 1001
ATWR

Module 2 :
+++
ATID 1111
ATMY 1001
ATDL 1000
ATWR

Etape 2 : Côté Arduino

Prérequis :

Une petite platine qui régule l’alimentation de la XBee et qui se branche simplement avec 4 fils :

– Un fil +5v
– La mass
– Un fil Tx
– Un fil Rx

Elle ressemble à  ça avec la XBee dessus :

IMAG0002

Branchement :

Bien faire attention à  brancher le Tx et le Rx dans le bon sens sinon ça ne communiquera pas ^^

Pour le paramétrage j’ai choisi de le faire sur le PC pour les deux modules et de prendre l’un des deux pour le mettre sur le montage.

Pour la communication il suffit de faire communiquer la carte Arduin via le port série comme on le ferai normalement via le port USB de la carte ou via sa sortie RS232. C’est totalement transparent !

Les modules XBee ayant été configuré par le PC la carte n’a rien à  initialiser les paramètres sont écrits dans une EPROM et donc sont conservé même si le module est débranché !

Etape 3 : Tester la communication

Pour tester la communication j’ai rédiger un petit programme plus que classique lors des testes de communications de liaison séries entre un PC et une Arduino.

Voici le code :

void setup()
{
   pinMode(13, OUTPUT);
   digitalWrite(13, LOW);

   Serial.begin(9600);
}

void loop()
{
  lire();
}

void lire()
{
   if(Serial.available() > 0)
   {
       switch(Serial.read())
       {
           case 'e':
               digitalWrite(13, LOW);
               break;                 
           case 'm':
               digitalWrite(13, HIGH);
               break;
       }
   }
}

Ce petit programme allume la led embarqué sur le port 13 de la carte lorsqu’il reçoit un « m » sur la liaison série et l’éteint lorsqu’il reçoit un « e ».

J’ai choisi de mettre les « fonctionnalités liés aux différentes lettres dans une fonction « lire » qui reçoit est appelé par la fonction « loop » de manière à  ce que le code soit un peu plus modulable pour les futures évolution de celui-ci.

la fonction « loop » est comme son nom l’indique si bien, une boucle sans fin qui tourne tant que la carte Arduino est allumée. La fonction « setup » est quand à  elle exécuté à  l’allumage de la carte et permet de positionner les paramètres que l’on souhaite au démarrage pour que tout soit bien initialiser.

Il faut préciser que comme vous pouvez vous en douter il n’y a pas de notions d’heure ou de date. La carte est capable de compter des micro secondes mais pas de savoir quelle heure il est. Il est donc impossible de programmer des actions à  heures fixes. En effet si on lui donne l’heure lors de son démarrage et qu’elle s’éteint, il faudra lui re-fournir l’heure pour que tout fonctionne bien… Mais rassurez vous il existe des petits composants appelés RTC (Real Time Clock ou Horloge Temps Réel pour les non anglophones). Ces petits composants permettent de connaitre l’heure avec une précision relativement correcte et ne coutent pas très chère. Ils seront abordé dans un future chapitre.

Etape 4 : Affinage

Régler la puissance d’émission des cartes :

En passant en mode configuration (+++) comme vu ci dessus on peut voir la puissance d’émission paramétré avec la commande ATPL, les valeurs vont de 0 à  4 pour respectivement aller du mini au maxi, voici les valeurs tirés de la doc de digi pour une XBee-Pro Série 1 :

0 : 10 dbm
1 : 12 dbm
2 : 14 dbm
3 : 16 dbm
4 : 18 dbm

Pour ma part les cartes sont réglés au minimum et cela fonctionne plutôt bien 🙂

IMAG0001

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *