¿Qué vamos a hacer?
¡Bienvenido a un nuevo nivel de interacción con tu entorno usando tu ESP32-C3 SuperMini! En este tutorial, aprenderás a conectar y leer datos de dos sensores ambientales muy comunes en tu kit: el Módulo DHT11, que mide temperatura y humedad, y el Módulo de Resistor Fotosensible (LDR), que detecta la intensidad de la luz.
Al final de este tutorial, serás capaz de:
- Conectar el sensor DHT11 y obtener lecturas de temperatura y humedad.
- Conectar el sensor LDR y medir la intensidad de la luz ambiental.
- Mostrar estos valores en el Monitor Serial del IDE de Arduino y, opcionalmente, en tu pantalla OLED (si ya completaste el Tutorial 3).
Requisitos Previos:
Antes de comenzar, asegúrate de tener lo siguiente:
- ESP32-C3 SuperMini (1 unidad)
- Módulo DHT11 (1 unidad)
- Módulo de Resistor Fotosensible (LDR) (1 unidad)
- Protoboard de 830 puntos (1 unidad)
- Resistencia de 10K Ohm (para el LDR)
- Cables Dupont H-M y M-M
- IDE de Arduino con la plataforma ESP32 instalada y configurada (Tutorial 0).
- (Opcional): Pantalla OLED de 0.96 pulgadas (si quieres mostrar los datos en ella, necesitarás las librerías del Tutorial 3: U8g2).
Actividad 1: Midiendo Temperatura y Humedad con el Sensor DHT11
Dificultad: Baja
Objetivo: Conectar el Módulo DHT11 a tu ESP32-C3 SuperMini y leer los valores de temperatura y humedad.
Descripción: El sensor DHT11 es muy popular por su facilidad de uso para obtener datos de temperatura y humedad relativa. En esta actividad, lo conectarás, instalarás la librería necesaria y programarás tu ESP32-C3 para que muestre estas lecturas en el Monitor Serial.
Materiales que necesitas:
- ESP32-C3 SuperMini
- Módulo DHT11 (El modulo sensor Azul)
- Cables Dupont
¿Qué es el Módulo DHT11?
El Módulo DHT11 es un sensor digital que te permite medir la temperatura y la humedad relativa del aire. Es muy fácil de usar porque solo necesita un pin de datos para enviar la información a tu ESP32-C3. Es ideal para proyectos de estaciones meteorológicas caseras, control de clima en interiores o sistemas de riego inteligentes.
Conexión del circuito (Módulo DHT11):
¡Antes de conectar, asegúrate de que tu ESP32-C3 SuperMini esté desconectada del computador!
- Pin
VCC
o+
del DHT11 a3.3V
en tu ESP32-C3. - Pin
GND
o-
del DHT11 aGND
en tu ESP32-C3. - Pin
Data
del DHT11 aGPIO 4
en tu ESP32-C3.
Esquemático y Simulación en Wokwi:
Observa cómo se conecta el sensor DHT11 a tu ESP32-C3 SuperMini. Haz clic en la imagen para abrir la simulación en Wokwi. Allí podrás ver las lecturas de temperatura y humedad simuladas en el Monitor Serial.
Instalación de Librerías Esenciales para el DHT11:
Para que tu ESP32-C3 pueda «hablar» con el sensor DHT11, necesitamos instalar una librería específica.
- Abre tu IDE de Arduino.
- Ve al menú superior y haz clic en
Herramientas
>Administrar Bibliotecas...
. - En la barra de búsqueda, escribe
DHT sensor library
y presiona Enter. - Busca la librería que dice «DHT sensor library» (publicada por Adafruit) y haz clic en
Instalar
. - También busca e instala la librería
Adafruit Unified Sensor
. Es una dependencia de la librería DHT y es necesaria para su correcto funcionamiento.
Una vez instaladas ambas, ¡estás listo para el código!
#include <DHT.h> // Incluye la librería DHT para el sensor #include <DHT_U.h> // Incluye la librería unificada de sensores de Adafruit (requerida por DHT) // Define el pin donde está conectado el sensor DHT11 y el tipo de sensor #define DHTPIN 4 // Pin GPIO 4 de la ESP32-C3 #define DHTTYPE DHT11 // Especificamos que es un sensor DHT11 // Crea un objeto DHT con el pin y tipo definidos DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(115200); // Inicia la comunicación serial a 115200 baudios Serial.println(F("Iniciando lectura del sensor DHT11...")); dht.begin(); // Inicializa el sensor DHT } void loop() { // Las lecturas del DHT pueden tomar un tiempo (aproximadamente 250ms). // Es una buena práctica agregar un pequeño retardo entre lecturas para no saturar el sensor. delay(2000); // Espera 2 segundos entre cada lectura // Lee la humedad (en porcentaje) float h = dht.readHumidity(); // Lee la temperatura (en grados Celsius) float t = dht.readTemperature(); // Verifica si las lecturas fueron exitosas (no son NaN - Not a Number) if (isnan(h) || isnan(t)) { Serial.println(F("Error al leer del sensor DHT11. ¡Revisa las conexiones!")); } else { // Si las lecturas son válidas, las mostramos en el Monitor Serial Serial.print(F("Humedad: ")); Serial.print(h); Serial.print(F(" %\t")); Serial.print(F("Temperatura: ")); Serial.print(t); Serial.println(F(" *C")); } }
Actividad 2: Midiendo la Intensidad de Luz con el Resistor Fotosensible (LDR)
Dificultad: Baja
Objetivo: Conectar el Módulo LDR a tu ESP32-C3 SuperMini y leer el valor de la intensidad de luz ambiental.
Descripción: El Resistor Fotosensible (LDR) es un componente que cambia su resistencia eléctrica en función de la cantidad de luz que recibe. Cuanta más luz, menor su resistencia. En esta actividad, aprenderás a usar este cambio de resistencia para medir la luz ambiental en tu entorno.
Materiales que necesitas:
- ESP32-C3 SuperMini
- Módulo de Resistor Fotosensible (LDR)
- Resistencia de 10K Ohm
- Cables Dupont
- Protoboard (esencial para esta conexión)
¿Qué es el Módulo de Resistor Fotosensible (LDR)?
El Módulo de Resistor Fotosensible (LDR) es un sensor de luz que viene en una pequeña placa. Está listo para usar y simplifica la detección de luz:
- Detecta la intensidad de la luz ambiental.
- Posee un potenciómetro azul para ajustar su sensibilidad (definir un umbral).
- Entrega una salida digital (pin
DO
) que indica si la luz está por encima o por debajo de ese umbral (es decir, si hay «mucha luz» o «poca luz»).
Es ideal para proyectos que reaccionan a la luz, como encender una luz al oscurecer o activar una alarma ante cambios de iluminación.
Conexión del circuito (Módulo LDR):
¡Asegúrate de que tu ESP32-C3 SuperMini esté desconectada del computador antes de realizar las conexiones!
- Conecta un extremo de tu LDR a
3.3V
de la ESP32-C3. - Conecta el otro extremo del LDR al
GPIO 1
de tu ESP32-C3 (este es un pin analógico). - Conecta una patilla de la Resistencia de 10K Ohm al mismo
GPIO 1
donde conectaste el LDR. - Conecta la otra patilla de la Resistencia de 10K Ohm a
GND
de la ESP32-C3.
Este arreglo crea un «divisor de voltaje» que permite a la ESP32-C3 leer los cambios de luz como cambios de voltaje.
Esquemático y Simulación en Wokwi:
Observa cómo se conectan el LDR y la resistencia de 10K Ohm. Haz clic en la imagen para abrir la simulación en Wokwi. Allí podrás simular los cambios de luz y ver cómo varían las lecturas en el Monitor Serial.
Código para la Actividad 2:
Para esta actividad, no necesitas librerías adicionales, ya que analogRead()
es una función nativa de Arduino. Este código leerá el valor del LDR y lo mostrará en el Monitor Serial.
// Define el pin donde está conectado el pin de Salida Digital (DO) del módulo LDR. #define LDR_DOUT_PIN GPIO_NUM_5 void setup() { Serial.begin(115200); // Inicia la comunicación serial Serial.println(F("Iniciando lectura del módulo LDR (Salida Digital)...")); pinMode(LDR_DOUT_PIN, INPUT); // Configura el pin como entrada } void loop() { // Lee el estado digital del pin DO del módulo LDR int ldrState = digitalRead(LDR_DOUT_PIN); Serial.print(F("Estado de Luz (DO): ")); if (ldrState == HIGH) { // Si la salida es HIGH, significa que la luz está por encima o por debajo del umbral, // dependiendo de cómo esté configurado internamente el módulo. Generalmente, HIGH es "oscuro" o "no hay luz" // cuando el potenciómetro se ajusta para detectar baja luz. Serial.println(F("OSCURO / LUZ BAJA")); } else { // LOW es lo contrario. Serial.println(F("CLARO / LUZ ALTA")); } // Puedes probar a cubrir el sensor o apuntarle con una luz y ajustar el potenciómetro // para ver cómo cambia el estado en el Monitor Serial. delay(500); // Pequeña pausa }
Actividad 3: Mostrando Datos de Sensores en la Pantalla OLED (Opcional)
Dificultad: Media-Alta (si no se ha hecho el Tutorial 3)
Objetivo: Integrar las lecturas del DHT11 y el LDR y mostrarlas de forma clara en tu pantalla OLED.
Descripción: Esta actividad es opcional, pero altamente recomendada si ya completaste el Tutorial 3 del OLED. Aquí uniremos todo para crear una mini estación meteorológica y de luz, mostrando los valores de temperatura, humedad y luz en tu pequeña pantalla.
Materiales que necesitas:
- ESP32-C3 SuperMini
- Módulo DHT11
- Módulo de Resistor Fotosensible (LDR)
- Protoboard de 830 puntos
- Resistencia de 10K Ohm
- Cables Dupont
- Pantalla OLED de 0.96 pulgadas (con librería U8g2 instalada, como en el Tutorial 3).
Conexión del circuito:
¡Asegúrate de que tu ESP32-C3 SuperMini esté desconectada del computador!
- Conexiones OLED (I2C): (Revisa el Tutorial 3)
VCC
a3.3V
GND
aGND
SDA
aGPIO 8
SCL
aGPIO 9
- Conexiones DHT11: (Revisa la Actividad 1 de este tutorial)
VCC
a3.3V
GND
aGND
Data
aGPIO 4
- Conexiones LDR: (Revisa la Actividad 2 de este tutorial)
VCC
a3.3V
GND
aGND
DO
(Digital Output) aGPIO 5
Esquemático y Simulación en Wokwi:
Aquí verás cómo se conectan todos los componentes: el OLED, el DHT11 y el LDR. Haz clic en la imagen para abrir la simulación en Wokwi y ver cómo los datos de los sensores se actualizan en la pantalla OLED.
Código para la Actividad 3 (Integración con OLED):
Este código combina las lecturas de los sensores con la visualización en el OLED. Asegúrate de tener instaladas las librerías DHT Sensor Library
, Adafruit Unified Sensor
y U8g2
.
#include <DHT.h> // Librería para el sensor DHT11 #include <DHT_U.h> // Librería unificada de sensores de Adafruit #include <U8g2lib.h> // Librería U8g2 para la pantalla OLED #ifdef U8X8_HAVE_HW_SPI #include <SPI.h> #endif #ifdef U8X8_HAVE_HW_I2C #include <Wire.h> #endif // Define el tipo de sensor DHT y el pin #define DHTPIN 4 #define DHTTYPE DHT11 // Especificamos que es un sensor DHT11 // Crea el objeto DHT DHT dht(DHTPIN, DHTTYPE); // Define el pin para el LDR (salida digital DO) #define LDR_DOUT_PIN GPIO_NUM_5 // Constructor U8g2 para tu OLED (revisa el Tutorial 3, Actividad 4 si no estás seguro) U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE); void setup() { Serial.begin(115200); dht.begin(); // Inicializa el sensor DHT pinMode(LDR_DOUT_PIN, INPUT); // Configura el pin del LDR como entrada u8g2.begin(); // Inicializa la pantalla OLED u8g2.setFontMode(1); // Modo de fuente transparente u8g2.setFontDirection(0); // Orientación horizontal } void loop() { delay(2000); // Espera 2 segundos entre lecturas para no saturar el DHT11 // Lecturas del sensor DHT11 float h = dht.readHumidity(); float t = dht.readTemperature(); // Lectura del estado digital del módulo LDR int ldrState = digitalRead(LDR_DOUT_PIN); String estadoLuz = "Desconocido"; if (ldrState == HIGH) { estadoLuz = "Oscuro"; // O "Poca Luz", dependiendo de cómo ajuste el potenciómetro } else { estadoLuz = "Claro"; // O "Mucha Luz" } u8g2.firstPage(); // Inicia el ciclo de dibujo de la pantalla do { u8g2.clearBuffer(); // Limpia el buffer de la pantalla // --- Mostrar Temperatura --- u8g2.setFont(u8g2_font_helvB10_tr); // Fuente para temperatura u8g2.setCursor(0, 12); if (isnan(t)) { u8g2.print("Temp: Error"); } else { u8g2.print("Temp: "); u8g2.print(t, 1); // Muestra con un decimal u8g2.print(" C"); } // --- Mostrar Humedad --- u8g2.setCursor(0, 32); if (isnan(h)) { u8g2.print("Hum: Error"); } else { u8g2.print("Hum: "); u8g2.print(h, 1); // Muestra con un decimal u8g2.print(" %"); } // --- Mostrar Estado de Luz --- u8g2.setCursor(0, 52); u8g2.print("Luz: "); u8g2.print(estadoLuz); } while (u8g2.nextPage()); // Pasa a la siguiente página // Mostrar también en el Monitor Serial (para depuración) Serial.print(F("Temp: ")); Serial.print(t); Serial.print(F(" C | ")); Serial.print(F("Hum: ")); Serial.print(h); Serial.print(F(" % | ")); Serial.print(F("Luz: ")); Serial.println(estadoLuz); }