Servidor API REST de ESP32 con JSON - Tutorial Completo
Ejemplo de WebServerJson - Servidor API REST
Visión general
Este ejemplo demuestra cómo crear un servidor de API REST en ESP32 que maneja solicitudes y respuestas JSON, perfecto para aplicaciones web modernas y backends de aplicaciones móviles.
Características
- Puntos finales de la API REST con manejo de solicitudes y respuestas JSON
- Procesamiento de solicitudes POST con análisis de datos JSON
- Puntos finales GET para la obtención de datos
- Respuestas JSON profesionales con códigos de estado HTTP adecuados
- Manejo de errores con mensajes de error JSON apropiados
- Soporte CORS para solicitudes entre orígenes
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) |
Instalación de la biblioteca
Sigue 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.
- Abre 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 Administrador de Bibliotecas en el lado izquierdo del IDE de Arduino.
- Busca Web Server for ESP32 y localiza la biblioteca mWebSockets de DIYables.
- Haz clic en el botón Instalar para añadir la biblioteca mWebSockets.

Ejemplo de JSON de servidor web
- En el IDE de Arduino, vaya a Archivo Ejemplos Servidor Web para ESP32 WebServerJson para abrir el código de ejemplo
Puntos finales de la API
OBTENER /api/data
Devuelve un mensaje de éxito con una marca de tiempo en formato JSON.
Respuesta:
El valor de la marca de tiempo representa los milisegundos transcurridos desde que se inició el ESP32 (a partir de la función millis()).
POST /api/data
Acepta datos JSON y devuelve el valor de la clave recibida.
Solicitud:
Respuesta:
Instrucciones de configuración
1. Configuración de red
Edita las credenciales de WiFi en el archivo WebServerJson.ino:
2. Subir código y monitorear la salida
- Conecta tu ESP32 a tu computadora
- Selecciona la placa y el puerto correctos en Arduino IDE
- Sube el sketch WebServerJson.ino
- Abre el Monitor Serial (9600 baudios)
- Espera la conexión WiFi
- Toma nota de la dirección IP mostrada
- Si no ves la dirección IP en el Monitor Serial, pulsa el botón de reinicio en la placa ESP32
Uso
Pruebas con cURL
Reemplaza your-esp32-ip con la dirección IP real que se muestra en tu Monitor Serial.
Prueba de la solicitud GET
Please provide the English text you want translated to Spanish.
La marca de tiempo muestra los milisegundos desde el inicio del ESP32.
Prueba de una solicitud POST con datos JSON
Salida esperada:
Prueba de solicitud POST con datos diferentes
Salida esperada:
Prueba de JSON inválido (Respuesta de error)
Salida esperada:
Prueba de cuerpo JSON ausente (respuesta de error)
Salida esperada:
Prueba de método no soportado (Respuesta de error)
Salida esperada:
Prueba de endpoint inexistente (error 404)
Salida esperada:
Pruebas con Postman
Prueba de solicitud GET
- Crear una nueva solicitud GET
- Establece la URL en http://your-esp32-ip/api/data
- Envía la solicitud
- Verifica que la respuesta contenga el estado, el mensaje y la marca de tiempo
Solicitud POST de prueba
- Crear una nueva solicitud POST
- Establece la URL a http://your-esp32-ip/api/data
- Añade la cabecera: Content-Type: application/json
- Añade el cuerpo JSON: {"key": "test_value"}
- Envía la solicitud
- Verifica que la respuesta muestre el valor de la clave recibido
Pruebas de respuestas de error
Prueba el manejo de errores enviando solicitudes inválidas como se muestra en el código de ejemplo:
Datos JSON faltantes
{"status": "error","message": "No se recibieron datos JSON"}
Formato JSON inválido
{"status": "error","message": "JSON inválido"}
Campo clave faltante
Esperado: La clave por defecto será "none" según el código de ejemplo: doc["key"] | "none"
Método HTTP no soportado
{"status": "error","message": "Método no permitido"}
Explicación del código
Configuración de rutas
Firma de la función manejadora
Todas las funciones de manejador deben seguir esta firma:
Detección de métodos y procesamiento de JSON
Ejemplos de integración
Frontend de JavaScript
Cliente de Python
Control de LED
Obtener estado
Uso
Manejo de errores
Códigos de estado HTTP
- 200: Éxito
- 400: Solicitud inválida (JSON inválido, parámetros ausentes)
- 404: Endpoint no encontrado
- 405: Método no permitido
- 500: Error interno del servidor
Formato de respuesta de error
Basado en el código de ejemplo real, diferentes errores devuelven mensajes específicos:
Error de datos JSON faltantes
Devuelto cuando: se envía una solicitud POST sin cuerpo JSON
Error de formato JSON inválido
Se devuelve cuando: Los datos JSON no se pueden analizar (errores de sintaxis)
Error de método no permitido
Devuelto cuando: se utilizan métodos HTTP no soportados (PUT, DELETE, PATCH, etc.)
Error 404: No encontrado
Se devuelve cuando: Al acceder a puntos finales inexistentes
Personalización
Añadiendo nuevas funciones de manejador
Respuestas JSON basadas en plantillas
El ejemplo utiliza plantillas de cadenas para un formato JSON consistente:
Solución de problemas
Problemas comunes
Problemas de conexión
Si no puedes conectarte a los puntos finales de la API:
- Verifica que tu ESP32 esté conectado a WiFi (consulta el Monitor Serial)
- Asegúrate de que tu cliente y el ESP32 estén en la misma red
- Verifica que la dirección IP sea correcta
- Verifica que el ESP32 no se haya reiniciado (lo cual cambiaría la IP)
Errores de análisis de JSON
Si recibes respuestas de 'JSON inválido':
- Asegúrate de que el encabezado Content-Type esté establecido en application/json
- Verifica que la sintaxis JSON sea válida
- Verifica que los caracteres especiales estén debidamente escapados
- Asegúrate de que la carga útil JSON no sea demasiado grande (límite actual: 200 bytes)
Problemas con la solicitud POST
Si las solicitudes POST devuelven "No se recibieron datos JSON":
- Verifica que estés enviando un cuerpo JSON con la solicitud
- Comprueba que el encabezado Content-Length esté establecido correctamente
- Asegúrate de que el método HTTP sea realmente POST
- Prueba con un JSON simple como {"key": "test"}
Problemas de memoria
Si el ESP32 deja de responder:
- Monitorear el uso de memoria - StaticJsonDocument utiliza 200 bytes
- Reducir el tamaño de la plantilla JSON_RESPONSE si es necesario
- Considera usar DynamicJsonDocument para datos de tamaño variable
- Verificar fugas de memoria en funciones de manejador personalizadas
Consejos de rendimiento
Optimizar el procesamiento de JSON
Gestión eficiente de respuestas
Próximos pasos
- Explora WebServerQueryStrings.ino para el manejo de parámetros de URL
- Prueba WebServerWithWebSocket.ino para la comunicación en tiempo real
- Considera la integración con bases de datos o servicios en la nube