El módulo NRF24L01 de Nordic Semiconductor permite comunicación inalámbrica de 2.4 GHz entre microcontroladores con un alcance de hasta 100 metros en interiores y más de 1 km con la versión de antena externa. Es la solución ideal cuando WiFi o Bluetooth son excesivos para la aplicación.
Versiones del NRF24L01
| Versión | Antena | Alcance interior | Alcance exterior |
|---|---|---|---|
| NRF24L01 básico | Chip integrada | ~30-100 m | ~100 m |
| NRF24L01+PA+LNA | SMA externa | ~200 m | ~1 km |
Conexión SPI al Arduino Uno
| NRF24L01 | Arduino Uno |
|---|---|
| VCC | 3.3V (¡nunca 5V!) |
| GND | GND |
| CE | Pin 9 |
| CSN | Pin 10 |
| SCK | Pin 13 |
| MOSI | Pin 11 |
| MISO | Pin 12 |
Importante: el NRF24L01 opera a 3.3V. Agrega un condensador de 10µF entre VCC y GND del módulo — soluciona el 90% de los problemas de conexión inestable.
Código Transmisor
#include <SPI.h>
#include <RF24.h>
RF24 radio(9, 10); // CE, CSN
const byte CANAL[] = "00001"; // Mismo en TX y RX
void setup() {
radio.begin();
radio.openWritingPipe(CANAL);
radio.setPALevel(RF24_PA_LOW);
radio.stopListening(); // Modo transmisor
}
void loop() {
const char mensaje[] = "Hola desde TX";
bool ok = radio.write(&mensaje, sizeof(mensaje));
delay(1000);
}
Código Receptor
#include <SPI.h>
#include <RF24.h>
RF24 radio(9, 10);
const byte CANAL[] = "00001";
void setup() {
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, CANAL);
radio.setPALevel(RF24_PA_LOW);
radio.startListening(); // Modo receptor
}
void loop() {
if (radio.available()) {
char texto[32] = "";
radio.read(&texto, sizeof(texto));
Serial.println(texto);
}
}
Aplicaciones
- Red de sensores: varios Arduinos reportan temperatura a un nodo central
- Control remoto de largo alcance: joystick en un Arduino controla un robot en otro
- Comunicación entre pisos: donde el WiFi no llega bien
- Telemetría de vehículos RC: velocidad, batería y posición en tiempo real