NRF24L01: módulo para comunicación inalámbrica para Arduino

NRF24L01

Seguramente necesites crear algún proyecto DIY usando Arduino o cualquier otro elemento y tengas que hacer uso de comunicación inalámbrica. Y eso pasa por tener algún tipo de módulo o dispositivo que te permita transmitir usando IR, RF, Bluetooth, WiFi, etc. Es decir, debes tener claro cuáles son las necesidades para saber qué tipo de señal sería la más adecuada en tu caso.

En este caso tenemos una guía sobre el NRF24L01 para ti. Se trata de un chip de comunicación inalámbrica que te aportará lo que necesitas para enviar y recibir señales. El tipo de señales que maneja es RF o radiofrecuencia, es decir, ondas de gran longitud de onda, y por tanto de baja energía, que en el espectro electromagnético se sitúan entre 3 Hz y los 300 Ghz de frecuencia.

¿Qué es el NRF24L01?

NRF24L01

El NRF24L01 es un chip fabricado por Nordic Semiconductor. Si lo compras completo, el chip viene montado en un pequeño PCB con algunos elementos auxiliares que necesita, y por tanto componiendo un módulo. Lo puedes usar de varias formas, entre ellas conectándolo a Adruino como te mostraré más adelante.

NRF24L01, como se puede deducir de su nombre, es un dispositivo de comunicación inalámbrica que emplea RF o radiofrecuencia con capacidad de funcionar a 2,4Ghz – 2,5 Ghz. Esa es la banda libre para uso gratuito. Ya sabes que otras bandas están reservadas y hay que pagar si quieres usarlas para transmitir información. Además, integra un transmisor + un receptor.

Concretamente, la banda de frecuencia que puedes usar es de 2.400 Mhz a 2.525Mhz, con la posibilidad de seleccionar entre 125 canales con espacios de 1Mhz entre ellos. No obstante, no es recomendable usar frecuencias de 2.4Ghz si estás usando redes WiFi, drones que funcionen con esta frecuencia, etc., o habrá interferencias. Por eso es preferible usar desde 2.501Mhz en adelante.

En cuanto a sus características, funciona de 1.9 a 3.6v, por lo que te será fácil alimentarlo con la propia placa Arduino con la conexión de 3.3, usando pilas, e incluso con alguna fuente de alimentación que de ese voltaje. Además, puedes configurar la velocidad de transmisión entre 250 Kbps, 1Mbps y hasta 2Mbps.

El chip en las emisiones y recepciones puede trabajar de forma simultánea con hasta 6 conexiones de varios dispositivos. Con eso podrás estar emitiendo o recibiendo desde diferentes puntos sin problema alguno. Y si te preocupa la robustez o fiabilidad de la comunicación, el propio chip tiene una circuitería lógica para corregir errores de datos y reenviar información si fuese necesario. Por tanto, libera al procesador de esta tarea.

Para controlarlo se puede usar el bus SPI, por lo que su control con Arduino es muy sencillo. Además, los pines de datos del NRF24L01 soportan hasta 5v sin problemas. El consumo eléctrico en Stand By es bastante bajo, por lo que no supondrá un elemento del que preocuparse, y cuando está en funcionamiento tampoco es de los más gastones, ya que solo necesita 15mA para el envío y recepción de datos.

En el mercado encontrarás varios módulos diferentes que montan el chip NRF24L01, cambian solamente en los elementos auxiliares que tienen o en algunos detalles. Por ejemplo en el tipo de antena. Algunos tienen una antena impresa en el PCB en forma de zig-zag con un alcance de unos 20-30 metros. Otras admiten una antena externa algo más potente con un amplificador para llegar de los 700 metros hasta 1 km.

No obstante, el alcance real está limitado por algunos factores, como los obstáculos del camino, el ruido o interferencias de otros elementos o señales presentes, la velocidad de transmisión, el voltaje de alimentación (a mayor voltaje, mayor distancia), etc. Por ejemplo, si quieres transmitir a la máxima velocidad de 2Mbps eso tendrá una gran penalización en la distancia, que será de tan solo 2 o 3 metros máximo. A velocidades inferiores puede que puedas ir escalando esa distancia.

Artículo relacionado:
ESP8266: el módulo WIFI para Arduino

¿Qué necesitas saber antes de comprarlo?

Antena del NRF40L01

El NRF24L01 es un chip muy barato que se puede usar en multitud de proyectos. Por ejemplo, si no cuenta con antena externa, lo puedes comprar hasta por unos 0.65€, siendo el modelo de antena externa el que es un poco más caro que éste pero sigue siendo muy barato y no suele superar los 1.7€.

Si no cuentas con otro elemento de emisión o recepción, ya sabes que debes comprar dos módulos NRF24L01, uno para usar en un lado y el otro en el otro lado de donde quieras trasmitir. Ambos actuarán como emisior o receptor según quieras.

Pinout y montaje del NRF24L01

pinout NRF40L01

En cuanto al montaje, es bastante sencillo. El NRF24L01 tiene 8 pines, por tanto su pinout es muy fácil de entender como puedes ver en esta imagen que te dejo. A la derecha puedes ver el diagrama de pines de una placa Arduino UNO y cómo se conectaría a ella cada uno de los pines del módulo.

Como puedes deducir, la placa NRF24L01 se alimenta usando los pines GND y 3.3v de Arduino. Recuerda no hacerlo con la señal de 5v o dañarías el módulo.

Integración con Arduino

2 NRF24L01 con Arduino (circuito)

Una vez ya conoces qué es el NRF24L01 y cómo se puede conectar y alimentar, además de la cantidad de proyectos que puedes hacer con un par de estos baratos dispositivos, lo siguiente es mostrar un ejemplo de programación para que puedas comenzar a experimentar con tu Arduino IDE. Recuerda que el formato de datos que puedes transmitir lo puedes modificar en el código fuente.

Artículo relacionado:
L298N: módulo para controlar motores para Arduino

Puedes elegir enviar y recibir un string o cadena de caracteres, un entero, un dato en coma flotante, etc. Te recomiendo nuestra guía sobre programación de Arduino si estás comenzando. Con ella podrás crear tus primeros proyectos. Y como ejemplo concreto para el NRF24L01, aquí te dejo los códigos necesarios para un string.

Código que debes escribir en Arduino IDE y programar la placa Arduino conectada al NRF24L01 que vayas a destinar como emisor:

#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>
 
const int pinCE = 9;
const int pinCSN = 10;
RF24 radio(pinCE, pinCSN);
 
// Single radio pipe address for the 2 nodes to communicate.
const uint64_t pipe = 0xE8E8F0F0E1LL;
 
char data[16]="Aquí tu mensaje" ;
 
void setup(void)
{
   radio.begin();
   radio.openWritingPipe(pipe);
}
 
void loop(void)
{
   radio.write(data, sizeof data);
   delay(1000);
}

Aquí el código que tienes que introducir en Arduino IDE y grabar en la placa que hayas conectado al NRF24L01 dedicada como receptor:

#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>

const int pinCE = 9;
const int pinCSN = 10;
RF24 radio(pinCE, pinCSN);

// Single radio pipe address for the 2 nodes to communicate.
const uint64_t pipe = 0xE8E8F0F0E1LL;

char data[16];

void setup(void)
{
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}

void loop(void)
{
if (radio.available())
{
int done = radio.read(data, sizeof data);
Serial.println(data);
}
}

Con eso tendrás todo lo necesario y podrás probar a enviar palabras o cadenas de texto de uno y ver cómo los recibe el otro. Usa dos ordenadores conectados por USB a la placa Arduino para usar la consola como medio para ver los datos. Sepáralos una distancia prudente según el módulo que tengas o la configuración que le hayas dado y comenzarás a ver en la pantalla del otro ordenador los caracteres que has introducido en el primer código…


Sé el primero en comentar

Deja tu comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.