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