SOMMAIRE ►
Module télécommande nRF24L01 est l’un des modules sans fil les plus populaires pour l’Internet des objets. La connexion du module nRF24L01 à un Arduino permettra une communication sans fil entre les microcontrôleurs jusqu’à 100 mètres de distance. Voyons comment établir la communication entre deux Arduinos sur le canal radio pour transmettre les données d’un capteur d’eau et sortir les informations sur l’écran ou sur le port série.
Pour cette activité, nous aurons besoin:
- deux Arduino Uno / Arduino Nano / Arduino Mega
- deux modules télécommande nrf24lo1
- capteur de niveau d’eau
- LCD 16×02 i2c (ne peut être utilisé)
- fils de connexion
- librairies nRF24L01.h et LiquidCrystal_I2C.h
Matériel supplémentaire sur ce sujet:
Datasheet nRF24L01 module transceiver sans fil
Ces modules sont peu coûteux et peuvent être utilisés pour organiser une communication sécurisée multicanaux entre les contrôleurs et les appareils Arduino. Avec le nrf24l01, vous pouvez créer une communication multicanal, c’est-à-dire que vous pouvez mettre en réseau jusqu’à 7 appareils qui peuvent recevoir et envoyer un signal en même temps. Nous allons transmettre les données d’un capteur d’eau, mais tout capteur analogique peut être utilisé.

Caractéristiques nRF24L01 module
- Alimentation: 3,3 V
- Consommation: émission – 11,3 mA, réception – 13,5 mA
- Fréquence: 2,4 GHz
- Vitesse: 250 kbps, 1 Mbps ou 2 Mbps
- Transmetteur: +7 dB
- Récepteur: -90 dB
- Portée: jusqu’à 100 mètres en terrain dégagé
Le nRF24L01 possède un démodulateur, un synthétiseur de fréquence et un amplificateur de signal intégrés. La portée du module Arduino nrf24l01+ peut atteindre 100 mètres, et dans la version avec amplificateur et antenne, jusqu’à 1000 mètres en visibilité directe. Le module peut utiliser 127 canaux de communication avec des fréquences de signal allant de 2,4 GHz à 2,483 GHz. La vitesse de la connexion sans fil peut être réglée à 250 kbps, 1Mbps ou 2Mbps.
Branchement nRF24L01 module avec Arduino

Il est beaucoup plus facile de transférer des données sur le canal radio si les cartes Arduino sont connectées à un ordinateur séparé ou à un ordinateur portable. Il sera alors beaucoup plus facile et rapide de déboguer le croquis. Avant de transmettre des données sur le canal radio via le nRF24L01+, il est préférable de vérifier chaque module en balayant les fréquences – vous serez alors sûr que les modules sont correctement connectés et fonctionnent.
Programme Arduino balayage par radiofréquence
#include "SPI.h" #include "nRF24L01.h" #include "RF24.h" RF24 radio(9,10); // pour MEGA2560 radio(9,53); const uint8_t num_channels = 128; uint8_t values[num_channels]; int serial_putc( char c, FILE * ) { Serial.write( c ); return c; } void printf_begin(void) { fdevopen( &serial_putc, 0 ); } void setup(void) { Serial.begin(9600); printf_begin(); radio.begin(); radio.setAutoAck(false); radio.startListening(); radio.printDetails(); delay(10000); radio.stopListening(); int i = 0; while ( i < num_channels ) { printf("%x",i>>4); ++i; } printf("\n\r"); i = 0; while ( i < num_channels ) { printf("%x",i&0xf); ++i; } printf("\n\r"); } const int num_reps = 100; void loop(void) { memset(values, 0, sizeof(values)); int rep_counter = num_reps; while (rep_counter--) { int i = num_channels; while (i--) { radio.setChannel(i); radio.startListening(); delayMicroseconds(128); radio.stopListening(); if ( radio.testCarrier() ) ++values[i]; } } int i = 0; while ( i < num_channels ) { printf("%x", min(0xf, values[i] & 0xf)); ++i; } printf("\n\r"); }
Explication du code pour balayage par fréquence:
- le programme émet des informations sur le module nRF24L01+ sur le port série;
- vous trouverez ci-dessous une liste de toutes les fréquences sur lesquelles le module fonctionne? sélectionnez une fréquence pour fonctionner sans interférence.
Programme Arduino pour émetteur et récepteur sans fil

Le module utilise l’interface SPI, donc connectez le module nRF24L01 à des ports spécifiques sur le microcontrôleur (n’oubliez pas que Arduino Mega a SPI sur d’autres ports). Une carte Arduino avec l’afficheur LCD doit être configurée comme un récepteur de signaux et l’autre microcontrôleur avec le capteur d’eau comme un émetteur. Après avoir connecté les modules sans fil au microcontrôleur, chargez les programmes correspondants.
Programme pour émetteur sans fil nRF24L01:
#include "SPI.h" #include "nRF24L01.h" #include "RF24.h" const uint64_t pipe = 0xF0F1F2F3F4LL; RF24 radio(9,10); // pour MEGA2560 radio(9,53); void setup() { pinMode(A1, INPUT); Serial.begin(9600); radio.begin(); radio.setChannel(0); // sélectionner le canal radio (0 à 127) // vitesse: RF24_250KBPS, RF24_1MBPS ou RF24_2MBPS radio.setDataRate(RF24_1MBPS); // puissance: RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM radio.setPALevel(RF24_PA_HIGH); radio.openWritingPipe(pipe); radio.stopListening(); } void loop() { int data = analogRead(A1); radio.write(&data, sizeof(data)); Serial.print("data: "); Serial.println(data); delay(1000); }
Explication du code pour module nRF24L01 émetteur sans fil:
- les ports 9 et 10 pour la connexion du module nRF24L01 peuvent être modifiés, de même que le canal de communication.

| LCD 1602 i2c | Arduino Uno | Arduino Nano | Arduino Mega |
| GND | GND | GND | GND |
| VCC | 5V | 5V | 5V |
| SDA | A4 | A4 | 20 |
| SCL | A5 | A5 | 21 |
Programme pour récepteur sans fil nRF24L01:
#include "Wire.h" #include "LiquidCrystal_I2C.h" LiquidCrystal_I2C LCD(0x27, 16, 2); // définit lcd 16 x 2 #include "SPI.h" #include "nRF24L01.h" #include "RF24.h" const uint64_t pipe = 0xF0F1F2F3F4LL; RF24 radio(9,10); // pour MEGA2560 radio(9,53); void setup() { LCD.init(); // initialisation de l'afficheur LCD.backlight(); Serial.begin(9600); radio.begin(); radio.setChannel(0); // sélectionner le canal radio (0 à 127) // vitesse: RF24_250KBPS, RF24_1MBPS ou RF24_2MBPS radio.setDataRate(RF24_1MBPS); // puissance: RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM radio.setPALevel(RF24_PA_HIGH); radio.openReadingPipe(1, pipe); radio.startListening(); } void loop() { int data; if (radio.available()) { radio.read(&data, sizeof(data)); Serial.print("data: "); Serial.println(data); LCD.setCursor(0, 0); LCD.print("data: "); LCD.print(data); } }
Explication du code pour module nRF24L01 récepteur sans fil:
- les données du port A1 sont envoyées par l’émetteur via le canal radio une fois par seconde;
- si aucune donnée du récepteur n’est affichée sur le moniteur de port (sur l’afficheur), la première chose à faire est de vérifier que l’émetteur est correctement connecté.
Conclusion. En dehors du câblage compliqué du nrf24l01 à l’Arduino, le module est gourmand en énergie (comme indiqué sur de nombreux sites web). Par conséquent, vous devriez souder un condensateur jusqu’à 10µF aux ports d’alimentation du module (GND et VCC) – cela réduira les interférences. Si vous avez vérifié la connexion et téléchargé le code de cette page, mais que le module refuse de fonctionner, c’est qu’il s’agit de l’alimentation électrique.








bonjour,
quelle est l’utilité de cette instruction et à quoi correspond ce code ?
const uint64_t pipe = 0xF0F1F2F3F4LL;
merci
Il s’agit de l’identifiant de la transmission par le signal radio. Il doit être identique pour le récepteur et l’émetteur.