Descripción
Los módulos NRF24L01 son sistemas transmisor/receptor a 2,4GHz (125 canales de 1MHz: 2,4GHz a 2,525GHz). Esta banda del espectro de la radiofrecuencia es libre de uso gratuito. Son capaces de transmitir a velocidad de entre 250kps y 2Mbps. Además, resulta posible conectar entre sí hasta 6 dispositivos. Incluye circuitería de corrección de errores (CRC) y reenvío de datos.
Atención: como las redes Wifi funcionan a 2,4GHz, es recomendable hacerlos funcionar en las bandas superiores, a partir de 2,5GHz.
El control del módulo se realiza a través del bus SPI y se alimenta entre 1.9V y 3.6 V (pines tolerantes a 5V).
El alcance teórico de este módulo, con antena integrada, es de unos 20m. Este mismo módulo se fabrica con antena externa y alta potencia, con un alcance teórico de unos 700m (NRF24L01+PA+LNA). Recuerda que los alcances reales se ven afectados por múltiples factores. La alimentación juega un papel muy importante; si deseamos los alcances máximos debe ser capaz de suministrar de forma estable corrientes de 250mA.
Dimensiones: 34 x 17 x 1 mm
Conexionado (UNO y NANO) – Ver imagen adjunta. En otros Arduino el SPI cambia de pines.
- GND del NRF24L01: al pin GND de Arduino
- VCC del NRF24L01: al pin 3V3 de Arduino
- CE del NRF24L01: al pin D9 de Arduino
- CNS del NRF24L01: al pin 10 de Arduino
- SCK del NRF24L01: al pin 13 de Arduino
- MOSI del NRF24L01: al pin 11 de Arduino
- MISO del NRF24L01: al pin 12 de Arduino
- IRQ: Sin conectar
Código de ejemplo (emisor):
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
// *** CONEXIONADO ***
#define CE_PIN 9
#define CSN_PIN 10
// El resto de pines son los propio del SPI, no hace falta definirlos aquí
byte direccion[5] ={'c','a','n','a','l'}; //Nombre para la dirección del canal por donde se va a transmitir
RF24 radio(CE_PIN, CSN_PIN); // Se crea el objeto con nombre "radio"
float datos[3]; //Cadena de datos a enviar
// *** CONFIGURACIÓN ***
void setup() {
radio.begin(); // Se inicializa el módulo
Serial.begin(9600); // Puerto serie a 9600bps (Monitor Serie)
radio.openWritingPipe(direccion); // Se abre el canal para escribir
}
// *** CÓDIGO PRINCIPAL ***
void loop() {
// Se cargan los valores en la variable "datos". Podrían ser cualquier información...
//... como la lectura de un sensor, una orden, etc.
datos[0]=123;
datos[1]=456;
datos[2]=789;
bool ok = radio.write(datos, sizeof(datos)); // Se envían los datos
//reportamos por el puerto serial los datos enviados
if(ok) { // Si la transmisión ha sido correcta, se muestran por el monitor serie los datos enviados
Serial.print("Datos enviados: ");
Serial.print(datos[0]); Serial.print(" , ");
Serial.print(datos[1]); Serial.print(" , ");
Serial.println(datos[2]);
} else {
Serial.println("*** no se ha podido enviar ***");
}
delay(2000); // Espera 2seg antes de repetir el proceso
}
Código de ejemplo (receptor):
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
// *** CONEXIONADO *** #define CE_PIN 9 #define CSN_PIN 10
// El resto de pines son los propio del SPI, no hace falta definirlos aquí
//Variable con la dirección del canal que se va a leer
byte direccion[5] ={'c','a','n','a','l'};
RF24 radio(CE_PIN, CSN_PIN); // Se crea el objeto con nombre "radio" float datos[3]; //Cadena de datos a enviar
// *** CONFIGURACIÓN ***
void setup() {
radio.begin(); // Se inicializa el módulo
Serial.begin(9600); // Puerto serie a 9600bps (Monitor Serie)
radio.openReadingPipe(1, direccion); // Se abre el canal para leer
radio.startListening(); // Se escucha por el canal, a la espera de datos
}
// *** CÓDIGO PRINCIPAL ***
void loop() {
if ( radio.available() ) {
//Leemos los datos y los guardamos en la variable datos[]
radio.read(datos,sizeof(datos)); // Se leen los datos recibidos y se guardan en "datos"
// Se muestran por el Monitor serie los datos recibidos
Serial.print("Dato 0= " );
Serial.print(datos[0]);
Serial.print("; ");
Serial.print("Dato 1= " );
Serial.print(datos[1]);
Serial.print("; ");
Serial.print("Dato 2= " );
Serial.println(datos[2]);
} else {
Serial.println("No hay datos disponibles");
}
delay(1000); // Espera de 1 seg antes de seguir escuchando
}











Valoraciones
No hay valoraciones aún.