/*
Nombre del Archivo: ejercicio3_nodeMCU.ino
Autor: Tu Nombre
Fecha: 12/05/2025
Objetivo:
Este programa muestra en pantalla OLED la temperatura y humedad medidas
por un DHT22. Si la temperatura supera 26 °C, se enciende un LED y
aparece un aviso de “Alta temperatura”. Al presionar un pulsador,
en lugar de los datos del DHT, se muestra si es “DÍA” o “NOCHE” según
la lectura de la LDR.
*/
// —– Librerías —–
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHT.h"
// —– Definiciones de pines —–
#define OLED_SDA D2
#define OLED_SCL D1
#define DHT_PIN D5
#define LED_PIN D6
#define BUTTON_PIN D7
#define LDR_PIN A0
// —– Configuración DHT —–
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);
// —– Parámetros OLED —–
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);
void setup() {
// Inicializa serie
Serial.begin(9600);
Serial.println("Ejercicio 3: DHT22 + LDR + OLED + LED + Pulsador");
// Configura pines
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
// Inicia DHT
dht.begin();
// Inicia OLED
Wire.begin(OLED_SDA, OLED_SCL);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("Error al iniciar OLED");
while (true); // no continuar
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
}
void loop() {
int sensorValue = analogRead(A0); // Leer el valor del ADC (0 - 1023)
float voltage = sensorValue * (3.3 / 1023.0); // Convertir a voltaje (máx 3.3V)
// Mostrar en Serial Monitor
Serial.print("Voltaje: ");
Serial.println(voltage);
display.clearDisplay();
display.setCursor(0, 0);
if(digitalRead(BUTTON_PIN) == HIGH) {
// Mostrar día o noche según LDR
if (voltage > 3.0) {
display.println("DIA");
} else {
display.println("NOCHE");
}
// Apaga LED de aviso en este modo
digitalWrite(LED_PIN, LOW);
} else {
// Modo normal: temperatura y humedad
float temp = dht.readTemperature();
float hum = dht.readHumidity();
// Comprobación de lectura válida
if (isnan(temp) || isnan(hum)) {
display.println("Error lectura DHT");
} else {
display.print("Temp: ");
display.print(temp, 1);
Serial.println(temp);
display.println(" C");
display.print("Hum: ");
display.print(hum, 1);
display.println(" %");
// Si supera umbral
if (temp > 28.0) {
display.clearDisplay();
digitalWrite(LED_PIN, HIGH);
display.println();
display.setTextSize(2);
display.setTextColor(INVERSE);
display.println("TEMPERATURA ALTA");
display.setTextSize(1);
display.setTextColor(WHITE);
} else {
digitalWrite(LED_PIN, LOW);
}
}
}
display.display();
delay(1000);
}