Plan de clases IoT con ESP32: módulo de 8 semanas para el aula
Plan de clases IoT con ESP32: tabla de 8 semanas, red escolar y hotspot, código de servidor web Wi-Fi, seguridad y ética, materiales para 8 grupos y rúbrica.
Para armar un plan de clases IoT con ESP32 en secundaria o formación profesional, divide el módulo en cuatro capas: primero la placa percibe su entorno (GPIO y sensores), luego se conecta a una red (Wi-Fi), después comparte datos (servidor web, cliente HTTP, mensajes) y por último aprende a funcionar con batería y a estar protegida (deep sleep y seguridad). Con dos clases por semana estas cuatro capas caben con holgura en ocho semanas: dos semanas de hardware, dos de red y servidor, dos de intercambio de datos, una de energía y seguridad y la última para el proyecto final. Al terminar, el alumnado entrega un dispositivo que lee un sensor, muestra la medida en una página abierta desde el móvil o envía un mensaje al móvil cuando ocurre algo, con la duración de batería calculada y sin la contraseña a la vista dentro del código.
Este artículo continúa el plan de la primera clase con ESP32; la instalación, los drivers, el botón BOOT y el primer LED están allí y no se repiten aquí. Aquí tienes una tabla semana a semana con objetivo, proyecto real de BlueGrays, concepto y resultado, una estructura semanal de 80 minutos, por qué la red del centro casi nunca deja entrar al ESP32 y cómo solucionarlo, cinco preguntas para el departamento de informática, código compilable de un servidor web Wi-Fi, una sección de seguridad y ética, una lista de materiales para 8 grupos y los criterios del proyecto final. Los ejemplos suponen esto: tienes 24 estudiantes en 8 grupos de tres y dos clases por semana (2 × 40 minutos de trabajo). Si tu grupo es distinto, ajusta los tiempos en proporción.

La lógica del módulo: percibir, conectar, compartir, ahorrar energía
Una clase de Internet de las cosas (IoT) no enseña Internet en sí, sino cómo un dispositivo habla con los demás dispositivos de una red. Para eso primero hace falta algo que medir: una placa que se conecta al Wi-Fi pero no mide nada no tiene nada que decir en la red. Por eso las dos primeras semanas van sin Wi-Fi a propósito: el alumnado trabaja con un pulsador, una LDR y un sensor de temperatura y humedad, y fija la elección de pines y el intervalo de lectura. En la tercera semana la placa entra en la red, en la cuarta se convierte en servidor, en la quinta pasa a ser un cliente que pide datos a otro servidor y en la sexta avisa de un evento con un mensaje. La séptima semana se dedica a dos temas que la mayoría de talleres cortos de IoT se saltan: la duración de la batería y la seguridad. Cada capa se apoya en la anterior, así que no cambies el orden; si la semana del Wi-Fi sale mal, resuelve el problema de conexión antes de seguir.
Plan de clases IoT con ESP32 en 8 semanas
Todos los proyectos de la tabla están listos en BlueGrays con su esquema, lista de componentes y código. Los proyectos de las cuatro primeras semanas, incluidos los de conexión Wi-Fi y servidor web, son completamente gratuitos; los de cliente HTTP, Telegram, WebSocket y deep sleep que se usan desde la semana 5 son Premium. Así que nadie necesita Premium el primer mes; qué hacer cuando sí haga falta está al final del artículo.
| Semana | Objetivo | Proyecto de BlueGrays | Concepto | Resultado |
|---|---|---|---|---|
| 1 | Leer una entrada y controlar una salida | Control de LED con pulsador en ESP32 (Push), Control de LED con botón en ESP32 (Toggle) (Gratis) | GPIO, INPUT_PULLUP, entrada y salida digital, variable de estado | Un LED que se enciende y apaga con un pulsador y el mapa de pines del grupo |
| 2 | Medir el entorno | Lectura de la intensidad luminosa con el módulo LDR del ESP32, ESP32 DHT22 Temperatura y humedad (con pantalla LCD) (Gratis) | Lectura analógica (12 bits, 0–4095), ADC1 y ADC2, I2C, librerías, intervalo de lectura | Tabla de 10 lecturas de luz en el monitor serie, temperatura y humedad en la LCD |
| 3 | Conectar la placa a la red | Conexión Wi-Fi STA con ESP32 (con pantalla LCD) (Gratis) | Modo estación (STA), SSID, dirección IP, RSSI (dBm), WiFi.status(), reconexión | IP, dirección MAC e intensidad de señal anotadas en el cuaderno de red |
| 4 | Convertir la placa en servidor | Servidor web asíncrono ESP32 (con indicación de IP en la pantalla LCD) (Gratis) y el código de este artículo | Servidor web, petición y respuesta HTTP, puerto 80, rutas (/, /on, /off) | Una página que enciende un LED desde el móvil y muestra el valor de luz |
| 5 | Convertir la placa en cliente | ESP32 HTTPClient + API del tiempo (con pantalla LCD), ESP32: hora real desde Internet con NTP (Premium) | Cliente HTTP, petición GET, códigos de estado (200, 404), JSON, hora por NTP | El tiempo o la hora obtenidos de Internet; leer la medida del grupo vecino |
| 6 | Avisar de un evento con un mensaje | Sistema de Alarma de Movimiento ESP32 (PIR + Buzzer + LED + Telegram), Contador ESP32 WebSocket (2 botones + pantalla LCD + web en tiempo real) (Premium) | Notificaciones, token del bot, HTTPS, WebSocket, la idea de publicar-suscribir (MQTT) | Un mensaje al móvil al detectar movimiento o una página que se actualiza sola |
| 7 | Funcionar con batería y proteger el dispositivo | Modo de suspensión profunda del ESP32 — Ahorro de batería (OLED + contador en RTC RAM) (Premium) | Deep sleep, fuentes de activación, memoria RTC, corriente media, contraseñas en un archivo aparte | Cálculo de duración de batería y proyecto con la contraseña movida a secrets.h |
| 8 | Proyecto final | Elección del grupo, por ejemplo ESP32 DHT22 Temperatura y humedad (con pantalla LCD) más la página web de la semana 4 | Combinar conceptos, documentar, presentar | Dispositivo funcionando, presentación de 3 minutos, cuaderno de red |
Tres notas sobre la tabla. Primero, en la aplicación no hay un proyecto de MQTT listo; en la semana 6 explica MQTT como concepto en la pizarra (los dispositivos no hablan directamente entre sí, sino que publican mensajes con un tema en un servidor intermediario, el broker, y quien esté interesado se suscribe a ese tema) y haz la parte práctica con la notificación de Telegram y la página WebSocket. Los detalles de Telegram están en el artículo bot de Telegram con ESP32. Segundo, el proyecto Async Web Server de la semana 4 necesita las librerías AsyncTCP y ESPAsyncWebServer; instálalas en cada ordenador antes de la clase o la compilación se parará en la primera línea. Tercero, el ejercicio con el grupo vecino de la semana 5 no necesita Internet: el ESP32 del grupo A lee la dirección /deger del servidor que el grupo B montó en la semana 4. Si el centro no tiene salida a Internet, esa semana funciona igual.
La estructura semanal: 80 minutos
Seguir cada semana la misma estructura hace que el alumnado gaste su energía en el concepto nuevo y no en acostumbrarse a una rutina nueva. Si puedes juntar las dos clases, el flujo de abajo funciona en un solo bloque; si no, en dos mitades de 40 minutos, y en ese caso no desmontes el circuito al final de la primera clase, guárdalo montado en la caja. El cuaderno de red es una hoja que lleva cada grupo: fecha, dirección IP de la placa, dirección MAC, intensidad de señal, el error que apareció y cómo se resolvió. A partir de la semana 3, la mitad de la depuración se hace mirando ese cuaderno.
| Minutos | Fase | ¿Qué se hace? |
|---|---|---|
| 0–10 | Calentamiento | Se comenta la pregunta de salida de la semana anterior, los grupos abren su cuaderno de red, se reparten las cajas. |
| 10–20 | Concepto | El único concepto de la semana se dibuja en la pizarra: en la semana 4, un móvil, un ESP32 y las flechas de petición y respuesta entre ellos. |
| 20–30 | Leer el código | Se proyecta el proyecto de la semana, se leen juntos el resumen y la explicación paso a paso de la pestaña Entender el código, el alumnado predice la salida. |
| 30–55 | Montar y subir | Los grupos montan el circuito, suben el código y ven la primera salida en el monitor serie. El grupo que lleve más de 3 minutos atascado recibe un kit de repuesto. |
| 55–70 | Cambiar algo | Cada grupo cambia una sola cosa: intervalo de actualización, texto de la página, umbral o tiempo de sueño. El cambio se anota en el cuaderno de red. |
| 70–80 | Cierre | Se responde por escrito la pregunta de salida, el circuito se desmonta o se guarda montado en la caja, se cuentan las piezas. |
La realidad de la red del centro: por qué el ESP32 no entra en el Wi-Fi escolar
La mayoría de módulos de IoT se atascan por la red, no por el código. El ESP32 clásico solo funciona en la banda de 2,4 GHz; un punto de acceso que emite solo en 5 GHz no lo ve nunca. Las redes de los centros a menudo no usan una contraseña compartida como en casa, sino autenticación empresarial con usuario y contraseña (WPA2-Enterprise); el ESP32 puede admitirla con código adicional, pero eso obliga a escribir en el código la contraseña personal de un alumno o de un docente, algo inaceptable en clase. Las redes de invitados abren una página de aceptación en el navegador tras conectarse (portal cautivo); el ESP32 no tiene pantalla ni navegador, no puede pasar esa página y parece conectado pero nunca llega a Internet. Algunos centros solo admiten dispositivos con la dirección MAC registrada previamente. La última trampa es la menos conocida: las redes de invitados suelen aislar los dispositivos entre sí (aislamiento de clientes). En ese caso el ESP32 se conecta e incluso muestra su IP, pero el móvil en la misma red no llega a esa dirección y el servidor web de la semana 4 no se abre nunca.
| Tipo de red | ¿Se conecta el ESP32? | Para la semana del servidor web | Nota |
|---|---|---|---|
| Red de 2,4 GHz con una sola contraseña (WPA2-PSK) | Sí | Adecuada | Igual que en casa; en los centros rara vez está abierta al alumnado |
| Red que emite solo en 5 GHz | No, no la ve | No adecuada | Si no aparece en la lista de redes, revisa primero la banda |
| Red empresarial con usuario y contraseña (WPA2-Enterprise) | Técnicamente posible con código adicional | No recomendada | Una contraseña personal acaba dentro del código |
| Red de invitados con página de aceptación (portal cautivo) | Se conecta pero no sale a Internet | Normalmente no adecuada | La mayoría también tiene activo el aislamiento de clientes |
| Punto de acceso personal de un móvil | Sí, si 2,4 GHz está activo | Adecuada | Número limitado de dispositivos a la vez |
| Router propio de 2,4 GHz sin conexión a la red del centro | Sí | La más adecuada | Si necesita Internet, la conexión se acuerda con informática |
La solución: el punto de acceso del móvil o un router propio
La solución más rápida es el punto de acceso personal de tu móvil. En el iPhone, al activar Maximizar compatibilidad en los ajustes de Compartir Internet la emisión pasa a 2,4 GHz; en Android eliges la banda de 2,4 GHz en los ajustes del punto de acceso. Así también hay Internet, pero los móviles solo aceptan un número limitado de dispositivos a la vez, y con 8 grupos más los móviles del alumnado el límite se llena rápido. Regla práctica: si los 8 ESP32 se conectan al móvil del docente, los 8 móviles que abrirán el navegador no deben conectarse a un segundo móvil, porque el móvil y el ESP32 tienen que estar en la misma red. Por eso, en las semanas 3 y 4 conecta 4 grupos a un punto de acceso y los otros 4 a un segundo, y que cada grupo pruebe con un solo móvil.
Si vas a repetir el módulo cada año, la solución permanente es un router de 2,4 GHz propio, solo para esta clase. El router funciona sin conectarlo a la red del centro; las semanas 3 y 4 y el ejercicio con el grupo vecino se pueden hacer sin Internet, porque el ESP32 y el móvil están en la misma red local. Internet solo hace falta en las semanas 5 y 6 (tiempo, NTP, Telegram); para esas dos semanas usa un punto de acceso o planifica con informática la conexión del router a la red del centro. Cambia el nombre y la contraseña de la red cada curso y la contraseña de administración del router el primer día. Si no hay ninguna red física, en el código de los proyectos Wi-Fi de la aplicación el nombre de red por defecto es Wokwi-GUEST; el mismo código se puede probar con esa red en el simulador Wokwi desde el navegador. Haz al departamento de informática estas cinco preguntas al menos dos semanas antes de empezar:
- ¿Hay en el centro una red que emita en 2,4 GHz con una sola contraseña compartida (WPA2-PSK) y pueden usarla los dispositivos de clase?
- ¿La red de invitados tiene portal cautivo y aislamiento de clientes? ¿Pueden dos dispositivos de la misma red verse entre sí?
- ¿Hay que registrar antes los dispositivos por su dirección MAC? Si es así, ¿hasta cuándo necesitáis la lista de las 9 placas?
- ¿Permiten las normas del centro usar en el aula taller un router propio sin conexión a la red del centro, o el punto de acceso del móvil del docente?
- Si los ESP32 necesitan Internet en las semanas 5 y 6, ¿qué conexiones permite el cortafuegos (sitios web, servidores de hora, servicios de mensajería)?
El código: un ESP32 que se conecta al Wi-Fi y muestra el valor de un sensor en una página
El código de abajo es el núcleo de la semana 4 y solo usa las librerías WiFi.h y WebServer.h que vienen con el paquete de placas ESP32, así que no hay que instalar nada más. El circuito es el de la semana 2: VCC del módulo LDR a 3V3, GND a GND, AO a GPIO34. GPIO34 está en ADC1, así que se puede leer también con el Wi-Fi activo. Antes de subirlo, cambia los dos marcadores AG_ADI (nombre de la red) y AG_SIFRESI (contraseña) por los datos de tu red de 2,4 GHz, o pasa esas dos líneas a un archivo aparte llamado secrets.h, como harás en la semana 7; si el código encuentra ese archivo, lo usa.
1// ESP32 Wi-Fi + web sunucu: LDR değerini tarayıcıda göster / ESP32 Wi-Fi + web server: show the LDR value in a browser
2#include <WiFi.h>
3#include <WebServer.h>
4
5// Ağ bilgileri: secrets.h varsa oradan gelir / Network credentials: taken from secrets.h if it exists
6#if __has_include("secrets.h")
7#include "secrets.h"
8#else
9const char* WIFI_SSID = "AG_ADI"; // 2,4 GHz ağın adı / Name of the 2.4 GHz network
10const char* WIFI_PASS = "AG_SIFRESI"; // Ağ şifresi / Network password
11#endif
12
13const int LDR_PIN = 34; // ADC1 pini, Wi-Fi açıkken de okunur / ADC1 pin, still readable while Wi-Fi is on
14
15WebServer server(80); // 80 numaralı portta web sunucu / Web server on port 80
16
17// Ana sayfa: ölçümü HTML olarak gönder / Home page: send the reading as HTML
18void handleRoot() {
19 int raw = analogRead(LDR_PIN); // 0-4095 ham değer / Raw value 0-4095
20 int percent = map(raw, 4095, 0, 0, 100); // Modülde ışık arttıkça değer düşer / On the module the value drops as light rises
21 String html = "<!DOCTYPE html><html><head><meta charset='utf-8'>";
22 html += "<meta name='viewport' content='width=device-width'>";
23 html += "<script>setTimeout(() => location.reload(), 5000);</script>"; // 5 saniyede bir yenile / Reload every 5 s
24 html += "<title>ESP32 Grup 1</title></head><body>";
25 html += "<h1>Isik: %" + String(percent) + "</h1>";
26 html += "<p>Ham deger: " + String(raw) + "</p>";
27 html += "<p>Sinyal: " + String(WiFi.RSSI()) + " dBm</p>";
28 html += "</body></html>";
29 server.send(200, "text/html", html); // 200 = istek başarılı / 200 = request OK
30}
31
32// Yalnız sayıyı döndüren adres / Address that returns only the number
33void handleValue() {
34 server.send(200, "text/plain", String(analogRead(LDR_PIN)));
35}
36
37void setup() {
38 Serial.begin(115200);
39 analogReadResolution(12); // 12 bit: 0-4095
40 WiFi.mode(WIFI_STA); // İstasyon modu: var olan ağa katıl / Station mode: join an existing network
41 WiFi.begin(WIFI_SSID, WIFI_PASS);
42 Serial.print("Baglaniliyor / Connecting");
43 unsigned long start = millis();
44 while (WiFi.status() != WL_CONNECTED && millis() - start < 20000) { // En fazla 20 sn bekle / Wait up to 20 s
45 delay(500);
46 Serial.print(".");
47 }
48 if (WiFi.status() != WL_CONNECTED) {
49 Serial.println("\nBaglanamadi, yeniden basliyor / No connection, restarting");
50 delay(2000);
51 ESP.restart();
52 }
53 Serial.print("\nIP: ");
54 Serial.println(WiFi.localIP()); // Telefonda bu adresi aç / Open this address on the phone
55 server.on("/", handleRoot); // Ana sayfa: IP/ / Home page: IP/
56 server.on("/deger", handleValue); // Yalnız sayı: IP/deger / Number only: IP/deger
57 server.begin();
58}
59
60void loop() {
61 server.handleClient(); // Gelen istekleri karşıla / Serve incoming requests
62}Después de subirlo, abre el monitor serie a 115200 baudios. Cuando terminan los puntos aparece la línea de IP, por ejemplo 192.168.43.57. En un móvil conectado a la misma red que el ESP32, abre el navegador y escribe esa dirección: la página muestra el porcentaje de luz, el valor bruto y la intensidad de señal, y se recarga sola cada 5 segundos. Si tapas la LDR con la mano, el porcentaje baja. Si añades /deger al final de la dirección, solo devuelve el número bruto; en la semana 5 el ESP32 del grupo vecino leerá justo esa dirección con un cliente HTTP. Si la placa no se conecta en 20 segundos, se reinicia sola, para que nadie piense que se ha colgado. Si la conexión no llega nunca, el artículo el ESP32 no se conecta al WiFi explica qué significa cada código de estado.
Seguridad y ética: la semana que no conviene saltarse
En una clase de IoT la seguridad no se enseña como una presentación aparte, sino como un cambio que el alumnado hace en su propio código. En este módulo ya manejan secretos reales en tres sitios: la contraseña del Wi-Fi, el token del bot de la semana 6 y los datos que miden. Dedica la segunda mitad de la semana 7 a estos cinco puntos y pide un cambio concreto en el proyecto de cada grupo para cada uno:
- No escribas contraseñas en el código: Pasa la contraseña del Wi-Fi y el token del bot a un archivo aparte llamado secrets.h y déjalo fuera al compartir código o hacer capturas. Una línea de código en el proyector significa que toda el aula conoce la contraseña.
- Cambia las contraseñas por defecto: El panel de administración de los routers, el modo punto de acceso (AP) del propio ESP32 y las contraseñas de los códigos de ejemplo son valores que todo el mundo conoce. Cambia el primer día la contraseña del router de clase y pide al alumnado que no deje contraseñas de ejemplo en sus proyectos.
- Tu página está abierta a toda la red: El servidor web de este artículo no tiene pantalla de acceso; cualquiera en la misma red que conozca la dirección abre la página y, en un proyecto con dirección /on, también enciende el LED. Por eso en clase solo se controlan por web salidas inofensivas como LED, zumbadores y pantallas; en este módulo no se usan relés conectados a la tensión de red (230 V).
- Datos personales: La temperatura y la luz no son datos personales, pero un sensor de movimiento que registra cuándo pasa gente por un pasillo, una cámara o un micrófono pueden convertirse en datos personales. Si una idea de proyecto final registra el movimiento, la voz o la imagen de personas, que la clase responda antes: "¿Quién lo ve, cuánto tiempo se guarda, se pidió permiso?"
- Actualizaciones y responsabilidad: Un dispositivo conectado a Internet no se configura una vez y se olvida. Muestra al alumnado que al final del módulo se apaga el router de clase, se revocan los tokens de los bots y se reinician las placas, y debatid quién es responsable de un dispositivo durante toda su vida.
Lista de materiales: por grupo y para 8 grupos
La lista es para 24 estudiantes en 8 grupos de tres; con 9 kits, uno de repuesto, basta. La mayoría de piezas se compran para las primeras semanas y se reutilizan después; la LCD, por ejemplo, aparece en cuatro proyectos de la semana 2 a la 5. No hace falta soldar; módulos como la LCD I2C y la OLED se conectan con cables jumper macho-hembra. Si usas una LDR suelta en lugar del módulo, añade una resistencia de 10 kΩ por grupo y montad juntos el divisor de tensión en la semana 2.
| Material | Por grupo | Para la clase (8 grupos + 1 repuesto) | Semana de uso |
|---|---|---|---|
| ESP32 DevKit (30 pines, ESP32-WROOM-32) | 1 | 9 | 1–8 |
| Cable USB de datos (probado) | 1 | 11 | 1–8 |
| Protoboard (830 puntos) | 2 | 18 | 1–8 |
| Pulsador | 2 | 18 | 1, 6 |
| LED de 5 mm y resistencia de 220 Ω | 3 + 3 | 30 + 30 | 1, 3, 4 |
| Módulo LDR (con salida AO) | 1 | 9 | 2, 4, 5 |
| Sensor de temperatura y humedad DHT22 | 1 | 9 | 2, 8 |
| Pantalla LCD 16x2 I2C | 1 | 9 | 2–5 |
| Pantalla OLED SSD1306 de 0,96 pulgadas (I2C) | 1 | 9 | 7 |
| Sensor de movimiento PIR (HC-SR501) y zumbador | 1 + 1 | 9 + 9 | 6 |
| Cables jumper (macho-macho y macho-hembra) | 20 + 10 | unos 180 + 90 | 1–8 |
| Punto de acceso de 2,4 GHz (móvil con hotspot o router propio) | - | 2 hotspots o 1 router | 3–8 |
| Móvil o tableta con BlueGrays | 1 | 8 | 1–8 |
Evaluación: criterios del proyecto final
Mantén sencilla la regla del proyecto final: un sensor, una conexión Wi-Fi y una forma de compartir (página web o mensaje). Los grupos escriben su idea en una frase al final de la semana 6, hacen la lista de materiales en la semana 7, montan en la primera clase de la semana 8 y presentan tres minutos cada uno en la segunda. Puntúa con los seis criterios de abajo; cada uno vale de 1 a 3 puntos, 18 en total. Para la lógica general de la rúbrica, la hoja de entrega y el portafolio puedes usar tal cual la plantilla del artículo rúbrica de evaluación para clases de Arduino.
| Criterio | 1: Inicial | 2: En desarrollo | 3: Logrado |
|---|---|---|---|
| Sensor y circuito | Circuito montado pero sin valor o con un valor sin sentido | Se lee el valor, no sabe justificar la elección del pin | Valor leído correctamente, elección de pin ADC1 o digital explicada |
| Conexión Wi-Fi | Solo se conecta con ayuda del docente | Se conecta, pero el dispositivo se detiene si se corta la conexión | Se conecta, se reconecta tras un corte, IP e intensidad de señal anotadas |
| Compartir datos | Datos solo en el monitor serie | Hay página o mensaje, pero hay que actualizarlos o lanzarlos a mano | La página se actualiza sola o el mensaje sale solo con el evento |
| Conciencia energética | Nadie sabe cuánta corriente consume el dispositivo | Duración de batería calculada sin tener en cuenta el sueño | Calculada con sueño e intervalo de activación, resultado interpretado |
| Seguridad y ética | Contraseña a la vista en el código | Contraseña en secrets.h, datos no debatidos | Contraseña en archivo aparte, datos recogidos y quién los ve por escrito |
| Documentación y presentación | Cuaderno de red incompleto, la presentación es solo una demo | Hay cuaderno de red, no se explican los errores encontrados | Cuaderno de red completo, un error y su solución explicados en la presentación |
Preguntas de salida por semana y lista de comprobación previa
- Semana 1: En un pin configurado con INPUT_PULLUP, ¿qué devuelve digitalRead() mientras el pulsador está pulsado, y por qué?
- Semana 2: ¿Por qué no se puede leer un potenciómetro en GPIO4 con el Wi-Fi activo? ¿Qué pines conviene elegir?
- Semana 3: Si WiFi.status() indica que no hay conexión, ¿cuáles son las dos primeras cosas que compruebas?
- Semana 4: ¿Por qué la dirección IP que escribiste en el navegador puede ser distinta la semana que viene?
- Semana 5: ¿Tu ESP32 fue servidor o cliente esta semana? ¿Qué indican los códigos de estado 200 y 404?
- Semana 6: ¿Qué pasa si el token del bot sale en una captura de pantalla? ¿Qué función tiene el broker en MQTT?
- Semana 7: Con la misma batería, un ESP32 siempre encendido dura días y en deep sleep, meses. ¿Qué marca la diferencia?
- Semana 8: ¿Qué datos recoge tu dispositivo, quién puede verlos y cuánto tiempo se guardan?
- Dos semanas antes del módulo: Haz las cinco preguntas a informática y decide entre punto de acceso y router según las respuestas.
- Dos semanas antes del módulo: Cuenta las placas y escribe la dirección MAC de cada una en su etiqueta (si hay que registrarlas, da la lista a informática).
- Una semana antes del módulo: Instala en cada ordenador el paquete de placas ESP32 y las librerías DHT, LiquidCrystal I2C, AsyncTCP y ESPAsyncWebServer; prueba con una placa.
- Una semana antes del módulo: Pon el punto de acceso en 2,4 GHz, cambia nombre y contraseña, conecta un ESP32 y abre su página desde un móvil.
- Una semana antes del módulo: Copia una hoja de cuaderno de red por grupo, prueba los sensores y las LCD y guárdalos en las cajas.
- Antes de la semana 5: Prepara los códigos para los proyectos Premium y explica al alumnado qué datos suyos se comparten.
El papel de BlueGrays en el módulo
- Proyectos con ESP32: En Descubrir › Proyectos, usa Filtrar para elegir la plataforma ESP32; hay unos 50 proyectos con ESP32, desde la conexión Wi-Fi hasta el deep sleep. Cada uno tiene esquema, lista de componentes con cantidades y código fuente para copiar. Copiar enlace sirve para abrir el código en el ordenador.
- Entender el código: Los minutos 20–30 de cada semana pasan por esta pestaña: el resumen ¿Qué hace este código?, la explicación Paso a paso, Si te atascas y la tarea Pruébalo tú. Es gratis en los proyectos de las cuatro primeras semanas y se abre con Premium en los proyectos Premium.
- Herramienta Pinout: En la herramienta Pinout, al seleccionar cualquier pin del ESP32 se ve su tipo y sus avisos; en un pin de ADC2 indica que no puede leer analógico con el Wi-Fi activo, en uno de ADC1 que se puede leer también con Wi-Fi. Ideal para el proyector al elegir pines en la semana 2. Pinout es una herramienta Premium.
- Herramienta de duración de batería: En la herramienta Duración de batería eliges el perfil ESP32 · deep sleep; al introducir capacidad de la batería, corriente y tiempo despierto, corriente en sueño y ciclo, calcula el tiempo de funcionamiento estimado y la corriente media. La comparación "siempre encendido frente a dormido" de la semana 7 se hace en esta pantalla. La herramienta es Premium; sin Premium se ve un cálculo de ejemplo.
- Paquetes para Educadores: Desde la semana 5 hacen falta proyectos Premium, así que una cuenta por grupo debería tener Premium. Un paquete anual de 10 códigos cubre 8 grupos y al docente; es un pago único, no se renueva, el alumnado no añade ninguna tarjeta, ves quién usó cada código en Mis Códigos y puedes transferir códigos al grupo del curso siguiente. Un código mensual de 30 días repartido en la primera clase de la semana 5 cubre justo las cuatro últimas semanas; si hay vacaciones en medio, no alcanza. Más detalles en el artículo códigos Premium para toda la clase.
Tras ocho semanas, el alumnado no solo tiene un dispositivo que funciona, sino la costumbre de pensar cómo habla un dispositivo en la red, por qué no se conecta, cuánta energía gasta y de quién son los datos que recoge, y eso es justo lo que busca la formación profesional. Si quieres repasar antes de clase los proyectos, esquemas y explicaciones de Entender el código de cada semana, basta con abrir el filtro ESP32 en la aplicación BlueGrays.
Preguntas frecuentes
¿Cuántas semanas debe durar un curso de IoT con ESP32?
Con dos clases por semana, 8 semanas bastan para los conceptos básicos de IoT, del sensor y el Wi-Fi al servidor web, las notificaciones y el deep sleep. Si solo tienes una clase por semana, alarga el mismo plan a 12–14 semanas o junta las semanas 5 y 6. Dedica al proyecto final al menos una clase completa.
¿Se puede dar IoT con ESP32 sin el Wi-Fi del centro?
Sí. Mientras el ESP32 y el móvil estén en la misma red local, el servidor web y las peticiones entre dispositivos no necesitan Internet; basta un punto de acceso de 2,4 GHz en el móvil del docente o un router propio sin conexión a la red del centro. Internet solo hace falta para servicios externos como el tiempo, la hora y Telegram.
¿Por qué el ESP32 no se conecta al Wi-Fi del instituto?
El ESP32 clásico solo funciona en 2,4 GHz, así que una red que emite solo en 5 GHz ni aparece. Las redes de los centros suelen usar autenticación empresarial con usuario y contraseña o un portal cautivo en el navegador, y algunas solo admiten direcciones MAC registradas. En esos casos lo más práctico es un punto de acceso o un router propio.
¿Por qué no puedo abrir el servidor web del ESP32 desde el móvil?
Lo más habitual es que el móvil no esté en la misma red que el ESP32: puede estar con datos móviles o en otro Wi-Fi. La segunda causa es el aislamiento de clientes de las redes de invitados, donde los dispositivos de la misma red no se ven entre sí. Prueba de nuevo la IP del monitor serie con el móvil y el ESP32 en el mismo punto de acceso.
¿Hay que enseñar MQTT en una clase de IoT?
No es imprescindible, pero conviene explicarlo como concepto, porque la mayoría de sistemas IoT reales usan este modelo en el que los dispositivos intercambian mensajes por temas a través de un broker. En un módulo de 8 semanas basta con asentar primero la relación cliente-servidor con HTTP y presentar MQTT en la sexta semana como la idea de publicar-suscribir.
¿Son gratis los proyectos de ESP32 de BlueGrays?
Una parte sí. Los proyectos de las cuatro primeras semanas de este plan, como pulsador, LDR, DHT22, conexión Wi-Fi y Async Web Server, son totalmente gratuitos. Los de cliente HTTP, Telegram, WebSocket y deep sleep son Premium; para una clase se pueden conseguir códigos en bloque en Paquetes para Educadores, en el Perfil.
Proyectos para hacer después de leer esto
Ver todos los proyectos
Conexión Wi-Fi STA con ESP32 (con pantalla LCD)
En este proyecto, conectamos el ESP32 a la red Wi-Fi doméstica en modo Station (STA) de forma segura y tolerante a fallos. Separamos el SSID y la contraseña en el archivo secrets.h para evitar que se filtren a Git, configuramos un mecanismo de reconexión automática y mostramos el nivel de señal RSSI y la dirección IP en una pantalla LCD I2C. El LED interno actúa como indicador de estado.

Servidor web asíncrono ESP32 (con indicación de IP en la pantalla LCD)
En este proyecto, convertimos el ESP32 en un servidor web asíncrono que puedes controlar desde tu teléfono o tu ordenador, siempre que estén conectados a la misma red Wi-Fi. Gracias a la biblioteca ESPAsyncWebServer, el servidor puede procesar varias solicitudes al mismo tiempo (a diferencia del clásico WebServer.h, que se bloquea con una sola solicitud).

Control de LED con pulsador en ESP32 (Push)
El LED se enciende cuando se pulsa el botón y se apaga cuando se suelta. Muestra cómo se utiliza el pin de entrada digital del ESP32 y la resistencia pull-up interna. Gracias al modo INPUT_PULLUP, no se necesita ninguna resistencia externa.

Lectura de la intensidad luminosa con el módulo LDR del ESP32
Visualización en tiempo real en el monitor serie del valor bruto del ADC del módulo LDR y del porcentaje relativo de luz calculado a partir de referencias de oscuridad y claridad. Este porcentaje no es una medición en lux. Explica el funcionamiento de la calibración del módulo. Es recomendable realizarlo antes del Proyecto 10, ya que se utiliza para determinar el valor umbral.

ESP32 DHT22 Temperatura y humedad (con pantalla LCD)
Se trata de un proyecto que mide la temperatura y la humedad ambientales mediante el sensor DHT22 y las muestra en tiempo real en una pantalla LCD I2C 16x2. Los datos del sensor se leen mediante el protocolo de un solo cable (one-wire) utilizando la biblioteca DHT de Adafruit. Este proyecto constituye la base para estaciones meteorológicas IoT, sistemas de automatización doméstica inteligente o sistemas de monitorización ambiental en invernaderos.

ESP32 HTTPClient + API del tiempo (con pantalla LCD)
En este proyecto, utilizamos el ESP32 para realizar una llamada a la API REST de la página web de información meteorológica (wttr.in) a través de Internet, utilizando HTTPClient.h. Analizamos la respuesta JSON devuelta con ArduinoJson v7 y mostramos la información sobre la ciudad, la temperatura, la humedad, el tiempo y el viento en una pantalla LCD I2C, tanto en turco como en inglés. wttr.in es gratuito y no requiere clave API: basta con escribir el nombre de cualquier ciudad para obtener su

Sistema de Alarma de Movimiento ESP32 (PIR + Buzzer + LED + Telegram)
Un sistema inteligente de alarma de seguridad que activa el buzzer y el LED cuando el sensor PIR detecta movimiento, y envía simultáneamente una notificación instantánea al propietario vía Telegram. Cuenta con un tiempo de espera de 30 segundos para limitar la frecuencia de las alarmas repetidas; este mecanismo no comprueba la validez de las detecciones del sensor PIR ni elimina las falsas detecciones. Ideal para seguridad del hogar, vigilancia de garajes, almacenes o salas de trabajo. Con ESP32

Modo de suspensión profunda del ESP32 — Ahorro de batería (OLED + contador en RTC RAM)
El modo «Deep Sleep» del ESP32 reduce el consumo de corriente a unos 10 µA al desactivar la CPU y la mayoría de los periféricos, lo cual es de vital importancia para los dispositivos IoT que funcionan con pilas. En este proyecto utilizamos tres fuentes de activación diferentes: el temporizador (15 s), un pin externo (EXT0 — botón GPIO 33) y el sensor táctil (T0/GPIO 4). Las variables marcadas con RTC_DATA_ATTR se conservan durante el modo Deep Sleep: el contador de arranque, el contador de act
Más artículos
App BlueGrays
Monta este circuito paso a paso en tu teléfono
Esquema, código y lista de piezas en una sola pantalla. Más de 200 proyectos de Arduino, ESP32 y Pico listos para montar.
Escanea con tu teléfono
Apunta la cámara al código y se abrirá la tienda de apps de tu teléfono.
o ábrela en la tienda

