Collegamento modulo wireless NRF24L01 Arduino

Il modulo radio nRF24L01+ per Arduino è uno dei moduli wireless più diffusi. Collegando nRF24L01+ 2.4G o nRF24L01+PA+LNA 2.4G ad Arduino Uno si ottiene una comunicazione wireless tra microcontrollori a una distanza massima di 100 metri. Vediamo come stabilire la comunicazione tra due schede Arduino tramite canale radio per trasmettere i dati del sensore di livello dell’acqua (water sensor) e inviare le informazioni al display LCD 1602.




Per questa attività sono necessari:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • 2 modulo wireless NRF24L01 2.4 GHz
  • sensore di livello acqua
  • display LCD 16×2 i2c
  • cavi di collegamento
  • librairia nRF24L01.h et LiquidCrystal_I2C.h

Modulo wireless NRF24L01+ 2.4 GHz datasheet, pinout

I moduli radio NRF sono poco costosi e possono essere utilizzati per organizzare una comunicazione multicanale sicura tra i dispositivi del microcontrollore Arduino. Con il sensore nrf24l01+ è possibile creare una comunicazione multicanale, cioè collegare in rete fino a 7 dispositivi che possono ricevere e inviare contemporaneamente un segnale. Trasmetteremo i dati di un sensore d’acqua, ma è possibile utilizzare qualsiasi sensore analogico o digitale.

Modulo nrf24l01+ 2.4 GHz pinout, datasheet
Modulo nrf24l01+ / nrf24l01+pa+lna 2.4 GHz pinout, datasheet

Caratteristiche del NRF24L01+ 2.4G Arduino:

  • Tensione di alimentazione: 3,3 V
  • Frequenza di trasmissione/ricezione: 2,4 GHz
  • Numero di canali: 126
  • Interfaccia: SPI
  • Distanza di trasmissione/ricezione: fino a 100 m, in interni fino a 30 m
  • Velocità di trasmissione: 250kbps, 1Mbps e 2Mbps
  • Sensibilità del ricevitore: -82 dBm
  • Guadagno dell’antenna (max): 2dBm

Caratteristiche del NRF24L01+PA+LNA 2.4G Arduino:

  • Tensione di alimentazione: 3,3 V
  • Frequenza di trasmissione/ricezione: 2,4 GHz
  • Numero di canali: 126
  • Interfaccia: SPI
  • Velocità di trasmissione: 2 MB a 520 metri, 1 MB a 750 metri, 250 Kb a 1000 metri
  • Potenza di uscita massima: +20dBm
  • Guadagno d’antenna (max): 2dBi

L’nRF24L01 è dotato di demodulatore, sintetizzatore di frequenza e amplificatore di segnale integrati. La portata del nrf24l01+ 2.4G è fino a 100 metri e, nella versione con amplificatore e antenna esterna nrf24l01+pa+lna 2.4G, fino a 1000 metri in linea di vista. Il modulo nrf può utilizzare 127 canali di comunicazione con frequenze di segnale da 2,4 GHz a 2,483 GHz. La velocità di connessione può essere impostata su 250 kbps, 1 Mbps o 2 Mbps.

Come collegare modulo wireless NRF24L01+ Arduino

Come usare modulo NRF24L01 con Arduino Uno
Come usare modulo wireless NRF24L01+ con Arduino Uno

È molto più facile impostare la comunicazione via radio se le schede Arduino sono collegate a computer o portatili diversi. In questo modo sarà molto più facile e veloce eseguire il debug del software per il ricevitore e il trasmettitore del segnale radio. Prima di trasmettere i dati sul canale radio, è meglio testare ciascun modulo nrf24l01 eseguendo una scansione delle frequenze, per assicurarsi che i moduli siano collegati e funzionino correttamente.

Programma Arduino per scansione a radiofrequenza nrf24l01




#include "SPI.h"
#include "nRF24L01.h"
#include "RF24.h"

RF24 radio(9,10);  // 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");
}

Spiegazione del codice per scansione a radiofrequenza nrf24l01 Arduino:



  1. il programma invia informazioni sul modulo nRF24L01+ alla porta seriale;
  2. di seguito è riportato un elenco di tutte le frequenze su cui opera il modulo. selezionare una frequenza per operare senza interferenze.

Comunicazione radio tra Arduino su NRF24L01+

Comunicazione radio tra Arduino su NRF24L01
Comunicazione radio tra le schede Arduino su NRF24L01+

Il modulo utilizza l’interfaccia SPI, quindi collegare il modulo nRF24L01 alle porte specificate del microcontrollore (Arduino Mega ha SPI su altre porte). Una scheda Arduino con il display deve essere impostata come ricevitore del segnale, mentre l’altro microcontrollore con il sensore dell’acqua deve essere impostato come trasmettitore. Dopo aver collegato i moduli wireless ad Arduino, caricare gli sketch corrispondenti nel ricevitore e nel trasmettitore.

Programma Arduino per il trasmettitore NRF24L01+PA+LNA

#include "SPI.h"
#include "nRF24L01.h"
#include "RF24.h"

const uint64_t pipe = 0xF0F1F2F3F4LL;
RF24 radio(9,10); // MEGA2560 radio(9,53);

void setup() {
  pinMode(A1, INPUT);
  Serial.begin(9600);
  radio.begin();
  radio.setChannel(0); // selezionare il canale radio (0 à 127)

  // velocità: RF24_250KBPS, RF24_1MBPS o RF24_2MBPS
  radio.setDataRate(RF24_1MBPS);
  // potenza: 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);
}

Spiegazione del codice per trasmettitore NRF24L01+PA+LNA 2.4G Arduino:

  1. pin 9 e 10 per il collegamento del modulo nRF24L01 possono essere modificate, così come il canale di comunicazione.
Ricevitore nRF24L01 e connessione LCD 1602 Arduino
Ricevitore nRF24L01 e connessione 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

Programma Arduino per ricevitore NRF24L01+PA+LNA

#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); // MEGA2560 radio(9,53);

void setup() {
  LCD.init();   LCD.backlight();
 
  Serial.begin(9600);
  radio.begin();
  radio.setChannel(0); // selezionare il canale radio (0 à 127)

  // velocità: RF24_250KBPS, RF24_1MBPS o RF24_2MBPS
  radio.setDataRate(RF24_1MBPS);
  // potenza: 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);
  }
}

Spiegazione del codice per ricevitore NRF24L01+PA+LNA 2.4G Arduino:

  1. se sul monitor della porta (sul display) non vengono visualizzati i dati del ricevitore, la prima cosa da fare è controllare che il trasmettitore sia collegato correttamente.

Conclusione. Oltre al complesso collegamento del nrf24l01 ad Arduino, il modulo richiede un’alimentazione di alta qualità. Pertanto, è necessario saldare un condensatore con una capacità massima di 10 µF alle porte di alimentazione: questo ridurrà il rumore nel circuito elettrico. Se avete controllato il collegamento, ma il modulo NRF si rifiuta di funzionare, il problema è nell’alimentazione o nell’assenza di un condensatore nel circuito.

5/5 - (1 vote)


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.