Module télécommande nrf24l01 Arduino

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:

  1. Communication par nRF24L01 entre deux Arduino
  2. Branchement écran LCD 1602 i2c avec Arduino
  3. Branchement capteur de niveau d’eau avec Arduino

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é.

Module nrf24l01 pinout, datasheet
Module télécommande nrf24l01 pinout, datasheet

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

Connecter module nrf24l01 à l'Arduino
Schéma pour connecter un module nrf24l01 à l’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:

  1. le programme émet des informations sur le module nRF24L01+ sur le port série;
  2. 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

Branchement nRF24L01 et capteur d’eau Arduino
Branchement émetteur nRF24L01 et capteur d’eau Arduino

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:

  1. les ports 9 et 10 pour la connexion du module nRF24L01 peuvent être modifiés, de même que le canal de communication.
Branchement nRF24L01 et LCD 1602
Branchement récepteur nRF24L01 et LCD 1602 Arduino
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:

  1. les données du port A1 sont envoyées par l’émetteur via le canal radio une fois par seconde;
  2. 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.





2 Replies to “Branchement module nrf24l01 Arduino datasheet, pinout”

  1. bonjour,
    quelle est l’utilité de cette instruction et à quoi correspond ce code ?
    const uint64_t pipe = 0xF0F1F2F3F4LL;
    merci

    1. Il s’agit de l’identifiant de la transmission par le signal radio. Il doit être identique pour le récepteur et l’émetteur.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. Découvrez comment les données de vos commentaires sont traitées.