11 Avril 2014
Arduino leçon 12 : la communication radio
"transceiver" est un mot-valise qui signifie transmitter-receiver soit en français émetteur-récepteur.

Présentation
Les transceivers NRF24L01 ne sont pas des périphériques spécifiques à Arduino. On les trouve pour de nombreuses applications.
Ci dessous, en vert un NRF24L01 et en noir un NRF24L01+


Installation
Divers membres de la communauté Arduino ont écrit des drivers pour ces transceivers.
On utilisera la bibliothèque "Mirf" mais il en existe d'autres.
On la récupère sur cette page :
http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01
On décompresse ce fichier et on place le répertoire "Mirf" dans le répertoire "librairie" de Arduino.

Branchements
Branchements de l'alimentation au transceiver
Ce transceiver fonctionne en 3 volts. Le brancher sur le +5 risque de le griller, mais il accepte 5V sur ses entrées logiques. On branche l'entrée VCC du transceiver sur la sortie 3.3 Volts de l'Arduino UNO ou 2009.
Le 3.3V fourni par l'Arduino Mega 2560 est de mauvaise qualité. On ne compte plus le nombre de journées perdues par les utilisateurs à cause de ce défaut, qui n'existe pas sur le 3.3V des cartes UNO ou 2009. |
Pour utiliser le transceiver avec une carte MEGA 2560, j'avais essayé de souder un condensateur au tantale sur l'entreé 3 volts
du transceiver. Ça allait mieux mais il y avait encore des ratées.
Finalement, j'ai acheté des régulateurs. J'ai choisi des plaquettes contenant un régulateur, des condensateurs, et un
potentiomètre de réglage de la tension de sortie.

Branchements du transceiver à l'Arduino
On branche 7 fils, le 8ème (IRQ) n'étant pas nécessaire pour notre application.

attention, les connecteurs sont sur la face opposée à celle visible ici et ils ne doivent jamais être mis dans une breadboard.
Le programme
Compte tenu de la complexité des fonctions, on évite de tout réécrire. On se contente de récupérer des programmes sur
le net et de les adapter à nos besoins.
J'ai adapté les programmes de DukeXtrem
les variables utilisées par la bibliothèque Mirf
Mirf.payload est le nombre d'octets utiles d'un message.
Mirf.RADDR, adresse de réception est une valeur de 5 octets qui nous identifie
Mirf.TADDR, adresse de transmission est une valeur de 5 octets qui identifie le destinataire de notre message.
Mirff.channel est un canal qui doit être le même pour l'émetteur et le récepteur.
Leurs noms commencent tous par "Mirf." pour les distinguer des variables d'autres bibliothèques.
explication de quelques fonctions de la bibliothèque
Mirf.init() et Mirf.config()
gèrent la configuration interne du processeur en fonction des variables qu'on a r
enseignées juste avant (numéros des broches par exemple ou RADDR...)
void Mirf.dataReady()
lit un flag qui est SET quand au moins un caractère est arrivé sur le buffer d'entrée.
Tant que ce flag est à 1, on a au moins un caractère à lire. Quand on les a tous lus,
le flag repasse à zéro. (RESET)
void getData(void)
récupère une donnée de "payload" octets.
Mirf.isSending()
lit un flag qui est SET pendant qu'on envoie des données. Il est RESET quand on n'a plus rien à envoyer.
Mirf.send()
envoie "payload" caractères depuis l'adresse passée en paramètres.
le programme client
Il envoie le message "Bonjour." toutes les 15 secondes.
Le reste du temps il attend une réponse.
Chaque seconde il affiche le nombre de secondes écoulées
Quand il reçoit une réponse il l'affiche
Il annonce "time out" s'il n'a rien reçu pendant les 15 secondes.
/*
|
le programme serveur
Il attend un message.
Quand il en reçoit un,
il l'affiche
il attend 3 secondes
il répond "Bonsoir."
il se remet à attendre.
/*
Serveur_11_Avril.ino
|
et voici le résultat sur les 2 moniteurs :


mauvais branchement
Si un transceiver est mal branché ou absent, Arduino reçoit (ou plutot croit recevoir) des données en permanence. Il s'agit soit de bits à 0 formant des octets de valeur 0 non affichables, soit des bits à 1 formant des octets de valeur 255 affichables sous forme de ÿ.
haut de la page
![]() |
page suivante : suite sur le transceiver
![]() |