#include #include #include #include #include #include constexpr uint8_t DHT_PIN = 27; constexpr uint8_t OLED_ADDR = 0x3C; DHT dht(DHT_PIN, DHT22); Adafruit_SSD1306 display(128, 64, &Wire, -1); WiFiManager wifiManager; unsigned long lastRead = 0; void setup() { Serial.begin(115200); Wire.begin(21, 22); dht.begin(); if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) { Serial.println("OLED no detectada: revisa direccion y cableado"); while (true) delay(1000); } display.clearDisplay(); display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(0, 0); display.println("Configura el WiFi"); display.println("AP: MER-ESP32"); display.println("192.168.4.1"); display.display(); WiFi.mode(WIFI_STA); wifiManager.setConfigPortalTimeout(180); // Clave del AP de configuracion de esta practica; usa tu propia clave. if (!wifiManager.autoConnect("MER-ESP32", "Practica2026")) { Serial.println("Tiempo agotado: reiniciando"); delay(1000); ESP.restart(); } Serial.print("IP: "); Serial.println(WiFi.localIP()); } void loop() { if (millis() - lastRead < 2500) return; lastRead = millis(); const float temperature = dht.readTemperature(); const float humidity = dht.readHumidity(); display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); if (isnan(temperature) || isnan(humidity)) { display.println("Error de sensor DHT22"); Serial.println("DHT22: lectura no valida"); } else { display.print("T: "); display.print(temperature, 1); display.println(" C"); display.print("H: "); display.print(humidity, 1); display.println(" %"); display.println(); display.println(WiFi.status() == WL_CONNECTED ? "WiFi conectado" : "WiFi desconectado"); Serial.printf("T: %.1f C | H: %.1f %%\n", temperature, humidity); } display.display(); }