Este proyecto implementa un sistema IoT de monitoreo de temperatura y humedad desarrollado para la escuela. El sistema permite:
- Medir temperatura y humedad en diferentes zonas del campus (Cancha, Makerspace, Comedor, Zona Verde)
- Mostrar datos en tiempo real mediante dashboards web
- Publicar datos vía MQTT a un broker en la nube (HiveMQ Cloud)
- Visualización local en display LCD desde el dispositivo ESP32
- Soporte multi-sensor para monitoreo de múltiples ubicaciones
- Proporcionar monitoreo ambiental en tiempo real
- Visualizar datos de temperatura y humedad de forma accesible
- Integrar tecnologías IoT en el entorno educativo
- Demonstrar comunicación M2M (Machine-to-Machine) con MQTT
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ ESP32 + DHT22 │─────►│ HiveMQ Cloud │─────►│ Dashboard Web │
│ (Sensor) │ MQTT │ (Broker) │ MQTT │ (Cliente) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ Display LCD │
│ (Visual local)│
└─────────────────┘
| Componente | Descripción | Protocolo |
|---|---|---|
| ESP32 | Microcontrolador con WiFi integrado | Arduino |
| DHT22 | Sensor de temperatura y humedad | Digital 1-wire |
| LCD 16x2 I2C | Display para visualización local | I2C |
| HiveMQ Cloud | Broker MQTT en la nube | MQTT over WebSocket |
| Dashboard | Interfaz web para visualización | HTTP/WS |
El microcontrolador ESP32 es el cerebro del sistema, responsable de:
- Leer datos del sensor DHT22
- Controlar el display LCD
- Conectarse a WiFi
- Publicar datos al broker MQTT
Especificaciones:
- Tensíon de operación: 3.3V
- WiFi: 802.11 b/g/n
- Bluetooth: BLE 4.2
- Procesador: Dual-core Xtensa LX6
El sensor DHT22 (AM2302) proporciona lecturas de:
- Temperatura: Rango de -40°C a 80°C, precisión ±0.5°C
- Humedad: Rango de 0% a 100% RH, precisión ±2% RH
Conexiones:
| Pin DHT22 | Función | Color |
|---|---|---|
| VCC | 3.3V | Rojo |
| DATA | GPIO 4 | Amarillo/Verde |
| GND | Ground | Negro |
Display de cristal líquido con:
- 16 columnas x 2 filas
- Interfaz I2C (dirección 0x27)
- Backlight azul con texto blanco
Conexiones:
| Pin LCD | Función | Pin ESP32 |
|---|---|---|
| SDA | Datos I2C | GPIO 21 |
| SCL | Clock I2C | GPIO 22 |
| VCC | 5V | VIN |
| GND | Ground | GND |
ESP32 Pinout:
┌─────────────────────────────┐
│ 3.3V GND GPIO21 GPIO22 │ <- I2C (LCD)
│ │ │ │ │ │
│ └─────┴──────┴───────┘ │
│ GPIO4│ <- DHT22
└─────────────────────────────┘
temperatura_polc/
├── README.md # Este archivo
├── Termometro_ESP32_LCD/ # Firmware del ESP32
│ ├── Termometro_ESP32_LCD.ino # Código fuente principal
│ ├── pines.md # Documentación de pines
│ └── wifimanageruse.md # Guía de WiFi Manager
├── dashboard-app/ # Dashboard Next.js (principal)
│ ├── src/app/
│ │ ├── page.tsx # Componente principal
│ │ ├── layout.tsx # Layout de la aplicación
│ │ └── globals.css # Estilos globales
│ ├── package.json # Dependencias Node.js
│ ├── tsconfig.json # Configuración TypeScript
│ ├── next.config.ts # Configuración Next.js
│ ├── postcss.config.mjs # Configuración PostCSS
│ └── tailwind.config.ts # Configuración Tailwind
├── dashboard.html # Dashboard HTML simple
├── dashboardfunctional/ # Dashboard funcional anterior
│ └── index.html
└── docs/ # Documentación adicional
El firmware está escrito en Arduino/C++ y se encuentra en Termometro_ESP32_LCD/Termometro_ESP32_LCD.ino.
Librerías requeridas:
Wire.h- Comunicación I2CLiquidCrystal_I2C.h- Control del display LCDDHT.h- Lectura del sensor DHT22WiFi.h- Conexión a red WiFiPubSubClient.h- Cliente MQTT
Funcionalidades del firmware:
- Inicialización de componentes (WiFi, LCD, DHT22, MQTT)
- Lectura periódica de temperatura y humedad (cada 10 segundos)
- Publicación de datos a broker MQTT
- Display de datos en LCD local
- Reconexión automática ante pérdida de conexión
Código funcional (snippet):
// Lectura del sensor
float temperatura = dht.readTemperature();
float humedad = dht.readHumedad();
// Publicación MQTT
String payload = "{\"temperatura\":" + String(temperatura) +
",\"humedad\":" + String(humedad) + "}";
client.publish("sensor/datos_ambientales", payload.c_str());El proyecto utiliza HiveMQ Cloud como broker MQTT.
Configuración de conexión:
| Parámetro | Valor |
|---|---|
| Host | ce6bb88c4eeb4bdc8bc96560b645b95e.s1.eu.hivemq.cloud |
| Puerto | 8884 (WebSocket TLS) |
| Protocolo | wss:// (WebSocket Secure) |
| Username | testadmin |
| Password | test123456 |
El sistema utiliza los siguientes topics:
| Topic | Descripción | Formato |
|---|---|---|
sensor/datos_ambientales |
Datos completos (temp + humedad) | JSON |
sensor/temperatura |
Solo temperatura | String |
sensor/humedad |
Solo humedad | String |
Formato de mensaje JSON:
{
"temperatura": 25.5,
"humedad": 60.2
}El dashboard se suscribe a los topics para recibir datos en tiempo real.
Ubicación: dashboard-app/
El dashboard principal está desarrollado con:
- Framework: Next.js 16.2.0
- UI Library: React 19.2.4
- Lenguaje: TypeScript
- Estilos: Tailwind CSS 4
- Cliente MQTT: mqtt.js 5.15.0
Características:
- Visualización en tiempo real de temperatura y humedad
- Diseño responsive
- Actualización automática de datos
- Soporte para múltiples zonas de monitoreo
Instalación y ejecución:
cd dashboard-app
npm install
npm run devEl dashboard estará disponible en http://localhost:3000
Ubicación: dashboard.html
Dashboard alternativo basado en HTML5 y JavaScript vanilla.
- No requiere servidor Node.js
- Funciona directamente en el navegador
- Uso de MQTT.js para conexión al broker
Uso:
Simplemente abrir dashboard.html en un navegador web.
Ubicación: dashboardfunctional/index.html
Versión funcional anterior del dashboard.
-
Hardware:
- Placa ESP32
- Sensor DHT22
- Display LCD 16x2 con interfaz I2C
- Cables de conexión
- Fuente de alimentación 5V/1A
-
Software:
- Arduino IDE o PlatformIO
- Node.js 18+ (para dashboard Next.js)
- Navegador web moderno
-
Instalar Arduino IDE:
- Descargar desde https://www.arduino.cc/en/software
-
Agregar soporte ESP32:
- Ir a File > Preferences > Additional Boards Manager URLs
- Agregar:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json - Ir a Tools > Board > Boards Manager
- Instalar "ESP32 by Espressif Systems"
-
Instalar librerías:
- Ir a Sketch > Include Library > Manage Libraries
- Instalar: DHT sensor library, PubSubClient, LiquidCrystal I2C
-
Subir código:
- Abrir
Termometro_ESP32_LCD.ino - Seleccionar placa: Tools > Board > ESP32 Dev Module
- Seleccionar puerto: Tools > Port
- Subir: Sketch > Upload
- Abrir
-
Instalar Node.js:
- Descargar desde https://nodejs.org (versión LTS)
-
Configurar dashboard:
cd dashboard-app npm install -
Ejecutar:
npm run dev
-
Producción:
npm run build npm start
Configuradas en el firmware:
SSID: Edu
Password: cajita123
Nota: Para cambiar las credenciales WiFi, editar las siguientes líneas en
Termometro_ESP32_LCD.ino:const char* ssid = "Tu_SSID"; const char* password = "Tu_Password";
Username: testadmin
Password: test123456
Broker: wss://ce6bb88c4eeb4bdc8bc96560b645b95e.s1.eu.hivemq.cloud:8884/mqtt
Advertencia: Estas credenciales están hardcodeadas. Para un entorno de producción, se recomienda usar variables de entorno o un sistema de gestión de secretos.
| GPIO | Función |
|---|---|
| GPIO 21 | SDA (I2C LCD) |
| GPIO 22 | SCL (I2C LCD) |
| GPIO 4 | DATA (DHT22) |
- Verificar que el SSID y password sean correctos
- Verificar que el ESP32 esté dentro del rango del router
- Revisar la intensidad de la señal WiFi
- Verificar credenciales MQTT
- Verificar conexión a internet
- Revisar firewall que pueda bloquear el puerto 8884
- Verificar conexiones (VCC, DATA, GND)
- Asegurar que el pin DATA esté conectado a GPIO 4
- Verificar que el sensor no esté dañado
- Verificar conexiones I2C (SDA, SCL)
- Ajustar contraste del LCD (potenciómetro en el módulo I2C)
- Verificar dirección I2C (por defecto 0x27)
- Verificar que el broker MQTT esté funcionando
- Revisar consola del navegador para errores
- Verificar topics suscritos
El ESP32 incluye un LED en el pin GPIO 2 que indica el estado:
- Encendido constante: Conectando a WiFi
- Parpadeo rápido: Enviando datos
- Apagado: Error de conexión
- Limpieza del sensor: Limpiar el DHT22 periódicamente para evitar acumulación de polvo
- Verificación de conexiones: Revisar cables y conexiones cada 3 meses
- Actualización de firmware: Mantener el firmware actualizado con las últimas correcciones
- Monitoreo de credenciales: Rotar credenciales MQTT periódicamente
- Respaldo de código: Mantener backups del código fuente
- Revisar logs del broker MQTT para detectar desconexiones
- Monitorear el dashboard para verificar recepción de datos
- Verificar voltaje de alimentación (debe ser 5V estable)
-
Multi-sensor:
- Agregar más sensores DHT22 para diferentes zonas
- Implementar red de sensores con topic por zona
-
Alertas:
- Notificaciones cuando la temperatura/humedad superen umbrales
- Alertas por email o Telegram
-
Almacenamiento:
- Guardar datos históricos en base de datos
- Gráficos de tendencias a lo largo del tiempo
-
Autenticación:
- Implementar autenticación en el dashboard
- API REST para acceso programático
-
Mejora de hardware:
- Usar sensor BME280 (presión barométrica adicional)
- Batería backup para operación durante cortes de energía
-
OTA Updates:
- Actualizaciones de firmware over-the-air
- Sistema de versión automático
┌─────────────────┐ ┌─────────────────┐
│ ESP32 │ │ DHT22 │
│ │ │ │
│ 3.3V ─────────┼──────────────┼─── VCC │
│ GPIO4 ─────────┼──────────────┼─── DATA │
│ GND ─────────┼──────────────┼─── GND │
│ │ │ │
└─────────────────┘ └─────────────────┘
┌─────────────────┐ ┌─────────────────┐
│ ESP32 │ │ LCD I2C │
│ │ │ │
│ 5V ─────────┼──────────────┼─── VCC │
│ GPIO21 ────────┼──────────────┼─── SDA │
│ GPIO22 ────────┼──────────────┼─── SCL │
│ GND ─────────┼──────────────┼─── GND │
│ │ │ │
└─────────────────┘ └─────────────────┘
Este proyecto fue desarrollado para uso educativo en el Politécnico.
Versión: 1.0
Última actualización: Marzo 2026
Documentación generada automáticamente para el proyecto de Monitoreo de Temperatura y Humedad.