#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define MQ2_PIN 4
int mq2_valor;
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup()
{
Serial.begin(115200);
dht.begin();
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C))
{
Serial.println("Error: no se pudo encontrar la pantalla SSD1306");
while(true);
}
display.clearDisplay();
display.display();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Iniciando en ESP32 S3...");
display.display();
delay(2000);
}
void loop()
{
float temp = dht.readTemperature();
float hum = dht.readHumidity();
float mq2_valor = analogRead(MQ2_PIN);
// Validar datos del DHT22
if (isnan(temp) || isnan(hum))
{
Serial.println("Error al leer del DHT22");
return;
}
// Mostrar en Serial
Serial.print("Temp: ");
Serial.print(temp);
Serial.print(" C ");
Serial.print("Hum: ");
Serial.print(hum);
Serial.println(" %");
Serial.print("MQ-2 (Gas): ");
Serial.println(mq2_valor);
// Mostrar en pantalla OLED
display.clearDisplay();
display.setTextSize(1);
// Línea 1
display.setCursor(0, 0);
display.print("Temp: ");
display.print(temp, 2);
display.println(" C");
// Línea 2
display.setCursor(0, 15);
display.print("Hum: ");
display.print(hum, 1);
display.println(" %");
// Línea 3
display.setCursor(0, 30);
display.print("Gas: ");
display.print(mq2_valor);
// Añadir una alerta simple
if (mq2_valor > 300) {
display.setCursor(0, 45);
display.print("ALERTA: Gas!");
}
display.display();
delay(2000);
}