10 de julio de 2026 · 11 min
Estación meteorológica inalámbrica: sensor afuera, pantalla adentro
Un nodo exterior con DHT22 y NRF24L01 que transmite a un receptor con pantalla OLED y reloj DS3231. El proyecto perfecto para aprender radiofrecuencia — con el truco del capacitor que evita el 90% de las fallas.
Este proyecto es un favorito de Instructables y foros de todo el mundo, y es nuestro preferido para explicar comunicación por radio: un nodo con sensor de temperatura y humedad instalado afuera (galería, patio, invernadero) que transmite cada pocos segundos a un receptor adentro con pantalla OLED, hora y fecha. Sin WiFi, sin router, sin apps: radio pura de 2.4 GHz con alcance de 30–100 metros.
Los dos módulos del proyecto
Nodo exterior (transmisor): Arduino Nano + DHT22 + NRF24L01, alimentado con fuente USB o pilas. Base interior (receptor): Arduino Nano + NRF24L01 + OLED SSD1306 + RTC DS3231.
Lista de compra
| Componente | Cantidad | Para qué |
|---|---|---|
| Arduino Nano | 2 | Uno por nodo |
| NRF24L01 | 2 | La radio de 2.4 GHz |
| DHT22 | 1 | Temperatura y humedad |
| OLED SSD1306 128x64 I2C | 1 | La pantalla |
| RTC DS3231 | 1 | Hora y fecha con precisión |
| Capacitor electrolítico 10 µF | 2 | El héroe silencioso (leé abajo) |
| Cables dupont H-H | 1 juego |
El detalle que define el éxito: alimentar bien el NRF24L01
El NRF24L01 es el módulo con más fama injusta de “venir fallado”. La realidad: funciona a 3.3 V (¡no a 5 V!) y consume picos de corriente al transmitir que el regulador 3.3 V del Nano apenas banca. El resultado clásico: transmisiones que a veces llegan y a veces no, y un cliente convencido de que el módulo está roto.
La solución cuesta centavos: soldá (o enchufá) un capacitor de 10 µF directamente entre VCC y GND del módulo, lo más cerca posible de los pines. Ese capacitor entrega los picos que el regulador no llega a dar. Con eso, el 90% de los “NRF24 fallados” resucitan.
Conexionado
NRF24L01 → Nano (idéntico en ambos nodos):
- VCC → 3.3V (nunca 5 V) · GND → GND (+capacitor de 10 µF entre ambos)
- CE → pin 9 · CSN → pin 10
- SCK → pin 13 · MOSI → pin 11 · MISO → pin 12
Transmisor — DHT22: datos → pin 2, VCC → 5V, GND → GND.
Receptor — OLED y RTC (ambos I2C, comparten bus):
- SDA → A4 · SCL → A5 · VCC → 5V · GND → GND
Código del transmisor
Instalá las librerías RF24 (TMRh20), DHT sensor library (Adafruit) desde el gestor del IDE.
#include <SPI.h>
#include <RF24.h>
#include <DHT.h>
RF24 radio(9, 10); // CE, CSN
DHT dht(2, DHT22);
const byte DIRECCION[6] = "BYP01";
struct Paquete {
float temperatura;
float humedad;
};
void setup() {
dht.begin();
radio.begin();
radio.openWritingPipe(DIRECCION);
radio.setPALevel(RF24_PA_HIGH); // MAX si hay distancia
radio.setDataRate(RF24_250KBPS); // mas lento = mas alcance
radio.stopListening();
}
void loop() {
Paquete p;
p.temperatura = dht.readTemperature();
p.humedad = dht.readHumidity();
if (!isnan(p.temperatura)) {
radio.write(&p, sizeof(p));
}
delay(5000); // el DHT22 no da mas de una lectura cada 2 s
}
Código del receptor
Sumá Adafruit SSD1306, Adafruit GFX y RTClib.
#include <SPI.h>
#include <RF24.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>
RF24 radio(9, 10);
Adafruit_SSD1306 oled(128, 64, &Wire, -1);
RTC_DS3231 rtc;
const byte DIRECCION[6] = "BYP01";
struct Paquete {
float temperatura;
float humedad;
};
Paquete p = {0, 0};
void setup() {
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
rtc.begin();
// Descomenta UNA vez para poner en hora, despues volve a comentar:
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
radio.begin();
radio.openReadingPipe(0, DIRECCION);
radio.setPALevel(RF24_PA_HIGH);
radio.setDataRate(RF24_250KBPS);
radio.startListening();
}
void loop() {
if (radio.available()) {
radio.read(&p, sizeof(p));
}
DateTime ahora = rtc.now();
oled.clearDisplay();
oled.setTextColor(SSD1306_WHITE);
oled.setTextSize(1);
oled.setCursor(0, 0);
char linea[24];
snprintf(linea, sizeof(linea), "%02d/%02d/%04d %02d:%02d",
ahora.day(), ahora.month(), ahora.year(),
ahora.hour(), ahora.minute());
oled.print(linea);
oled.setTextSize(2);
oled.setCursor(0, 20);
oled.print(p.temperatura, 1);
oled.print(" C");
oled.setCursor(0, 44);
oled.print(p.humedad, 0);
oled.print(" %");
oled.display();
delay(500);
}
Errores comunes
- NRF24 a 5 V. Lo quema o lo deja inestable. VCC va al pin 3.3V del Nano.
- Sin el capacitor de 10 µF. Transmisión intermitente, alcance ridículo. Ponelo siempre.
- OLED que no arranca: la mayoría usa dirección I2C
0x3C, pero algunas vienen en0x3D. Si la pantalla queda negra, probá la otra. - DHT22 leyendo NaN: falta la resistencia pull-up de 10 kΩ en el pin de datos (los módulos con placa ya la traen; el sensor “pelado” no).
- Alcance pobre: alejá el NRF24 de los cables del motor/fuente, y usá
RF24_250KBPScomo en nuestro código — menos velocidad, más alcance.
Para llevarlo más lejos
- Sumá un DS18B20 sumergible al transmisor y medí también la temperatura de la pileta (guía de sensores).
- Un receptor puede escuchar hasta 6 transmisores: nodo en el invernadero, en el galpón y en la casa, una sola pantalla.
- ¿Preferís verlo en el celular? Reemplazá el receptor por un ESP32 que reciba por radio y sirva una página web.
Todo el proyecto en un pedido
Los dos Nano, las radios, el DHT22, la OLED, el RTC y hasta el capacitor de 10 µF: está todo en electronicabyp.com.ar con envío a toda Argentina. ¿Dudas del conexionado? Escribinos por WhatsApp — este proyecto lo conocemos de memoria.
¿Necesitás los componentes de esta guía? Los encontrás en electronicabyp.com.ar — hacemos envíos a toda Argentina. Para cotizaciones por cantidad, escribinos por WhatsApp.