Premiers résultats en sans-fil numérique 802.15.4

Le Zigbee, c’est une suite de protocoles qui sert à faire fonctionner des réseaux de capteurs intelligents.

Cette technologie, qui existe depuis déja quelques années, permet de mettre en place des réseaux de machines sans fil, à faible portée (quelques dizaines de mètres) et surtout à basse consommation, ce qui permet de les intégrer dans des appareils portables, fonctionnant sur pile. C’est une des technologies qui contribuent à mettre en place un internet des objets (internet of things), qui, comme son nom l’indique, tend à connecter entre eux les objets de notre vie quotidienne grâce à une technologie globale. Contrairement au bluetooth, qui est plutôt dédié à des connexions point à point, le 802.15.4 vise la mise en place de réseaux comportant un plus grand nombre de noeuds, une consommation encore plus réduite, et un faible volume de données à transmettre.

Le Zigbee lui même est un protocole bien spécifié et complet, mais assez complexe à mettre en place correctement.

En revanche, la technologie sur laquelle il s’appuie, la norme IEEE 802.15.4, est plus facile d’accès. Elle fait non seulement fonctionner le Zigbee, mais également un grand nombre de protocoles plus ou moins propriétaires (Miwi, JenNet, 6loWPAN).

Elle repose sur le principe des WPAN (wireless personal area network)  qui sont des réseaux locaux à faible portée. Chaque périphérique dispose d’une adresse, et peut envoyer et recevoir des messages de quelques dizaines d’octets (127 au total en prenant en compte les champs d’adresses et de contrôle).

En général un réseau est composé d’un coordinateur (similaire à un point d’accès wifi) et de périphériques connectés (comme des périphériques wifi). Le coordinateur peut s’annoncer à intervalles réguliers (en émettant des paquets balises – beacon) ou en réponse à une demande des périphériques.

Dans tous les cas, il est possible de faire en sorte que les périphériques utilisent un minimum d’énergie, car le coordinateur stocke les paquets en attente de délivrance aux périphériques, et ne les livre que quand les périphériques en font la demande, ce qui permet à ceux ci de dormir la majorité du temps, et de se réveiller périodiquement. Bien entendu la latence est importante, mais il faut se rappeler que nous sommes dans une optique “domotique” et “capteurs” et non “connexion haut débit à internet”.

Depuis quelques semaines je travaille sur ce sujet. J’utilise deux modules MRF24J40MA de Microchip. Ces modules sont très peu chers (8 euros l’unité) et se connectent par SPI à un microcontrôleur. Ils sont basés sur le circuit intégré MRF24J40 (errata). Pour mes essais, j’ai choisi un microcontrôleur que je connais bien, le PIC18F2620. J’ai réussi à faire un module très compact en soudant le PIC en dessous du module radio:

Module 802.15.4 en cours de câblage
Le module en cours de câblage, avec du fil à wrapper sur de la plaque percée
Module 802.15.4 terminé
Le module terminé

 

Ensuite il a fallu écrire du logiciel. Ce logiciel présente une console sur port série, permettant d’envoyer des commandes au module. J’ai passé un peu de temps à développer une UART fonctionnant par interruptions, ce qui me permettra de mettre le module en sommeil quand rien n’est tapé sur la console, et de réduire la consommation globale. Bon, en réception, le module consomme largement plus que le PIC!

J’ai ensuite commencé à implémenter les commandes indispensables au pilotage du module. Actuellement on peut:

  • Initialiser le module;
  • Définir les adresses courtes et longues, et le PAN ID;
  • Faire un scan d’énergie sur tous les canaux;
  • Se placer en mode “moniteur” (promiscuous) dans lequel tous les paquets reçus sont affichés;
  • Afficher l’état du module;
  • Envoyer un paquet arbitraire.
module console
La console de pilotage du module

J’ai perdu un peu de temps avec la réception en découvrant que les interruptions étaient activées en plaçant les bits du registre adéquat à zéro, au lieu de les mettre à 1, ce qui est contraire à toutes les autres conventions que j’ai déja rencontré.

La détection d’énergie ne semble pas fonctionner très correctement, très peu d’énergie est détectée par le module, ce qui laisse penser que soit je mesure pendant trop peu de temps, soit il y a un problème.

Laisser le module allumé pendant un moment se révèle également assez décevant, puisqu’ aucun paquet ne semble être reçu “par hasard”.

Avant d’aller plus loin j’ai composé un deuxième module, pour permettre le test de l’émission d’un coté, pendant que l’autre coté est en train de recevoir.

J’ai ensuite implémenté l’émission de paquets arbitraires, pour le moment sans aucune notion de protocole 802.15.4, et là surprise! J’ai bien vu mon paquet reçu sur l’autre carte! La transmission passe dans les deux sens.

packet exchange
Echange de paquets! Cliquez pour agrandir.

Voila pour le moment où j’en suis dans mes recherches sur ce protocole radio. Les points suivants à faire sont, dans l’ordre:

  • l’émission de paquets 802.15.4 “bien formés”, car j’ai remarqué que certains paquets que j’envoie, selon les valeurs des octets transmis, ne sont pas reçus
  • le scan actif, qui fait des demandes de balises sur tous les canaux. Je pourrai enfin savoir si d’autres équipements 802.15.4 sont présents dans l’atmosphère autour de moi!
  • l’implémentation de la couche MAC du protocole, qui permet de gérer les fonctions du “coordinateur” et les notions d’associations de périphériques, de vérifier la bonne réception des paquets avec des ACK
  • le codage d’un coordinateur complet!

Je vous tiendrai au courant avec d’autres articles.