Sistema de Invernadero Inteligente con ESP32
Antonio Romero


Hace unos días, uno de vosotros me escribió preguntándome si podía ayudarle con un proyecto de invernadero inteligente. Quería algo funcional pero que fuera fácil de entender para empezar en el mundo del ESP32 y los sensores.
Me pareció una petición genial, así que me puse manos a la obra y creé este proyecto ejemplo. Y pensé: si le sirve a él, seguro que a muchos más de vosotros también os viene bien como punto de partida. Así que aquí lo comparto con todos.
Este proyecto es perfecto si:
Estás empezando con ESP32 y quieres un ejemplo práctico
Quieres aprender a usar sensores y actuadores
Nunca has trabajado con pantallas OLED
Te gustaría entender cómo hacer un sistema automático
Buscas un proyecto útil que puedas mejorar después
¿Qué hace este sistema?
He intentado que sea completo pero sin complicarlo demasiado. Incluye lo esencial:
🌡️ Lee temperatura y humedad del ambiente con un DHT22
💧 Mide la humedad del suelo para saber cuándo regar
🚰 Activa una bomba automáticamente cuando hace falta agua
📊 Muestra todo en una pantalla OLED para que veáis qué está pasando
🚦 Usa LEDs de colores como indicadores visuales
⚠️ Sistema de alertas para condiciones críticas
Es un ejemplo funcional que podéis usar tal cual, o modificar según vuestras necesidades. Todo el código está súper comentado para que entendáis cada parte.
Materiales que necesitáis
Os dejo exactamente lo que usé para este ejemplo:
Componentes electrónicos:
1x ESP32 (cualquier modelo básico vale)
1x Pantalla OLED 128x64 I2C
1x Sensor DHT22
1x Sensor de humedad de suelo (preferiblemente capacitivo)
1x Módulo relé de 5V de 1 canal
3x LEDs: verde, amarillo y rojo
3x Resistencias de 220Ω
1x Bomba de agua sumergible de 5V
Cables Dupont y una protoboard
Herramientas básicas:
Cable micro-USB para programar
Multímetro (si tenéis uno)
Soldador (opcional, para hacerlo permanente)
Todo esto son componentes muy comunes que seguro muchos ya tenéis, o que podéis conseguir fácilmente.
Simulación online en Wokwi
Antes de que compréis componentes o hagáis el montaje físico, he preparado una simulación completa en Wokwi para que podáis probar el proyecto virtualmente.
🔗 Acceder a la simulación en Wokwi
¿Qué es Wokwi? Es un simulador online gratuito donde podéis ver el proyecto funcionando sin necesidad de hardware. Podéis:
Ver cómo funciona el código en tiempo real
Modificar valores y ver qué pasa
Probar cambios antes de hacerlos en físico
Aprender sin miedo a romper nada
Cómo usar la simulación:
Haced clic en el enlace de arriba
Pulsad el botón verde "Start Simulation"
Veréis la pantalla OLED mostrando datos
Podéis hacer clic en el sensor de humedad para cambiar valores
Observad cómo reacciona el sistema
Es perfecto para entender cómo funciona todo antes de montarlo. Os recomiendo que juguéis con la simulación primero.
Esquema de conexiones paso a paso
Voy a explicarlo bien claro para que no haya dudas. Si es vuestro primer proyecto con ESP32, tomad nota:
Sensor DHT22 (temperatura y humedad)
DHT22 ESP32 VCC → 3.3V
DATA → GPIO 4
GND → GND
Pantalla OLED (aquí mostramos la info)
OLED ESP32 VCC → 3.3V
GND → GND
SDA → GPIO 21 (pin I2C)
SCL → GPIO 22 (pin I2C)
Sensor de humedad del suelo
Sensor ESP32 VCC → 3.3V
GND → GND
AOUT → GPIO 34 (pin analógico)
Módulo relé (para controlar la bomba)
Relé ESP32 VCC → 5V (pin VIN)
GND → GND
IN → GPIO 25
LEDs indicadores (con sus resistencias)
LED Verde → GPIO 26 → Resistencia 220Ω → GND
LED Amarillo → GPIO 27 → Resistencia 220Ω → GND
LED Rojo → GPIO 14 → Resistencia 220Ω → GND
Bomba de agua (¡importante!)
Bomba (+) → Terminal COMÚN del relé
Bomba (-) → GND de fuente externa
5V Relé NO → +5V de fuente externa
⚠️ Importante para principiantes: La bomba NO se conecta directamente al ESP32. Necesita su propia fuente de alimentación externa de 5V. El ESP32 solo controla el relé, que es el interruptor que enciende y apaga la bomba. Esto es básico pero fundamental.
Preparando el software (paso a paso)
Si es vuestra primera vez con ESP32, seguid esto al pie de la letra:
Paso 1: Descargar Arduino IDE
Id a arduino.cc/software y descargad la versión para vuestro sistema operativo. Es gratis y fácil de instalar.
Paso 2: Configurar ESP32 en Arduino IDE
Esta parte confunde a muchos al principio, así que lo explico bien:
Abrid Arduino IDE
Id a Archivo > Preferencias
Donde dice "Gestor de URLs adicionales de tarjetas", copiad y pegad esto:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Aceptad y cerrad
Ahora id a Herramientas > Placa > Gestor de tarjetas
En el buscador escribid "ESP32"
Instalad "esp32 by Espressif Systems"
Esperad a que termine (tarda un poco)
Paso 3: Instalar las librerías
Las librerías son como extensiones que añaden funciones. Necesitamos estas:
Id a Sketch > Incluir Librería > Administrar Bibliotecas
Buscad e instalad una por una:
Adafruit SSD1306 (para la pantalla OLED)
Adafruit GFX Library (para gráficos)
DHT sensor library by Adafruit (para el sensor)
Adafruit Unified Sensor (necesaria para el DHT)
Paso 4: Cargar el código
Copiad el código completo que compartí en wokwi
En Herramientas > Placa, seleccionad vuestro ESP32
En Herramientas > Puerto, elegid el puerto COM que aparezca
Pulsad el botón Subir (→)
Esperad a que compile y suba (veréis una barra de progreso)
Si todo va bien, veréis "Subida completada". ¡Ya está programado!
Calibración del sensor de humedad
Esto es importante para que las lecturas sean precisas. Os explico cómo lo hice:
Proceso simple de calibración:
Medida en seco (valor máximo):
Dejad el sensor en el aire, sin tocar nada
Abrid el Monitor Serial (icono de lupa arriba a la derecha)
Poned la velocidad a 115200
Anotad el valor que aparece (suele ser cerca de 4095)
Medida húmedo (valor mínimo):
Meted solo las puntas del sensor en agua
Anotad el valor mínimo (suele ser cerca de 1500)
Ajustar en el código: Buscad esta línea en el código:
soilMoisture = map(soilValue, 4095, 1500, 0, 100);
Cambiad 4095 y 1500 por vuestros valores medidos.
Nota para principiantes: No os preocupéis si no sale exacto. Con valores aproximados también funciona. Lo importante es que entendáis el concepto.
Entendiendo cómo funciona
Si sois nuevos en esto, os explico la lógica básica:
Los tres LEDs:
Es súper simple de entender con solo mirar:
🟢 Verde: Todo bien, sistema funcionando normal
🟡 Amarillo: Está regando o hay algo fuera de lo ideal
🔴 Rojo: Algo va mal y necesita atención
El ciclo automático:
El sistema hace esto en bucle:
Lee los sensores cada 2 segundos
Comprueba si la tierra está seca
Si está seca, activa la bomba por 5 segundos
Actualiza la pantalla con los datos nuevos
Enciende el LED según el estado
Vuelve al paso 1
La información en pantalla:
He diseñado la pantalla para que sea clara y fácil de leer:
Primera línea: Nombre del proyecto
Temperatura actual
Humedad del aire
Humedad del suelo (número + barra visual)
Estado actual del sistema
Problemas comunes (y soluciones)
Como esto es un ejemplo educativo, os cuento los errores típicos:
"La pantalla no enciende"
Revisad las conexiones I2C (GPIO 21 y 22)
Probad a cambiar 0x3C por 0x3D en el código
Verificad con el multímetro que lleguen 3.3V
"Sale 'nan' en el DHT22"
Comprobad la alimentación (3.3V)
Verificad que DATA esté en GPIO 4
Dejad pasar 2-3 segundos antes de leer
"La bomba no arranca"
El relé debe hacer "click" cuando se activa
Verificad la alimentación externa de la bomba
Comprobad que el pin GPIO 25 mande señal
"Los valores del sensor de suelo son raros"
Recalibrad siguiendo el proceso de arriba
Asegurad que todas las conexiones estén firmes
Si usáis sensor resistivo, cambiad a capacitivo
No os frustréis: Estos problemas son normales cuando empezáis. Forma parte del aprendizaje.
Mis consejos para principiantes
Después de crear este ejemplo, os dejo algunas recomendaciones:
✅ Empezad simple: Usad el código tal cual primero, sin modificar nada
✅ Leed los comentarios: Todo el código está comentado para que lo entendáis
✅ Usad el Monitor Serial: Os ayudará a ver qué está pasando
✅ Haced pruebas: Probad a meter el dedo en la tierra para ver cómo reacciona
✅ Preguntad: Si tenéis dudas, escribidme. Estoy para ayudar
✅ Documentad: Haced fotos del proceso, os servirá para futuros proyectos
✅ Compartid: Si conseguís que funcione, enseñadlo a la comunidad
Para cerrar
Este proyecto lo creé como ejemplo para responder a la pregunta de un miembro de la comunidad, pero creo que puede ser útil para muchos más que estáis empezando.
Si montáis este proyecto:
Etiquetadme en vuestras fotos en redes
Contadme qué problemas tuvisteis (para mejorar el tutorial)
Compartid vuestras mejoras con la comunidad
Preguntad cualquier duda que tengáis
Recordad que todos empezamos desde cero.
¡Ánimo con vuestros proyectos! Y no olvides seguirnos 🚀
