Transmetteur sans fil nRF24L01+
Matériel testé : nRF24L01+
Bibliothèques : (installation via le gestionnaire de bibliothèques de l’IDE Arduino)
Description
Ce module de transmission, basé sur un nRF24L01+, permet de réaliser une liaison sans fil 2,4 GHz entre deux microcontrôleurs. Il communique avec le microcontrôleur via le bus SPI.
Une tension supérieure endommagerait le module.
Caractéristiques :
- Alimentation : 3,3 Vcc
- Tension entrées/sorties : 0 à 3,3 V ou 5 V
- Fréquence : 2,4 GHz
- Vitesse : 250 kbps, 1 Mbps ou 2 Mbps
- Faible consommation
- Transmetteur : +7 dB
- Récepteur : -90 dB
- Portée : jusqu’à 50 mètres en terrain dégagé
- Dimensions : 29 x 15 m
Câblage
En plus des ports SPI, le nRF24L01+ possède :
- un port CE : une entrée pour contrôler l’émission et la réception
- un port IRQ : pour envoyer une interruption à l’Arduino (optionnel)


Programmation
Avec la bibliothèque NRFLite
Les programmes suivants permettent d’envoyer un message constitué d’un unique caractère.
Émetteur
/*
Transmission d'un unique caractère (envoi)
(Basé sur l'exemple Basic_TX)
*/
#include "SPI.h"
#include "NRFLite.h"
const static uint8_t RADIO_ID = 1; // Identifiant de l'émetteur
const static uint8_t DESTINATION_RADIO_ID = 0; // Identifiant du récepteur
const static uint8_t PIN_RADIO_CE = 9;
const static uint8_t PIN_RADIO_CSN = 10;
NRFLite _radio;
char message = 'y'; // variable contenant le caractère à envoyer
void setup()
{
Serial.begin(115200);
if (!_radio.init(RADIO_ID, PIN_RADIO_CE, PIN_RADIO_CSN))
{
Serial.println("Cannot communicate with radio");
while (1);
}
}
void loop()
{
Serial.print("Envoi : ");
Serial.print(message);
if (_radio.send(DESTINATION_RADIO_ID, &message, sizeof(message)))
{
Serial.println(" ...Succes");
}
else
{
Serial.println(" ...Echec");
}
delay(1000);
}
Récepteur
/*
Transmission d'un unique caractère (réception)
(Basé sur l'exemple Basic_RX)
*/
#include "SPI.h"
#include "NRFLite.h"
const static uint8_t RADIO_ID = 0; // Identifiant du récepteur
const static uint8_t PIN_RADIO_CE = 9;
const static uint8_t PIN_RADIO_CSN = 10;
NRFLite _radio;
char message; // la variable contenant le caractère à recevoir
void setup()
{
Serial.begin(115200);
if (!_radio.init(RADIO_ID, PIN_RADIO_CE, PIN_RADIO_CSN))
{
Serial.println("Cannot communicate with radio");
while (1);
}
}
void loop()
{
while (_radio.hasData()) // Attente de réception d'un caractère
{
_radio.readData(&message);
Serial.print("Reception : ");
Serial.println(message);
}
}
Avec une NRFLite et une interruption
Afin d’éviter une lecture en continue et améliorer la synchronisation des deux microcontrôleurs, on peut utiliser une interruption : la réception d’un message interrompt le récepteur pour exécuter une action.
Émetteur
Récepteur

