Cómo conectar módulo inalámbrico nRF24L01 Arduino

El módulo nRF24L01 Arduino es uno de los módulos inalámbricos más populares para el Internet de las Cosas. La conexión del módulo nRF24L01 a un Arduino permitirá la comunicación inalámbrica entre los Arduinos a una distancia de hasta 100 metros. Vamos a ver cómo establecer la comunicación entre dos Arduinos en el canal de radio para transmitir los datos de un sensor de agua y la salida de la información a la pantalla lcd.

Para esta actividad necesitaremos:

  • dos Arduino Uno / Arduino Nano / Arduino Mega
  • dos módulo de radio nRF2401;
  • sensor de nivel de agua;
  • LCD 16×02 i2c (no se puede utilizar);
  • cables de conexion;
  • librerías nRF24L01.h y LiquidCrystal_I2C.h

Módulo transceptor nRF24L01 datasheet, pinout

Los módulos de radio nRF2401 son baratos y permiten organizar una comunicación multicanal segura entre dispositivos Arduino. El nRF24o1 se puede utilizar para crear una comunicación multicanal, es decir, se pueden enlazar en una red hasta 7 dispositivos que pueden recibir y enviar simultáneamente una señal de radio. Transmitiremos los datos de un sensor de nivel de agua, pero puede utilizarse cualquier sensor analógico.

Modulo de radio nRF2401 Arduino pinout, datasheet
Como funciona la comunicacion nfr24l01 pinout, datasheet

Características modulo nRF2401+ Arduino:

  • Alimentación: 1.9V a 3.6V
  • Consumo: Transmisión: 11.3mA, recepción: 13.5mA
  • Frecuencia: ISM 2.4 GHz
  • Control de datos: SPI
  • Velocidad: 250kbps, 1Mbps y 2Mbps (configurable)
  • 100 metros en espacios abiertos

El módulo de radio nRF24L01 incorpora un demodulador, un sintetizador de frecuencia y un amplificador de señal. El alcance del nrf24l01+ es de hasta 100 metros, y en la versión con amplificador y antena, de hasta 1000 metros en línea de visión. El módulo puede utilizar 127 canales de comunicación con frecuencias de señal que van de 2,4 GHz a 2,483 GHz. La velocidad de la conexión inalámbrica puede ajustarse a 250 kbps, 1Mbps o 2Mbps.

Conectar módulo inalámbrico nRF24L01 Arduino

Conexión módulo inalámbrico nRF24L01 Arduino
Conexión módulo inalámbrico nRF24L01 Arduino

Es mucho más fácil transmitir datos por radio si las placas Arduino están conectadas a un ordenador o portátil independiente. Entonces será mucho más fácil y rápido editar el programa para el receptor y el transmisor. Antes de transmitir datos por el canal de radio a través del nRF24L01+, es mejor probar cada módulo escaneando las frecuencias para asegurarse de que los módulos están correctamente conectados y funcionan.

Programa Arduino para módulo de radio nRF24L01

#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");
}

Explicación del código para escaneo por radiofrecuencia:

  1. el programa envía información sobre el módulo nRF24L01+ al puerto serie;
  2. a continuación encontrará una lista de todas las frecuencias en las que funciona el módulo de radio. Seleccione una frecuencia para funcionar sin interferencias.

Programa para transmisor y receptor inalámbricos

El módulo nRF24L01+ utiliza la interfaz SPI, así que conecta el módulo nRF24L01 a puertos específicos del microcontrolador (recuerda que Arduino Mega tiene SPI en otros puertos). Una placa Arduino con la pantalla LCD debe configurarse como receptor de la señal y el otro microcontrolador con el sensor de agua como transmisor. Tras conectar los módulos inalámbricos al microcontrolador, carga los programas correspondientes.

Conectar transmisor inalámbricos nRF24L01 Arduino
Cómo conectar transmisor inalámbricos nRF24L01 Arduino

Programa para transmisor inalámbricos 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 или 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);
}

Explicación del código para transmisor inalámbricos nRF24L01:

  1. los datos son enviados por el emisor a través del canal de radio una vez por segundo;
  2. se pueden cambiar los puertos 9 y 10 para la conexión del módulo transmisor inalámbricos nRF24L01, así como el canal de comunicación.
Conectar receptor inalámbricos nRF24L01 Arduino
Cómo conectar receptor inalámbricos nRF24L01 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

Programa para receptor inalámbricos 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 или 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);
  }
}

Explicación del código para receptor inalámbricos nRF24L01:

  1. si no aparecen datos del receptor en el monitor del puerto (en la pantalla), lo primero que hay que hacer es comprobar que el transmisor está correctamente conectado.

Conclusión. Aparte del complicado cableado del receptor inalámbricos nrf24l01 al Arduino, el módulo consume mucha energía (como se indica en muchos sitios web). Por lo tanto, deberías soldar un condensador de hasta 10µF a los puertos de alimentación del módulo (GND y VCC) – esto reducirá las interferencias. Si has descargado el código de esta página, pero el módulo se niega a funcionar, es la fuente de alimentación módulo.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *