Referencia de la biblioteca WebServer
Visión general
La biblioteca DIYables_ESP32_WebServer ofrece una solución integral para crear servidores web multipágina con soporte de WebSocket en placas ESP32.
Hardware Requerido
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | |
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Ejemplos
Instalación
Pasos R\u00e1pidos
Siga estas instrucciones paso a paso:
- Si es la primera vez que usas el ESP32, consulta el tutorial sobre configurar el entorno para ESP32 en el IDE de Arduino.
- Conecta la placa ESP32 a tu computadora usando un cable USB.
- Inicia el IDE de Arduino en tu computadora.
- Selecciona la placa ESP32 adecuada (p. ej., ESP32) y el puerto COM.
- Abre el Administrador de Bibliotecas haciendo clic en el icono de Administrador de bibliotecas ubicado en la parte izquierda del IDE de Arduino.
- Busca Servidor Web para ESP32 y localiza el mWebSockets de DIYables.
- Haz clic en el botón Instalar para agregar la biblioteca mWebSockets.

Soporte de WebSocket (Integrado)
¡La funcionalidad de WebSocket ya está integrada directamente en esta biblioteca!
La implementación de WebSocket se basa en la excelente mWebSockets library by Dawid Kurek, que ha sido integrada y optimizada específicamente para ESP32 para facilitar su uso:
- No se requiere instalación adicional de bibliotecas - El soporte de WebSocket está integrado
- Optimizado para ESP32 - Implementación específica de la plataforma simplificada
- Compatibilidad con WiFi - Utiliza la pila WiFi nativa de ESP32
- Cumple con RFC 6455 - Soporte completo del protocolo WebSocket
- Comunicación en tiempo real - Intercambio de datos bidireccional
Uso:
- Para todo (Servidor Web + WebSocket): Utilice #include <DIYables_ESP32_WebServer.h>
- ¡Eso es todo! - La funcionalidad de WebSocket está disponible automáticamente cuando sea necesario
- Eficiente en memoria - El código WebSocket no utilizado se elimina automáticamente por el compilador
Créditos: Implementación de WebSocket adaptada de la biblioteca mWebSockets (Licencia LGPL-2.1) por Dawid Kurek, modificada e integrada para una compatibilidad perfecta con ESP32.
Clases de la biblioteca
Clase DIYables_ESP32_WebServer
La clase principal para crear y administrar servidores web.
Constructor
Crea una instancia de servidor web en el puerto especificado (predeterminado: 80).
Métodos
comenzar()
Inicia el servidor web y comienza a escuchar las conexiones entrantes.
Versiones sobrecargadas:
- begin(): Iniciar solo el servidor (la red WiFi debe estar conectada separadamente por su aplicación)
- begin(ssid, password): Conectar a la red WiFi e iniciar el servidor en una sola llamada (enfoque heredado)
setNotFoundHandler()
Configura un manejador personalizado para las respuestas 404 No encontrado.
imprimirEstadoWifi()
Imprime el estado de la conexión WiFi y la dirección IP en el Monitor Serial.
manejarCliente()
Procesa las solicitudes entrantes de los clientes. Esto debe llamarse repetidamente en el bucle principal.
en()
Registra una función manejadora para una URI específica y un método HTTP.
Parámetros:
- uri: La ruta URI (p. ej., '/', '/led', '/api/data')
- method: Método HTTP (GET, POST, PUT, DELETE, etc.)
- fn: Función manejadora que se ejecuta cuando se accede a la ruta
Nota: Esta biblioteca utiliza el método addRoute() en lugar de on(). Consulte a continuación el uso correcto.
agregarRuta()
Registra una función manejadora para una URI específica. Este es el método real que se utiliza en la biblioteca.
Formato de la función RouteHandler:
Los manejadores de rutas deben seguir esta firma exacta:
Parámetros:
- client: referencia a WiFiClient para enviar respuestas
- method: método HTTP como cadena de texto ("GET", "POST", etc.)
- request: URI de la solicitud completa
- params: Parámetros de consulta (objeto QueryParams)
- jsonData: carga útil JSON para solicitudes POST (vacía para GET)
Ejemplos de Implementación de Manejadores:
- Manejador GET básico:
i. Manejador de API JSON (GET y POST):
- Manejador de Parámetros de Consulta:
enviarRespuesta()
Envía una respuesta HTTP al cliente.
Parámetros:
- client: referencia a WiFiClient (proporcionada en la función manejadora)
- content: contenido del cuerpo de la respuesta
- contentType: tipo MIME de la respuesta (predeterminado: "text/html")
Ejemplos de uso:
Métodos de autenticación
habilitarAutenticacion()
Habilita la autenticación HTTP básica para todas las rutas. Una vez habilitada, todas las rutas requieren autenticación.
Parámetros:
- username: Nombre de usuario para la autenticación (máx. 31 caracteres)
- password: Contraseña para la autenticación (máx. 31 caracteres)
- realm: ámbito de autenticación mostrado en el navegador (máx. 63 caracteres, opcional)
Ejemplo de uso:
deshabilitarAutenticación()
Deshabilita la autenticación, haciendo que todas las rutas sean nuevamente públicas.
Ejemplo de uso:
isAuthenticationEnabled()
Devuelve verdadero si la autenticación está actualmente habilitada, de lo contrario, falso.
Ejemplo de uso:
enviar401()
Envía una respuesta 401 No autorizada con el encabezado WWW-Authenticate adecuado. Esto se invoca automáticamente cuando falla la autenticación, pero se puede usar manualmente en manejadores personalizados.
Ejemplo de uso:
Envío manual de respuestas
Para un mayor control sobre las cabeceras HTTP y los códigos de estado:
Acceso a los parámetros de consulta
Estructura de QueryParams
El objeto QueryParams contiene parámetros de consulta analizados desde la URL:
Accediendo a los parámetros de consulta
Funciones auxiliares de parámetros
Crear funciones auxiliares para un acceso más fácil a los parámetros:
Clases de WebSocket (integradas)
Servidor WebSocket
Alias para net::WebSocketServer - simplificado para uso de principiantes.
WebSocket
Alias para net::WebSocket - representa una conexión WebSocket.
Métodos de WebSocket
iniciar()
Inicia el servidor WebSocket.
bucle()
Procesa eventos de WebSocket. Llama a esto en tu bucle principal.
onConnection()
Configura un callback para las nuevas conexiones WebSocket.
onMessage()
Establece la función de devolución de llamada para los mensajes entrantes de WebSocket.
alCerrar()
Establece una función de devolución de llamada para los cierres de las conexiones WebSocket.
enviar()
Envía un mensaje a través del WebSocket.
cerrar()
Cierra la conexión WebSocket.
Métodos adicionales de WebSocket
broadcastTXT()
Transmite un mensaje de texto a todos los clientes WebSocket conectados.
difundirBIN()
Transmite datos binarios a todos los clientes WebSocket conectados.
clientesConectados()
Devuelve el número de clientes WebSocket conectados actualmente.
está escuchando()
Devuelve verdadero si el servidor WebSocket está escuchando activamente las conexiones.
Tipos de eventos de WebSocket
Enumeración de Tipos de Datos
- WebSocket::DataType::TEXT - Tipo de mensaje de texto
- WebSocket::DataType::BINARY - Tipo de datos binarios
Enumeración CloseCode
Códigos de cierre estándar de WebSocket para las razones de terminación de la conexión.
Uso avanzado de WebSocket
Configuración del manejador de eventos
Procesamiento de mensajes
Transmisión de datos de sensores
Métodos HTTP
La biblioteca admite los métodos HTTP estándar:
- HTTP_OBTENER
- HTTP_ENVIAR
- HTTP_ACTUALIZAR
- HTTP_ELIMINAR
- HTTP_PARCHAR
- HTTP_CABECERAS
- HTTP_OPCIONES
Integración de JavaScript del lado del cliente
Conexión WebSocket básica
Enviando comandos
Gestión de mensajes
Ejemplos de WebSocket
Servidor de Eco Simple
Procesamiento de comandos JSON
Implementación del latido
Solución de problemas de WebSocket
Problemas comunes
Conexión WebSocket fallida
- Verificar que el puerto del servidor WebSocket (por defecto: 81) sea accesible.
- Asegurarse de que la dirección IP del ESP32 sea correcta y esté alcanzable.
- Usar las herramientas de desarrollo del navegador para verificar errores de conexión de WebSocket.
Los mensajes no están siendo recibidos
- Verificar el Monitor Serial para los registros de eventos de WebSocket
- Verificar que el formato de los mensajes JSON sea correcto
- Probar con mensajes de texto simples antes de usar JSON
- Asegúrese de que la longitud del mensaje no supere los límites del búfer
Alto uso de memoria
- Limitar el número de conexiones WebSocket concurrentes
- Limpiar los búferes de mensajes regularmente
- Usar un manejo eficiente de cadenas (evitar la concatenación frecuente)
- Monitorear la memoria libre del heap
Herramientas de depuración
Monitoreo del rendimiento
La biblioteca admite plantillas HTML con reemplazo de marcadores de posición:
Marcadores de posición comunes:
- %TEMPERATURE% - Valor de la temperatura
- %LED_STATUS% - Estado del LED
- %QUERY_PARAM% - Valores de los parámetros de consulta
Características avanzadas del servidor web
Soporte de CORS
Permitir solicitudes de origen cruzado para aplicaciones web:
Ayudantes de Respuesta JSON
Simplifica el desarrollo de APIs JSON:
Validación de Solicitudes
Implementar una validación de entradas robusta:
Procesamiento de JSON mejorado
Para el manejo complejo de JSON con la biblioteca ArduinoJson:
Manejo de errores
Manejador 404 por defecto
La biblioteca proporciona una página de error 404 predeterminada. Puedes sobrescribirla:
Mejores Prácticas
- Gestión de memoria: Utiliza la macro F() para literales de cadena almacenados en memoria flash
- Código no bloqueante: Mantén las funciones manejadoras ligeras para evitar bloquear el servidor
- Seguridad: Valida los parámetros de entrada y sanea la salida
- Rendimiento: Utiliza códigos de estado HTTP apropiados y tipos de contenido
- WebSocket: Maneja adecuadamente los estados de conexión e implementa la lógica de reconexión
Depuración
Habilitar la depuración serie para monitorear la actividad del servidor:
Compatibilidad
- ESP32: Completamente soportado
- Biblioteca WiFi: Requerida (incluida con Arduino IDE)
- Requisitos de memoria: Mínimo 32KB de flash, 2KB de RAM
Limitaciones
Limitaciones del servidor web
- Conexiones HTTP simultáneas máximas: 4 (limitación de hardware)
- Longitud máxima de la URL: 256 caracteres
- Marcadores de plantilla: Sin reemplazos anidados
Limitaciones de WebSocket
- Tamaño máximo de mensaje de WebSocket: 1 KB por mensaje
- Número máximo de conexiones WebSocket concurrentes: 4-6 (dependiendo de la memoria disponible)
- Fragmentación de mensajes: se gestiona automáticamente, pero puede afectar el rendimiento
- Tamaño de los mensajes binarios: limitado por la RAM disponible
- Tiempo de espera de la conexión: 60 segundos por defecto (configurable)
Limitaciones de memoria
- Memoria flash mínima requerida: 32 KB
- RAM mínima requerida: 2 KB para la funcionalidad básica
- Sobrecarga de WebSocket: ~200-500 bytes por conexión
- Almacenamiento en búfer de mensajes: ~1 KB por conexión activa