#include <Wire.h> // Incluye la biblioteca Wire para comunicación I2C.
#include <Adafruit_GFX.h> // Incluye la biblioteca Adafruit GFX para funciones gráficas.
#include <Adafruit_SSD1306.h> // Incluye la biblioteca Adafruit SSD1306 para controlar la pantalla OLED.
#include "DHT.h" // Incluye la biblioteca DHT para el sensor de temperatura y humedad.
#define SCREEN_WIDTH 128 // Define el ancho de la pantalla OLED en píxeles.
#define SCREEN_HEIGHT 64 // Define la altura de la pantalla OLED en píxeles.
#define DHTPIN 14 // Define el pin al que está conectado el sensor DHT.
#define DHTTYPE DHT22 // Define el tipo de sensor DHT (en este caso, DHT22).
DHT dht(DHTPIN, DHTTYPE); // Crea una instancia del sensor DHT.
#define LEDPIN 19 // Define el pin al que está conectado el LED.
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // Crea una instancia de la pantalla OLED.
void setup(){
Serial.begin(115200); // Inicia la comunicación serie a 115200 baudios.
dht.begin(); // Inicia el sensor DHT.
pinMode(LEDPIN, OUTPUT); // Configura el pin del LED como salida.
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Inicia la pantalla OLED con la dirección I2C 0x3C.
Serial.println(F("failed to start SSD1306 OLED")); // Imprime un mensaje de error si la pantalla no se inicia.
while (1); // Si la pantalla no se inicia, entra en un bucle infinito.
}
}
void loop(){
float temperatura = dht.readTemperature(); // Lee la temperatura del sensor DHT.
float humedad = dht.readHumidity(); // Lee la humedad del sensor DHT.
Serial.print("Temperatura: "); // Imprime "Temperatura: " en el monitor serie.
Serial.println(temperatura); // Imprime el valor de la temperatura en el monitor serie.
Serial.print("Humedad: "); // Imprime "Humedad: " en el monitor serie.
Serial.println(humedad); // Imprime el valor de la humedad en el monitor serie.
oled.clearDisplay(); // Limpia la pantalla OLED.
oled.setTextSize(1); // Establece el tamaño del texto a 1.
oled.setTextColor(WHITE); // Establece el color del texto a blanco.
oled.setCursor(0, 0); // Establece el cursor en la posición (0,0).
oled.print("Temp: "); // Imprime "Temp: " en la pantalla OLED.
oled.println(temperatura); // Imprime el valor de la temperatura en la pantalla OLED.
oled.print("Hum: "); // Imprime "Hum: " en la pantalla OLED.
oled.println(humedad); // Imprime el valor de la humedad en la pantalla OLED.
if (temperatura >= 30.0) { // Si la temperatura es mayor o igual a 30 grados.
digitalWrite(LEDPIN, HIGH); // Enciende el LED.
oled.setTextSize(2); // Establece el tamaño del texto a 2.
oled.setCursor(0, 32); // Establece el cursor en la posición (0,32).
oled.println("Peligro"); // Imprime "Peligro" en la pantalla OLED.
oled.setCursor(0, 48); // Establece el cursor en la posición (0,48).
oled.println("Muy caliente"); // Imprime "Muy caliente" en la pantalla OLED.
} else { // Si la temperatura es menor a 30 grados.
digitalWrite(LEDPIN, LOW); // Apaga el LED.
oled.setTextSize(2); // Establece el tamaño del texto a 2.
oled.setCursor(0, 32); // Establece el cursor en la posición (0,32).
oled.println("Nada pasa"); // Imprime "Nada pasa" en la pantalla OLED.
oled.setCursor(0, 48); // Establece el cursor en la posición (0,48).
oled.println("Todo pasa"); // Imprime "Todo pasa" en la pantalla OLED.
}
oled.display(); // Muestra el contenido en la pantalla OLED.
delay(2000); // Espera 2 segundos antes de volver a ejecutar el loop.
}