Ejemplo de WebApp personalizado de Arduino - Tutorial de interfaz web simple para principiantes
Visión general
Este ejemplo proporciona una plantilla completa para crear tus propias aplicaciones web personalizadas que se integran sin problemas con la biblioteca DIYables WebApps.

¡La plantilla CustomWebApp es perfecta para principiantes que quieren añadir su propia interfaz web al ecosistema de WebApps de DIYables! Este tutorial te muestra cómo construir una página web simple con intercambio de datos bidireccional en tiempo real entre el navegador web y Arduino a través de WebSocket que puede:
- Enviar mensajes de texto desde el navegador web al Arduino al instante a través de WebSocket
- Recibir mensajes desde el Arduino y mostrarlos en tiempo real en la página web
- Mantener una conexión WebSocket persistente para una comunicación continua
- Reconexión automática cuando la conexión WebSocket se pierde
- Funciona en dispositivos móviles con diseño responsive
Diseñado para Arduino Uno R4 WiFi y DIYables STEM V4 IoT - esta plantilla se integra perfectamente con las aplicaciones web existentes de DIYables y proporciona la base para construir tus propias interfaces IoT personalizadas!
Esta plantilla ofrece código mínimo para empezar. Los usuarios pueden desarrollar sus propias aplicaciones web sofisticadas modificando esta plantilla. Se recomiendan conocimientos básicos de programación web (HTML, CSS, JavaScript) para personalizar la interfaz web y agregar características avanzadas.
Qué aprenderás
- Cómo crear una aplicación web personalizada que se integre con la librería DIYables WebApps
- Cómo añadir tu página personalizada al ecosistema de aplicaciones web DIYables
- Cómo enviar mensajes de texto desde el navegador web al Arduino
- Cómo enviar datos desde Arduino al navegador web
- Cómo gestionar las conexiones WebSocket y la reconexión automática
- Cómo hacer interfaces web adaptables para móviles
- Cómo usar el sistema de plantillas de DIYables WebApps para un desarrollo rápido
Características
- Integración de DIYables WebApps: Se integra sin problemas con el ecosistema de bibliotecas de DIYables WebApps
- Código de plantilla mínimo: Proporciona una base básica que puedes ampliar y personalizar
- Desarrollo basado en plantillas: Un punto de partida completo que puedes modificar para crear aplicaciones sofisticadas
- Mensajería de texto simple: Enviar mensajes entre el navegador web y Arduino
- Reconexión automática: Se reconecta automáticamente cuando se pierde la conexión
- Diseño adaptable a dispositivos móviles: Funciona perfectamente en teléfonos, tabletas y computadoras
- Amigable para principiantes: Código limpio y sencillo que es fácil de entender
- Marco de trabajo extensible: Requiere conocimiento básico de programación web (HTML/CSS/JavaScript) para una personalización avanzada
- Plataforma extensible: Actualmente implementado para Arduino Uno R4 WiFi, pero puede ampliarse para otras plataformas de hardware. Ver DIYables_WebApps_ESP32
Hardware Requerido
Or you can buy the following kits:
| 1 | × | DIYables STEM V4 IoT Starter Kit (Arduino included) | |
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Cómo empezar
Puede comenzar a construir su aplicación web personalizada para la placa Arduino Uno R4/DIYables STEM V4 IoT siguiendo los siguientes pasos principales:
- Ejecuta la plantilla predeterminada de la aplicación personalizada en tu placa Arduino
- Prueba y verifica que la aplicación web personalizada predeterminada funcione correctamente
- Comprende el protocolo de comunicación y cómo funciona en segundo plano
- Modifica la plantilla para adaptar tu aplicación
- Gestiona varias aplicaciones web personalizadas - guía esencial para prevenir conflictos
Empecemos uno por uno.
Ejecuta la plantilla de la aplicación personalizada predeterminada en tu placa Arduino
Pasos R\u00e1pidos
- Si es la primera vez que usa el Arduino Uno R4 WiFi/DIYables STEM V4 IoT, consulte el tutorial sobre configurar el entorno para Arduino Uno R4 WiFi/DIYables STEM V4 IoT en el IDE de Arduino
- Conecte la placa Arduino Uno R4/DIYables STEM V4 IoT a su computadora usando un cable USB
- Inicie el IDE de Arduino en su computadora
- Seleccione la placa Arduino Uno R4 adecuada (p. ej., Arduino Uno R4 WiFi) y el puerto COM
- Vaya al ícono Bibliotecas en la barra izquierda del IDE de Arduino
- Busque "DIYables WebApps", luego encuentre la biblioteca DIYables WebApps de DIYables
- Haga clic en el botón Instalar para instalar la biblioteca

- Se le pedirá instalar algunas otras dependencias de la biblioteca
- Haga clic en el botón Instalar todo para instalar todas las dependencias de la biblioteca

- En el IDE de Arduino, ve a File > Examples > DIYables WebApps > CustomWebApp
- Verás 4 archivos que componen la plantilla completa de la aplicación web personalizada:
- CustomWebApp.ino - Código principal de Arduino (¡aquí es donde agregas tu lógica personalizada!)
- CustomWebApp.h - Archivo de encabezado (que define la interfaz de la biblioteca WebApps de DIYables)
- CustomWebApp.cpp - Archivo de implementación (se encarga de la integración con el framework de la biblioteca)
- custom_page_html.h - Diseño de página web (¡personaliza aquí tu interfaz web!)
- Configura los ajustes de WiFi cambiando estas líneas en CustomWebApp.ino:
Paso 5: Subir y Probar
- Haga clic en el botón Cargar en el IDE de Arduino para subir el código al Arduino UNO R4/DIYables STEM V4 IoT
- Abra el Monitor Serial para ver el estado de la conexión
- Observe la dirección IP que se muestra en el Monitor Serial
- Abra el Monitor Serial
- Revise el resultado en el Monitor Serial. Se muestra a continuación
- Si no ves nada, reinicia la placa Arduino.
- Toma nota de la dirección IP que aparezca y escribe esta dirección en la barra de direcciones de un navegador web en tu teléfono inteligente o PC.
- Ejemplo: http://192.168.0.2
- Verás la página de inicio como en la imagen de abajo:

- Haz clic en el enlace Web Custom; verás la interfaz de usuario de la aplicación Web Custom como se muestra abajo.

- O también puedes acceder a la página directamente mediante la dirección IP seguida de /custom. Por ejemplo: http://[IP_ADDRESS]/custom
Probar y verificar que la aplicación web personalizada por defecto funcione correctamente
Al ejecutar la plantilla predeterminada de CustomWebApp, esto es lo que deberías ver:
En la interfaz web:
- Estado de la Conexión: Muestra "Conectado" en azul cuando el WebSocket está activo
- Cuadro de entrada de mensajes para Arduino: Campo de texto para escribir mensajes para Arduino
- Botón Enviar: Haz clic para enviar tu mensaje (o pulsa Enter)
- Visualización de mensajes de Arduino: Muestra mensajes recibidos desde Arduino en texto azul
Comportamiento de Arduino:
- Respuesta de Eco: Cuando envíes "Hola" desde la web, Arduino responde con "Eco: Hola"
- Actualizaciones Periódicas: Arduino envía mensajes de tiempo de actividad cada 5 segundos: "Tiempo de actividad de Arduino: X segundos"
- Monitor Serie: Todos los mensajes recibidos se registran para depuración
Prueba la Comunicación:
- Escribe un mensaje en la caja de entrada (p. ej., "mensaje de prueba")
- Haz clic en Enviar o pulsa Enter
- Ver Monitor Serial - deberías ver: "Recibido desde la web: mensaje de prueba"
- Ver página web - deberías ver: "Eco: mensaje de prueba"
- Espera unos segundos - verás mensajes de tiempo de actividad periódicos actualizados cada 3 segundos (p. ej., "Tiempo de actividad de Arduino: 15 segundos", "Tiempo de actividad de Arduino: 18 segundos", etc.)
Comprender el Protocolo de Comunicación y Cómo Funciona en Segundo Plano
Comprender los mecanismos internos te ayuda a personalizar la plantilla de manera efectiva.
Sistema de identificadores de aplicaciones
La plantilla CustomWebApp utiliza etiquetas de mensajes únicas (llamadas "Identificadores de la App") que ayudan al código de Arduino y a los clientes web a filtrar los mensajes que les pertenecen. Esto es esencial porque tu aplicación puede incluir varias aplicaciones web, y cada app necesita procesar solo sus propios mensajes mientras ignora a los demás:
Lado de Arduino (CustomWebApp.h y CustomWebApp.cpp)
Lado de JavaScript (custom_page_html.h)
Beneficios de este diseño:
- Fuente única de verdad: Cambiar el identificador en un solo lugar para cada lenguaje
- Sin cadenas mágicas: Elimina las cadenas codificadas 'CUSTOM:' en todo el código
- Seguridad de tipos: El uso de constantes previene errores tipográficos
- Extensible: Fácil crear múltiples aplicaciones personalizadas con identificadores diferentes
- Evitar conflictos de datos entre múltiples aplicaciones: Cada aplicación utiliza un identificador único para evitar interferencias de mensajes
- Profesional: Sigue principios de diseño orientado a objetos
Notas importantes:
- Puedes mantener el identificador actual "CUSTOM:" al modificar esta plantilla de aplicación web personalizada para adaptar a tu proyecto. Sin embargo, cuando crees más de una aplicación personalizada, asegúrate de cambiarlo para evitar conflictos.
- Si cambias el identificador, asegúrate de que el valor en JavaScript (.h file) y el código de Arduino (.cpp file) sean el mismo (p. ej., que ambos usen "TEMP:" o que ambos usen "SENSOR:").
- Identificadores pre-reservados por las aplicaciones integradas: Los siguientes identificadores ya están siendo utilizados por las aplicaciones integradas de DIYables WebApps y deben evitarse:
- Identificadores principales de la aplicación: "CHAT:", "MONITOR:", "PLOTTER:", "DIGITAL_PINS:", "JOYSTICK:", "SLIDER:", "TABLE:", "RTC:", "ROTATOR:", "GAUGE:"
- Identificadores de subprotocolo: "TIME:", "DATETIME:", "JOYSTICK_CONFIG:", "PLOTTER_DATA:", "PLOTTER_CONFIG:", "SLIDER_VALUES:", "TABLE_CONFIG:", "TABLE_DATA:", "VALUE_UPDATE:", "PIN_CONFIG:", "PIN_STATES:", "PIN_UPDATE:"
Flujo de Comunicación
De la página web a Arduino:
Cuando escribes un mensaje en la interfaz web y haces clic en el botón de enviar, por ejemplo: Hello, se produce el siguiente flujo:
- JavaScript agrega identificador: JavaScript agrega automáticamente el identificador de la aplicación (que es "CUSTOM:" en esta plantilla) usando la constante APP_IDENTIFIER, y luego envía el mensaje a Arduino a través de WebSocket. El mensaje real enviado es: CUSTOM:Hello
- La biblioteca DIYables WebApps recibe: La biblioteca recibe el mensaje CUSTOM:Hello y lo pasa a tu método CustomWebAppPage::handleWebSocketMessage
- La clase CustomWebAppPage elimina el identificador: En handleWebSocketMessage, la clase CustomWebAppPage verifica si el mensaje empieza con su APP_IDENTIFIER, elimina el identificador usando .substring(APP_IDENTIFIER.length()), y luego pasa el mensaje restante Hello llamando a la función de callback implementada en tu archivo .ino.
- Tu aplicación maneja: Tu aplicación en el archivo .ino recibe solo Hello y puede manejar el mensaje según tu lógica personalizada. La plantilla actual solo lo imprime y envía una respuesta.
De Arduino a la página web:
Cuando tu Arduino quiere enviar datos a la interfaz web, por ejemplo: Temperatura: 25°C, ocurre el siguiente flujo:
i. Tu aplicación llama a sendToWeb(): En tu archivo .ino, llamas customPage.sendToWeb("Temperature: 25°C") para enviar datos al navegador web
i. La clase CustomWebAppPage añade identificador y transmite: La clase CustomWebAppPage añade automáticamente el identificador de la aplicación utilizando su constante APP_IDENTIFIER a tu mensaje y transmite CUSTOM:Temperature: 25°C a todos los clientes web conectados a través de WebSocket
i. JavaScript recibe y filtra el mensaje: El navegador web recibe CUSTOM:Temperature: 25°C a través del manejador de eventos ws.onmessage, pero JavaScript solo procesa mensajes que comienzan con APP_IDENTIFIER y recorta el identificador usando .substring(APP_IDENTIFIER.length())
i. La página web muestra el mensaje limpio: La plantilla actual muestra el mensaje limpio Temperature: 25°C (sin identificador) en la sección "Mensaje de Arduino". Puedes personalizar el JavaScript para analizar y mostrar los datos de diferentes maneras según las necesidades de tu aplicación
Visión general de la arquitectura
El ejemplo de CustomWebApp consta de cuatro archivos principales:
- CustomWebApp.ino - Sketch principal de Arduino con la lógica de tu aplicación
- CustomWebApp.h - Archivo de cabecera que define la clase de la página personalizada (interfaz de la biblioteca)
- CustomWebApp.cpp - Implementación con la lógica de comunicación (código de la biblioteca)
- custom_page_html.h - Interfaz HTML separada para facilitar la personalización
Modifica la plantilla para adaptar tu aplicación
La plantilla está diseñada para ser fácilmente personalizable para sus necesidades específicas. Así es como puede adaptarla:
1. Integración de hardware
Añadir Inicialización de Hardware
En la función setup() de CustomWebApp.ino:
Manejar comandos personalizados
Extiende la función de devolución de llamada para manejar tus comandos personalizados:
Enviar datos de sensores en tiempo real
2. Personalización de la interfaz web
Modificar el diseño HTML
Edita el HTML en custom_page_html.h para cambiar la interfaz:
Personalizar el procesamiento de JavaScript
Actualiza la función ws.onmessage para manejar tipos de datos específicos:
Añadir Estilo
Personaliza el CSS de tu aplicación:
Otra personalización
Más allá de modificar la interfaz web y la integración de hardware, también puedes personalizar cómo aparece tu aplicación en el ecosistema de WebApps de DIYables:
1. Personalizar la ruta de la aplicación
Puede cambiar la ruta de la URL desde la cual su aplicación web personalizada es accesible modificando el constructor en su archivo de encabezado:
Ruta por defecto:
Ejemplos de rutas personalizadas:
Notas importantes:
- La ruta debe empezar con "/": Siempre empieza tu ruta con una barra diagonal
- Usa nombres descriptivos: Elige rutas que describan claramente la función de tu aplicación
- Evita conflictos: No uses rutas ya ocupadas por aplicaciones integradas como /chat, /monitor, /plotter, etc.
- Usa minúsculas y guiones: Sigue las convenciones de URL para una mejor compatibilidad
2. Personalizar la Tarjeta de la Aplicación en la Página de Inicio
Puedes personalizar cómo se ve tu aplicación en la página de inicio de DIYables WebApps modificando el método getNavigationInfo() en tu archivo de implementación:
Tarjeta básica de la aplicación:
Tarjeta de aplicación avanzada con CSS en línea:
Gestión de múltiples aplicaciones web personalizadas - Guía esencial para la prevención de conflictos
Al desarrollar varias aplicaciones web personalizadas, es crucial evitar conflictos entre las diferentes aplicaciones. Supongamos que queremos añadir tres aplicaciones personalizadas llamadas "Temperature Monitor", "Motor Controller" y "Sensor Dashboard" a nuestro proyecto de Arduino. A continuación se explica cómo asegurar que funcionen de forma armoniosa:
1. Utiliza identificadores únicos de la aplicación
Cada aplicación web personalizada debe tener un identificador único para evitar conflictos de mensajes:
Ejemplo: Aplicación de Monitoreo de Temperatura
Ejemplo: Aplicación de Controlador de Motores
Ejemplo: Aplicación de Panel de Sensores
2. Utiliza rutas de página únicas
Cada aplicación web necesita una ruta URL única:
3. Usa nombres de clase únicos
Evita conflictos de nombres utilizando nombres de clase descriptivos:
4. Organizar varias aplicaciones en un solo proyecto
Así es como se estructura un proyecto con varias aplicaciones personalizadas:
5. Buenas prácticas para varias aplicaciones
Organización de archivos
Navegación entre aplicaciones
Actualiza el método getNavigationInfo() en cada aplicación para facilitar la navegación:
6. Pruebas de varias aplicaciones
Al probar varias aplicaciones:
- Prueba cada aplicación individualmente primero
- Verifica el Monitor Serial para conflictos de mensajes
- Verifica que los identificadores únicos funcionen correctamente
- Prueba la navegación entre diferentes aplicaciones
- Monitorea el uso de memoria con varias aplicaciones cargadas
Al seguir estas pautas, puedes crear varias aplicaciones web personalizadas que funcionen juntas de forma fluida, sin interferir entre sí ni con otras DIYables WebApps.