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).
Este módulo incorpora un amplificador de potencia (PA: Power Amplifier) y filtro (Low Noise Amplifier); lo que, junto a la antena externa, le da un alcance extraordinario. El alcance teórico de este módulo, con antena externa, es de unos 700m. Este mismo módulo se fabrica con antena interna y reducida potencia, con un alcance teórico de unos 20m (NRF24L01). 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.
Antena incluida.
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
- CSN 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
- IQR: 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.