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.hdel core de ESP32, corriendo en el core 1, en paralelo con la lógica de fusión — nunca se bloquea elloop()condelay(), 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.