Sistema IoT de Mitigación de Humedad en Armarios Inteligentes con ESP32
Descubre paso a paso cómo integrar un sensor DHT22 y módulos Peltier o ventiladores a un microcontrolador ESP32 para crear un sistema automatizado que mantenga tus prendas libres de humedad, enviando alertas directamente a tu Móvil mediante MQTT.
Introducción 🧥
La humedad excesiva en espacios cerrados como armarios, vestidores o roperos es un problema silencioso pero devastador. La proliferación de hongos, la aparición de manchas de moho y el persistente olor a humedad pueden arruinar prendas valiosas en cuestión de semanas. Tradicionalmente, este problema se combate con bolsitas de gel de sílice o deshumidificadores pasivos que requieren constante supervisión y recambio manual.
En este tutorial avanzado de Internet de las Cosas (IoT), construiremos una solución inteligente y automatizada: un Sistema de Mitigación de Humedad en Armarios Inteligentes basado en ESP32. Este dispositivo no solo monitoreará en tiempo real la temperatura y la humedad relativa del interior de tu armario, sino que activará de forma autónoma sistemas de ventilación o celdas termoeléctricas (Peltier) cuando los niveles superen el umbral seguro, además de reportar el estado a un broker MQTT para visualizarlo en cualquier lugar.
Materiales y Componentes Necesarios 🛠️
Para llevar a cabo este proyecto con éxito, necesitarás reunir los siguientes componentes de hardware y herramientas de desarrollo software.
| Componente | Cantidad | Descripción | Nivel de Requisito |
|---|---|---|---|
| --- | --- | --- | --- |
| ESP32 NodeMCU | 1 | Microcontrolador con WiFi y Bluetooth integrados. | Obligatorio |
| Sensor DHT22 / AM2302 | 1 | Sensor digital de alta precisión para temperatura y humedad. | Obligatorio |
| --- | --- | --- | --- |
| Módulo Relé de 2 Canales (5V) | 1 | Para controlar cargas de mayor potencia (ventiladores o Peltier). | Obligatorio |
| Mini Ventilador DC 5V/12V | 1 o 2 | Extractor de aire para renovar el volumen dentro del armario. | Obligatorio |
| --- | --- | --- | --- |
| Fuente de Alimentación 5V/2A | 1 | Para alimentar de forma estable el ESP32 y los relés. | Recomendado |
| Cables de conexión Jumper | 1 set | Macho-macho y macho-hembra para el prototipo. | Obligatorio |
Arquitectura del Sistema IoT 🌐
Antes de escribir código o conectar cables, es fundamental comprender cómo se comunican los diferentes elementos de nuestro sistema inteligente. La arquitectura se divide en tres capas principales: la capa de adquisición de datos (sensores), la capa de procesamiento y control (ESP32) y la capa de visualización y conectividad (MQTT/Broker).
Configuración del Entorno de Desarrollo y Librerías 💻
Utilizaremos el IDE de Arduino para programar nuestro ESP32 debido a su versatilidad y la enorme cantidad de librerías disponibles para IoT.
Instalación de Dependencias
Abre tu Arduino IDE y asegúrate de tener instalado el soporte para placas ESP32. A continuación, instala las siguientes librerías desde el Gestor de Librerías (Ctrl + Shift + I):
- DHT sensor library (by Adafruit)
- Adafruit Unified Sensor
- PubSubClient (para la gestión del protocolo MQTT)
Código Fuente del Proyecto 📄
A continuación se presenta el código completo listo para compilar y cargar en tu ESP32. Asegúrate de modificar las credenciales de tu red Wi-Fi y los datos de tu broker MQTT.
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
// Definición de pines y constantes
#define DHTPIN 4 // Pin GPIO donde está conectado el DHT22
#define DHTTYPE DHT22 // Tipo de sensor
#define RELAY_PIN 16 // Pin GPIO para controlar el relé del ventilador
const char* ssid = "TU_SSID_WIFI";
const char* password = "TU_PASSWORD_WIFI";
const char* mqtt_server = "broker.hivemq.com";
WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHTPIN, DHTTYPE);
unsigned long lastMsg = 0;
const long interval = 10000; // Intervalo de lectura en milisegundos
float humedadLimite = 65.0; // Umbral de humedad para activar el sistema
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi conectado");
Serial.println("Dirección IP: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!client.connected()) {
Serial.print("Intentando conexión MQTT...");
String clientId = "ESP32SmartCloset-";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
Serial.println("conectado");
client.publish("smartcloset/status", "Sistema Online");
} else {
Serial.print("falló, rc=");
Serial.print(client.state());
Serial.println(" intentando de nuevo en 5 segundos");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // Apagado por lógica inversa común en módulos relé
dht.begin();
setup_wifi();
client.setServer(mqtt_server, 1883);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
unsigned long now = millis();
if (now - lastMsg > interval) {
lastMsg = now;
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Error al leer del sensor DHT22!");
return;
}
// Publicar datos en tópicos MQTT
char msgH[8];
dtostrf(h, 1, 2, msgH);
client.publish("smartcloset/humidity", msgH);
char msgT[8];
dtostrf(t, 1, 2, msgT);
client.publish("smartcloset/temperature", msgT);
Serial.print("Humedad: ");
Serial.print(h);
Serial.print("% Temperatura: ");
Serial.print(t);
Serial.println("°C");
// Lógica de control de humedad
if (h > humedadLimite) {
digitalWrite(RELAY_PIN, LOW); // Enciende ventilador (lógica inversa)
client.publish("smartcloset/action", "Ventilador ENCENDIDO por exceso de humedad");
Serial.println("¡Alerta! Humedad alta. Ventilador activado.");
} else {
digitalWrite(RELAY_PIN, HIGH); // Apaga ventilador
client.publish("smartcloset/action", "Ventilador APAGADO (Niveles normales)");
Serial.println("Humedad en niveles seguros. Ventilador apagado.");
}
}
}
Calibración y Pruebas del Sistema 🧪
Una vez cargado el código en el ESP32, es momento de verificar el correcto funcionamiento operativo mediante pruebas controladas:
- Monitoreo Serial: Abre el monitor serie a
115200 baudiosy comprueba que se conecte correctamente a la red Wi-Fi y al broker MQTT. - Prueba de Sensor: Respira cerca del sensor DHT22 para simular un incremento repentino de humedad. Observa cómo el valor sube en la consola.
- Verificación de Actuadores: Si la lectura supera el 65% (o el umbral que hayas configurado), el relé debe activarse haciendo clic audible y encendiendo el ventilador conectado.
Preguntas Frecuentes (FAQ) 🙋♂️
¿Puedo integrar este sistema con Home Assistant o Node-RED?
¡Absolutamente! Al utilizar el protocolo MQTT, puedes suscribirte fácilmente a los tópicos `smartcloset/humidity`, `smartcloset/temperature` y `smartcloset/action` desde cualquier plataforma domótica basada en código abierto como Home Assistant para crear automatizaciones avanzadas y gráficos históricos.¿Qué pasa si se pierde la conexión Wi-Fi?
El ESP32 continuará ejecutando su bucle principal de control localmente basándose en la última lectura del sensor, asegurando que la mitigación de humedad no se detenga aunque falle la red inalámbrica.Conclusión y Próximos Pasos 🎉
¡Felicidades! Has desarrollado con éxito un Sistema IoT de Mitigación de Humedad en Armarios Inteligentes utilizando un ESP32. No solo has integrado sensores y actuadores físicos, sino que has implementado conectividad en la nube mediante MQTT para asegurar la protección a largo plazo de tus prendas más preciadas.
Como próximos pasos, te animamos a explorar la adición de una pantalla OLED I2C para ver los datos de forma local en el exterior del armario, o integrar notificaciones push mediante servicios como Telegram Bot API.
Tutoriales relacionados
- Domótica Personalizada: Control de Acceso con Reconocimiento Facial y ESP32-CAMintermediate30 min
- Monitoreo Inteligente de Bodegas: Control de Temperatura y Humedad con ESP32 y Google Sheetsintermediate20 min
- Sistema de Monitoreo Ambiental Acuático Inteligente con ESP32 y Sensores Sumergiblesintermediate25 min
- Sistema IoT de Detección Temprana de Fugas de Agua con ESP32 y Notificaciones Pushintermediate20 min
- Control Inteligente de Acceso a Puertas con RFID y Notificaciones en Tiempo Real usando ESP32intermediate20 min
Comentarios (0)
Aún no hay comentarios. ¡Sé el primero!