Imagina esta escena: es la hora de ir a dormir y, antes de apagar la luz, tu hija mira la lámpara de su mesilla. Brilla en azul suave. Sin decir nada, ya sabe que mañana va a llover y que toca dejar preparado el paraguas. Sin pantallas, sin aplicaciones y sin preguntarle a nadie. Eso es exactamente lo que vamos a construir hoy: una lámpara inteligente ESP32 para niños que se conecta a internet, consulta el tiempo y cambia de color según la previsión.
Es uno de esos proyectos IoT sencillos en casa que se pueden terminar en una tarde de fin de semana, que cuestan menos que un juguete de tienda y que, además, enseñan electrónica, programación y meteorología a la vez. Si buscáis experimentos de robótica familiar que acaben convertidos en algo útil para el día a día, este es vuestro proyecto.
Por qué este proyecto encanta a pequeños y mayores
La mayoría de los kits de iniciación terminan con un LED que parpadea y poco más. Está bien para empezar, pero los niños enseguida preguntan: «¿y esto para qué sirve?». Aquí la respuesta es inmediata. La lámpara tiene una utilidad real, se queda en su habitación y la usan cada noche. Eso convierte el aprendizaje en algo que se ve, se toca y se presume delante de los amigos.
Además, el proyecto toca muchas áreas a la vez, en la línea de lo que proponen programas educativos como Arduino Education:
- Electrónica básica: qué es la alimentación, la masa (GND) y una señal de datos.
- Programación: variables, condiciones «si pasa esto, haz aquello» y bucles.
- Internet de las cosas (IoT): cómo un objeto cotidiano puede pedir información a un servidor.
- Ciencia: interpretar códigos meteorológicos y relacionarlos con lo que vemos por la ventana.
- Diseño y manualidades: crear la pantalla de la lámpara con materiales reciclados.
¿Queréis más ideas para aprender robótica en familia? Descubrid cursos, kits y proyectos guiados pensados para Maker Kids.
Cómo funciona la lámpara del tiempo
El cerebro del proyecto es una placa ESP32, un microcontrolador muy parecido a un Arduino pero con WiFi integrado. Cada 15 minutos, la placa se conecta a la red de casa y le pregunta a Open-Meteo, un servicio meteorológico gratuito que no necesita registro ni claves, qué tiempo hará. El servicio responde con un número (el código meteorológico) y el programa traduce ese número a un color. Por último, un anillo de LEDs RGB se ilumina con un suave efecto de «respiración», ideal para dormir.
Hemos añadido un truco que a las familias les encanta: la lámpara puede mostrar el tiempo de mañana en lugar del actual. Así, por la noche, sirve como recordatorio para preparar la ropa adecuada, el chubasquero o la gorra para el sol.
Materiales que necesitáis
Todo el material se encuentra fácilmente en tiendas de electrónica y el coste total ronda los 15 a 25 euros, según dónde compréis:
- Placa ESP32 DevKit (cualquier modelo con WiFi, por ejemplo la ESP32-WROOM-32).
- Anillo de LEDs WS2812B (también llamados NeoPixel) de 12 o 16 LEDs. Si es posible, compradlo con los cables ya soldados.
- Tres cables dupont hembra-hembra o macho-hembra, según vuestra placa.
- Una resistencia de 330 Ω para proteger la línea de datos.
- Un condensador de 1000 µF (opcional, estabiliza la alimentación del anillo).
- Cable USB y un cargador de móvil de 5 V.
- Una pantalla para la lámpara: un tarro de cristal, una bola de papel, un bote de yogur blanco o una pieza impresa en 3D.
Paso 1: preparar el ordenador
Vamos a programar el ESP32 con el entorno gratuito Arduino IDE, el mismo que se usa en muchos colegios. Si no lo tenéis instalado, descargadlo desde la web oficial de Arduino y seguid estos pasos:
- Abrid Archivo > Preferencias y, en «Gestor de URLs adicionales de tarjetas», pegad esta dirección:
https://espressif.github.io/arduino-esp32/package_esp32_index.json - Id a Herramientas > Placa > Gestor de tarjetas, buscad «esp32» e instalad el paquete de Espressif Systems.
- En Programa > Incluir librería > Administrar bibliotecas, instalad Adafruit NeoPixel y ArduinoJson (versión 7).
- Seleccionad la placa ESP32 Dev Module en el menú Herramientas y el puerto USB correspondiente.
Este es un buen momento para que los peques sean quienes hagan clic y lean los menús en voz alta. Parece poca cosa, pero perder el miedo al ordenador como herramienta de creación es el primer gran aprendizaje.
Paso 2: las conexiones
Solo hay que conectar tres cables. Fijaos en que el anillo tiene una entrada marcada como DIN (entrada de datos) y una salida marcada como DOUT: debéis usar siempre DIN.
- Cable rojo: pin VIN (o 5V) del ESP32 al pin 5V del anillo.
- Cable negro: pin GND del ESP32 al pin GND del anillo.
- Cable verde: pin GPIO 5 del ESP32, pasando por la resistencia de 330 Ω, al pin DIN del anillo.
Si el anillo viene sin cables, habrá que soldarlos. Esa parte debe hacerla siempre un adulto, aunque los niños pueden mirar a una distancia prudente con gafas de protección y aprender cómo se hace. Si preferís evitar el soldador, buscad anillos con conectores ya montados.
Paso 3: el código de la lámpara
Copiad este programa en Arduino IDE. Lo hemos escrito con nombres en español y con comentarios para que sea fácil de entender en familia. Solo tenéis que cambiar el nombre y la contraseña de vuestro WiFi, y las coordenadas de vuestra ciudad.
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <Adafruit_NeoPixel.h>
// ===== 1. Datos que tenéis que cambiar =====
const char* WIFI_NOMBRE = "NombreDeTuWiFi";
const char* WIFI_CLAVE = "ClaveDeTuWiFi";
const float LATITUD = 40.4168; // Ejemplo: Madrid
const float LONGITUD = -3.7038;
const bool MOSTRAR_MANANA = true; // true = tiempo de mañana, false = tiempo actual
// ===== 2. Configuración del anillo de luces =====
#define PIN_LEDS 5
#define NUM_LEDS 12
#define BRILLO_MAX 60 // Luz suave para dormir (máximo 255)
Adafruit_NeoPixel anillo(NUM_LEDS, PIN_LEDS, NEO_GRB + NEO_KHZ800);
int codigoTiempo = -1; // -1 = todavía no sabemos el tiempo
unsigned long ultimaConsulta = 0;
const unsigned long INTERVALO = 15UL * 60UL * 1000UL; // Cada 15 minutos
void conectarWiFi() {
WiFi.begin(WIFI_NOMBRE, WIFI_CLAVE);
Serial.print("Conectando al WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" conectado");
}
void consultarTiempo() {
if (WiFi.status() != WL_CONNECTED) {
conectarWiFi();
}
String url = "https://api.open-meteo.com/v1/forecast?latitude=" + String(LATITUD, 4)
+ "&longitude=" + String(LONGITUD, 4)
+ "¤t=weather_code&daily=weather_code&timezone=auto&forecast_days=2";
WiFiClientSecure cliente;
cliente.setInsecure(); // Simplifica la conexión segura
HTTPClient http;
http.begin(cliente, url);
int respuesta = http.GET();
if (respuesta == 200) {
JsonDocument doc;
DeserializationError error = deserializeJson(doc, http.getString());
if (!error) {
if (MOSTRAR_MANANA) {
codigoTiempo = doc["daily"]["weather_code"][1];
} else {
codigoTiempo = doc["current"]["weather_code"];
}
Serial.print("Codigo del tiempo: ");
Serial.println(codigoTiempo);
}
} else {
Serial.print("Error al consultar el tiempo: ");
Serial.println(respuesta);
}
http.end();
}
void pintar(uint8_t r, uint8_t g, uint8_t b, float intensidad) {
for (int i = 0; i < NUM_LEDS; i++) {
anillo.setPixelColor(i, anillo.Color(r * intensidad, g * intensidad, b * intensidad));
}
anillo.show();
}
void animar() {
float segundos = millis() / 1000.0;
float respira = 0.55 + 0.45 * sin(segundos * 1.5); // Efecto "respiración"
if (codigoTiempo < 0) { // Sin datos todavía
pintar(0, 255, 0, 0.2);
} else if (codigoTiempo == 0) { // Despejado
pintar(255, 150, 20, respira);
} else if (codigoTiempo <= 3) { // Algunas nubes
pintar(255, 220, 150, respira);
} else if (codigoTiempo == 45 || codigoTiempo == 48) { // Niebla
pintar(150, 150, 170, respira);
} else if (codigoTiempo >= 51 && codigoTiempo <= 67) { // Llovizna y lluvia
pintar(0, 80, 255, respira);
} else if (codigoTiempo >= 71 && codigoTiempo <= 77) { // Nieve
pintar(180, 230, 255, respira);
} else if (codigoTiempo >= 80 && codigoTiempo <= 82) { // Chubascos
pintar(0, 160, 200, respira);
} else if (codigoTiempo >= 85 && codigoTiempo <= 86) { // Chubascos de nieve
pintar(200, 240, 255, respira);
} else if (codigoTiempo >= 95) { // Tormenta
if (random(0, 400) == 0) {
pintar(255, 255, 255, 0.6); // Pequeño "relámpago"
} else {
pintar(120, 0, 200, respira);
}
} else { // Otros casos
pintar(255, 255, 255, 0.4);
}
}
void setup() {
Serial.begin(115200);
anillo.begin();
anillo.setBrightness(BRILLO_MAX);
anillo.show();
conectarWiFi();
consultarTiempo();
ultimaConsulta = millis();
}
void loop() {
if (millis() - ultimaConsulta > INTERVALO) {
consultarTiempo();
ultimaConsulta = millis();
}
animar();
delay(20);
}
Pulsad el botón de subir (la flecha) y esperad. Si la carga se queda atascada en «Connecting…», mantened pulsado el botón BOOT de la placa durante un par de segundos. Después abrid el Monitor serie a 115200 baudios: veréis cómo la placa se conecta y el número que recibe del servicio meteorológico.
Cómo explicar el código a los niños
Podéis comparar el programa con una receta. La parte de arriba son los «ingredientes» (el WiFi, la ciudad, el número de luces). La función consultarTiempo() es como llamar por teléfono al hombre del tiempo y apuntar lo que dice. La función animar() es una lista de reglas: «si dice sol, pinta naranja; si dice lluvia, pinta azul». Y el loop() es lo que la lámpara repite una y otra vez, sin cansarse nunca.
Paso 4: poner vuestra ciudad
Para que la lámpara sepa qué tiempo hace en vuestra casa, necesita las coordenadas. Abrid Google Maps en el ordenador, haced clic derecho sobre vuestra calle y aparecerán dos números, por ejemplo 41.3874, 2.1686 para Barcelona. El primero es la latitud y el segundo la longitud. Copiadlos en el código respetando el signo negativo si lo hay. Es una oportunidad perfecta para hablar de mapas, del ecuador y del meridiano de Greenwich.
El código de colores de la lámpara
Esta es la tabla que hemos programado. Podéis imprimirla y pegarla junto a la lámpara, o mejor aún, dejar que los niños inventen la suya y cambien los valores en el código.
| Color | Tiempo | Qué preparar |
|---|---|---|
| Naranja | Despejado | Gorra y crema solar |
| Blanco cálido | Algunas nubes | Una chaqueta ligera |
| Gris | Niebla | Ropa con colores visibles |
| Azul | Lluvia o llovizna | Paraguas y botas |
| Turquesa | Chubascos | Chubasquero en la mochila |
| Celeste | Nieve | Guantes, gorro y bufanda |
| Morado | Tormenta | Planes de interior |
Paso 5: construir la pantalla de la lámpara
Aquí es donde cada familia deja su sello. La idea es difuminar la luz de los LEDs para que no deslumbre y se vea como un brillo uniforme. Algunas opciones que funcionan muy bien:
- Tarro de cristal esmerilado: pegad papel vegetal por dentro o pintadlo con pintura en spray translúcida.
- Bola de papel de arroz: las típicas lámparas de papel quedan preciosas con el anillo en su interior.
- Bote de yogur o envase blanco: reciclaje puro y un efecto muy suave.
- Impresión 3D: en comunidades como Instructables hay cientos de diseños de pantallas, nubes y lunas listas para imprimir en filamento blanco.
Para la base, una caja de cartón pequeña o un trozo de madera con un agujero para el cable USB es suficiente. Colocad el anillo mirando hacia arriba y el ESP32 escondido debajo. Dejad siempre algo de ventilación y no cubráis la placa con materiales que se puedan calentar.
Paso 6: pruebas y solución de problemas
Es normal que algo no funcione a la primera. De hecho, buscar el error juntos es una de las partes más valiosas de cualquier experimento de robótica. Estos son los fallos más habituales:
- La lámpara se queda en verde tenue: todavía no ha recibido datos. Revisad el nombre y la clave del WiFi. Recordad que el ESP32 solo funciona con redes de 2,4 GHz, no de 5 GHz.
- No se enciende ningún LED: comprobad que el cable de datos va a DIN y no a DOUT, y que el GND está bien conectado.
- Los colores salen cambiados: algunos anillos usan otro orden de color. Probad a cambiar
NEO_GRBporNEO_RGB. - Error al compilar en «JsonDocument»: tenéis instalada una versión antigua de ArduinoJson. Actualizadla a la versión 7.
- Parpadeos extraños: añadid el condensador de 1000 µF entre 5V y GND del anillo y usad un cargador USB de calidad.
¿Os habéis quedado con ganas de más? Aprended a programar robots, sensores y placas como el ESP32 paso a paso y a vuestro ritmo.
Cómo repartir las tareas según la edad
Uno de los secretos para que los experimentos de robótica familiar funcionen es que todos tengan un papel importante. Esta es una propuesta orientativa:
- De 6 a 8 años: elegir los colores de cada tipo de tiempo, decorar la pantalla y comprobar cada mañana si la lámpara «acertó».
- De 9 a 12 años: hacer las conexiones con supervisión, buscar las coordenadas y cambiar los valores de color y brillo en el código.
- A partir de 13 años: modificar las animaciones, crear nuevos efectos y añadir funciones extra.
- Adultos: soldadura, configuración del WiFi y supervisión de la parte eléctrica.
Un reto divertido: durante una semana, apuntad en una hoja el color de la lámpara por la noche y el tiempo real del día siguiente. Al final, calculad cuántas veces acertó la previsión. Acabáis de hacer vuestro primer estudio estadístico casero.
Ideas para subir de nivel
Cuando la lámpara básica funcione, podéis seguir ampliándola. Estas mejoras convierten un proyecto de una tarde en un laboratorio que crece con los niños:
- Interruptor táctil: el ESP32 tiene pines sensibles al tacto. Con la función
touchRead()podéis encender o apagar la lámpara tocando una chincheta metálica en la base. - Color según la temperatura: pedid también la temperatura a Open-Meteo y haced un degradado de azul (frío) a rojo (calor).
- Apagado automático: que la luz se vaya atenuando hasta apagarse 30 minutos después de acostarse.
- Modo despertador: que por la mañana se encienda poco a poco, como un amanecer.
- Varias ciudades: ideal si los abuelos viven lejos. Un LED del anillo puede mostrar el tiempo en su casa.
Consejos de seguridad
El proyecto funciona con 5 V a través de USB, por lo que es muy seguro. Aun así, conviene seguir algunas normas básicas: nunca conectéis nada directamente a un enchufe de la pared, haced la soldadura siempre con un adulto, mantened el brillo bajo para no molestar al dormir y no dejéis la lámpara tapada con ropa o cojines. El valor BRILLO_MAX del código está pensado precisamente para que la luz sea agradable de noche.
Una lámpara que enseña algo cada noche
Construir una lámpara inteligente ESP32 para niños demuestra que la tecnología no tiene que ser una caja negra. Con unos pocos componentes, algo de paciencia y mucha curiosidad, los peques entienden cómo un objeto puede conectarse a internet, recibir información y tomar decisiones. Y lo mejor es que cada noche, al ver el color de su lámpara, recordarán que fueron ellos quienes la programaron.
Si este proyecto os ha gustado, es solo el principio. Hay muchos más proyectos IoT sencillos en casa esperando: estaciones meteorológicas, regadores automáticos de plantas, robots que esquivan obstáculos y mucho más.
Convertid la curiosidad de vuestros hijos en habilidades para el futuro. Encontrad proyectos, recursos y formación en robótica para toda la familia.


