MER / Práctica 3

Una estación ambiental con conexión configurable

Tres elementos de una estación ambiental: configurar la conexión, adquirir la medida y presentarla en una OLED.

20/10/2026Guía de desarrolloWiFiManager · OLED · DHT22

01 / Qué se pide resolver

El demostrador utiliza ESP32, DHT22 y una OLED SSD1306 I²C de 128 × 64. WiFiManager permite introducir los datos de red desde un portal, mientras la pantalla presenta temperatura y humedad sin incluir la clave Wi-Fi en el sketch.

Ver el enunciado del profesor ↗

Material

  • ESP32 clásico, cable USB de datos y protoboard.
  • Sensor DHT22 con un pull-up de 10 kΩ entre DATA y 3,3 V cuando el módulo no lo incorpore.
  • Pantalla SSD1306 con I²C y niveles de lógica de 3,3 V, más sus conductores de conexión.
  • Una red de 2,4 GHz y un navegador en móvil u ordenador para completar el asistente.

02 / Conexiones

ComponenteSeñalESP32
DHT22VCC / DATA / GND3V3 / GPIO27 / GND
OLEDVCC / GND3V3 / GND (comprueba tu módulo)
OLEDSDA / SCLGPIO21 / GPIO22
DHT22Pull-up de DATA10 kΩ a 3V3, si no está integrada

Monta con la fuente desconectada y comprueba las etiquetas: diferentes módulos cambian el orden de sus conexiones. Verifica también la dirección I²C; 0x3C es habitual, pero tu unidad puede necesitar otra en el programa.

Bibliotecas de Arduino IDE

Instala WiFiManager de tzapu, DHT sensor library de Adafruit, Adafruit Unified Sensor, Adafruit GFX Library y Adafruit SSD1306. WiFi y Wire pertenecen al paquete de placas ESP32.

03 / Programa y configura

Descargar sketch completo ↓
#include <WiFi.h>
#include <WiFiManager.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>

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();
}
  1. Configura en el IDE el modelo y el puerto, carga el programa y abre el monitor a 115200 baudios.
  2. En el primer arranque, conéctate a la red MER-ESP32 usando la clave de ejemplo del sketch.
  3. Abre el portal cautivo; si no aparece, visita http://192.168.4.1 mientras estás conectado a esa red.
  4. Escoge la red del aula y facilita su clave al portal. La placa conserva esos parámetros y establece la conexión.
  5. Confirma la dirección IP por serie y revisa la presentación de los valores en la pantalla.

En los arranques posteriores se intenta recuperar la red almacenada. Si una prueba requiere volver a configurarla, puede ejecutarse una sola vez wifiManager.resetSettings() antes de autoConnect y después retirar esa línea.

04 / Prueba la visualización

Los controles de esta pantalla generan valores de ejemplo para ensayar la visualización. No están leyendo un sensor físico.

SIMULACIÓN · OLED 128 × 64T: 23.5 C
H: 45 %WiFi conectado

05 / Diagnóstico

SíntomaComprobación
OLED apagadaAlimentación, SDA/SCL, dirección I²C y modelo SSD1306.
Lectura no válida / NaNRevisa que DATA corresponda a GPIO27, el tipo sea DHT22 y exista pull-up; deja un intervalo mínimo de dos segundos.
No aparece el portalEntra en la red creada por el ESP32 y abre 192.168.4.1 para comprobar la configuración y los datos guardados.
No conecta al routerComprueba banda de 2,4 GHz, alcance y contraseña.
Reinicia después de 3 minutosNo se logró conectar antes de que venciera el tiempo concedido al portal.

Organización del material de referencia

La referencia docente separa pantalla en oled.h, red en wm.h y sensor en dht22.h. El arranque prepara OLED y conexión; después se inicializa el sensor y loop renueva las medidas.

El recurso de programa disponible utiliza las bibliotecas Adafruit y asigna DATA a GPIO27. No debe mezclarse su cableado con el de un ejemplo docente que use otros pines o bibliotecas.

06 / Comprobación y entrega

La evidencia debe incluir programa, fotografía, portal sin claves visibles y una tabla que contraste lo previsto con lo observado. Compila y verifica el sketch en la placa que uses en clase.

¿Qué añade WiFiManager a esta práctica?

Siguiente práctica: HTTP y PHP →

Documentación