Servidor Web Embebido - Carvaa-7/Challenge1_IoT GitHub Wiki

Servidor Web Embebido

Justificación

En el Challenge #1 se identificó como debilidad que la visualización dependía de un único medio (la pantalla LCD). El Challenge #2 exige un medio adicional/redundante de visualización — el servidor web embebido en el propio ESP32 cumple ese requisito, y además habilita control remoto de la bomba y del silencio de la alarma.

Arquitectura

  • El ESP32 opera en modo WiFi Station, conectándose a la WLAN local (no crea su propio punto de acceso), para que el tablero sea accesible desde cualquier dispositivo en la misma red.
  • Se usa la librería WebServer.h del core de ESP32, corriendo en el core 1, en paralelo con la lógica de fusión — nunca se bloquea el loop() con delay(), así el tablero siempre responde con baja latencia.
  • Autenticación HTTP básica (server.authenticate / requestAuthentication) protege todos los endpoints — el navegador solicita usuario/clave antes de mostrar cualquier dato.
  • Reconexión automática de WiFi no bloqueante: si la WLAN se cae, el sistema reintenta conectar cada 10s sin detener el resto de funciones (sensores, alarma, LCD siguen operando localmente).

Endpoints

Endpoint Método Función
/ GET Página principal del tablero (HTML/CSS/JS embebido, servido desde PROGMEM)
/api/data GET Estado actual en JSON: riesgo, estado, todas las variables de sensores, resultado de evapotranspiración, estado de la bomba, salud de cada sensor
/api/historico GET Últimas ~60 muestras (buffer circular, ~5 min de historia) en JSON, para graficar tendencia
/api/silenciar POST Silencia la alarma sonora por 10 minutos (los LEDs siguen indicando el estado real)
/api/bomba POST ?accion=on|off — controla el módulo relé de la bomba de recirculación

Ejemplo de respuesta /api/data

{
  "ts": "17:44:52",
  "riesgo": 100.0,
  "estado": "CRITICO",
  "escalado": false,
  "nivel": 0.0,
  "peso": 0.0,
  "temp": 22.90,
  "hum": 47.10,
  "presion": 748.76,
  "lux": 133.0,
  "et0": 0.000,
  "evap_calc_ml": 0.0,
  "evap_medida_ml": 0.0,
  "bomba": false,
  "bme_ok": true,
  "bh1750_ok": true,
  "hcsr04_ok": true,
  "hx711_ok": true
}

Tablero web (interfaz)

  • Tarjeta principal con el porcentaje de riesgo y el estado, coloreado según severidad (verde/amarillo/naranja/rojo).
  • Cuadrícula con nivel, peso, temperatura, humedad, luz y ET0.
  • Botón "Silenciar alarma (10 min)".
  • Estado de la bomba de recirculación + botones "Encender bomba" / "Apagar bomba".
  • Actualización automática cada 3 segundos vía fetch() (JavaScript), sin recargar la página.

Robustez evaluada

  • Comportamiento ante caída y reconexión de la WLAN (ver Banco de Pruebas).
  • El sistema sigue operando localmente (LEDs, buzzer, LCD) aunque el tablero web quede temporalmente inaccesible — el servidor web es un medio adicional, no una dependencia crítica del sistema de alarma.
  • Acceso restringido: solo usuarios con credenciales válidas pueden ver datos o accionar la bomba/silencio.