Ce livre présente succintement ce qu'est le Zigbee, comment l'utiliser et un programme d'exemple à effectuer à l'école.
Dans un 2ème temps, on se propose de créer un jeu de morpion en "réseau" (par le Zigbee).
Le protocole Zigbee est un protocole de communication sans fil très adapté à l'embarqué de par sa simplicité d'utilisation. Pour plus d'information, vous pouvez consulter wikipedia.
Les modules utiisés sont des modules produits par MaxStream (appelé maintenant digi). Vous pouvez voir une liste de leurs produits sans fil ici. Le module utilisé au club robotique est le Xbee. Sa datasheet est attaché à cette page.
Vous pouvez retrouver les slides utilisés pour la présentation du jeudi 24 septembre ici.
| Fichier attaché | Taille |
|---|---|
| MaxStream-XB24-AWI-001.pdf | 1.08 Mo |
| Telecom_Robotics_Zigbee.odp | 353.42 Ko |
Vous disposez d'une carte contenant un module Xbee. Il faut alimenter cette carte pour que le module soit alimenté, pour cela branchez la carte sur une alimentation régulée (les grosses boites jaunes) et configurer pour un voltage d'environ 7V. (pas de limitation d'intensité).
Vérifiez en allumant l'alim que la LED près du conncteur d'alimentation fonctionne correctement.
Vous pouvez ensuite brancher le port série sur le connecteur rouge qui est relié au module Zigbee (pour ce travail, le microcontroleur des cartes ne sert à rien, il est soit reseté de force, soit débrancher du module Zigbee).
Dans un terminal tapez minicom -s et configurez comme ceci :
Puis vous enregistrez la configuration sous default.
Vous êtes en mesure d'envoyer des caractères sur le port série. Par défaut le module Xbee transmet ces caractères à l'adresse configurée dans son adresse de destination. Mais si on veut configurer le module Xbee, il faut le prévenir que l'on va lui envoyer des instructions à lui et non plus des caractères pour notre correspondant. Pour cela, envoyez '+++' par minicom, normalement le module Xbee doit répondre 'OK' ! Si ce n'est pas le cas, revérifiez vos paramètres de minicom et regardez si la carte est branchée correctement (la LED d'alimentation doit être allumée !).
Quand le module vous a répondu OK il est en mode configuration jusqu'à ce que vous quittiez ou attendiez 3 secondes sans taper de caractères.
Tapez maintenant la commande ATVR (ou ATVL pour avoir plus d'information) pour connaitre la version de votre module Xbee. La plupart des commandes Zigbee s'écrivent en 4 lettres commançant par 'AT', pour une commande on peut souvent l'appeler sans argument et le module vous répond (par exemple on tape ATMY sans argument pour avoir notre adresse) ou alors on l'appelle avec un argument pour configurer quelque chose (par exemple ATMY34B va mettre 0x34B comme adresse du module).
Pour pouvoir communiquer avec vos voisins, il faut au minimum configurer votre adresse (ATMY), l'adresse de destinatin (ATDL), l'ID du réseau (ATID) et le canal utilisé (ATCH). Vous aurez remarqué les commandes Xbee entre paranthèses... Pour plus d'informations, n'oubliez pas d'aller voir la datasheet (notamment vers la fin où se trouve une description de chaque commande).
Pour quitter le mode configuration, tapez ATCN . ou attendez 3 secondes (attention, le module ne prévient pas quand il sort du mode configuration tout seul).
Quand tout est configuré et que votre voisin est prêt, tapez simplement un message dans minicom pour qu'il apparaisse sur le minicom de votre voisin.
Bon courage.
Durant toute l'année, nous allons utiliser une gestionnaire de versions de sources pour tous nos programme. En gros, c'est un serveur sur lequel on met notre code et grâce auquel on peut travailler à plusieurs sur le même projet. Nous utilisons au club robotique Mercurial. Pour plus d'information, vous pouvez aller voir le tutorial.
Pour l'instant, ouvrez simplement un terminal et tapez (sans le $ :)
$ hg clone https://telrob@bitbucket.org/<wbr></wbr>telrob/xbee
Vous aurez ainsi un répertoire nommé "xbee" qui contient plusieurs choses.
$ cd xbee $ ls moreback moreback_todo simple_xbee simple_xbee_todo
On s'intéresse d'abord au programme "simple_xbee". Dans le répertoire "simple_xbee" se trouve le programme terminé et dans "simple_xbee_todo" se trouve le même programme auquel on a enlevé des parties de code et que vous devrez compléter. Ne regardez donc pas encore les sources de simple_xbee...
Tout d'abord pour vous prouver que ça marche, on va compiler le programme terminé et l'essayer. Ce programme va écouter le port série pour avoir des nombres et va répondre sur le port série ce nombre ajouté d'une certaine valeur qu'on lui donnera en ligne de commande.
$ cd simple_xbee $ ls Makefile offset.c receive.c send.c xbee.c xbee.h $ make gcc -g -Wall -c send.c -o send.o gcc -g -Wall -c xbee.c -o xbee.o gcc send.o xbee.o -o send gcc -g -Wall -c receive.c -o receive.o gcc receive.o xbee.o -o receive gcc -g -Wall -c offset.c -o offset.o gcc offset.o xbee.o -o offset
Comme c'est trop facile, on va le faire par zigbee en utilisant un protocole.
D'abord il faut savoir qui est le joueur 1 et qui est le joueur 2.
Pour savoir qui parle en premier, on va utiliser un système de poignée de main.
le premier module, ici nommé A envoie le message "55\n", puis écoute.
Si il reçoit "55\n", il décide qu'il est le joueur 1 et envoie "AA\n", si il reçoit "AA\n", il consifère qu'il est le joueur 2.
Le seconde module (B) envoie le message "55\n" puis écoute. Le joueur A a reçu "55\n", il est donc le joueur 1 et renvoi "AA\n".
Le joueur B reçoit ce mesage, il est donc le joueur 2.
Les joueurs jouen l'un après l'autre, le joueur 1 pause le premier pion
envoyer au joueur distant
WAADD\n
avec
AA : adresse de la case mémoire à écrire exprimé en hexa : par exemple 00 => première adresse mémoire, FF => dernière adresse mémoire
DD : Contenu de la case mémoire à écrire ( 01 pour le joueur 1, 02 pour le joueur 2)