Referencia de la API de la Biblioteca WebApps de DIYables - Documentación completa

Visión general

La biblioteca WebApps de DIYables ofrece una solución completa y modular para crear aplicaciones web basadas en WebSocket en Arduino Uno R4 WiFi y DIYables STEM V4 IoT. Incluye varias aplicaciones web preconstruidas y un marco flexible para crear aplicaciones personalizadas. Especialmente optimizada para la plataforma educativa DIYables STEM V4 IoT con capacidades IoT mejoradas y una integración de sensores incorporada.

La biblioteca utiliza una arquitectura modular en la que solo incluyes las aplicaciones web que necesitas, ahorrando memoria y mejorando el rendimiento.

Características

  • Arquitectura modular: Añade solo las aplicaciones web que necesites para optimizar el uso de la memoria
  • Memoria eficiente: Cada aplicación web puede habilitarse/deshabilitarse de forma independiente
  • 11+ Aplicaciones web listas para usar: Control total de Arduino sin conocimientos de programación web
  • Framework de aplicaciones web personalizado: Crea tus propias aplicaciones utilizando el sistema de clases base
  • Comunicación en tiempo real: Basado en WebSocket para actualizaciones instantáneas
  • Diseño responsivo: Funciona en computadoras de escritorio, tabletas y dispositivos móviles
  • Fácil integración: API basada en callbacks sencilla
  • Soporte para múltiples aplicaciones: Soporte para añadir varias aplicaciones web de forma simultánea
  • Plataforma extensible: Actualmente implementado para Arduino Uno R4 WiFi, pero puede ampliarse para otras plataformas de hardware. Ver DIYables_WebApps_ESP32

Clases principales

DIYablesWebAppServer

La clase principal del servidor que gestiona aplicaciones web, solicitudes HTTP y comunicación WebSocket.

Constructor

DIYablesWebAppServer(int httpPort = 80, int websocketPort = 81)

Crea una instancia de servidor de aplicaciones web.

  • httpPort: Puerto del servidor HTTP (predeterminado: 80)
  • websocketPort: Puerto del servidor WebSocket (predeterminado: 81)

Métodos

Configuración y Conexión
bool begin()

Inicializa la conexión de red (para Ethernet o conexiones preconfiguradas) y inicia el servidor web.

  • Devuelve: verdadero si tiene éxito, falso si falla
  • Caso de uso: para compatibilidad futura con Ethernet o cuando las credenciales de WiFi están preconfiguradas
bool begin(const char* ssid, const char* password)

Inicializa la conexión WiFi y inicia el servidor web.

  • ssid: nombre de la red WiFi
  • password: contraseña de WiFi
  • Devuelve: verdadero si tiene éxito, falso si falla
  • Caso de uso: Conexión WiFi estándar con credenciales
void loop()

Maneja las solicitudes HTTP y la comunicación WebSocket. Debe llamarse en el bucle principal.

bool isConnected()

Devuelve verdadero si WiFi está conectado.

String getIPAddress()

Devuelve la dirección IP del Arduino como una cadena.

Gestión de Aplicaciones
void addApp(DIYablesWebAppPageBase* app)

Añade una aplicación web al servidor.

  • aplicación: Puntero a una instancia de una aplicación web
void removeApp(const String& path)

Elimina una aplicación web por su ruta de la URL.

  • ruta: ruta de la URL de la aplicación (p. ej., "/chat")
DIYablesWebAppPageBase* getApp(const String& path)

Obtiene una aplicación web por la ruta de su URL.

  • ruta: ruta URL de la aplicación
  • Devuelve: Puntero a la aplicación o nullptr si no se encuentra
void setNotFoundPage(const DIYablesNotFoundPage& page)

Configura la página 404 No encontrada (opcional).

  • página: instancia de página 404
Acceso a Aplicaciones Especializadas
DIYablesWebDigitalPinsPage* getWebDigitalPinsPage()

Obtiene la instancia de la página de pines digitales si se ha añadido.

  • Devuelve: Puntero a la página de pines digitales o nullptr
DIYablesWebSliderPage* getWebSliderPage()

Obtiene la instancia de la página deslizante si se ha agregado.

  • Devuelve: Puntero a la página del control deslizante o nullptr
DIYablesWebJoystickPage* getWebJoystickPage()

Obtiene la instancia de la página del joystick si se ha añadido.

  • Devuelve: Puntero a la página del joystick o nullptr

Clases base

DIYablesWebAppPageBase

Clase base abstracta de la que heredan todas las aplicaciones web. Proporciona funcionalidad común para el manejo de HTTP, la comunicación WebSocket y la gestión de páginas.

Constructor

DIYablesWebAppPageBase(const String& pagePath)

Crea una instancia de página base con la ruta URL especificada.

  • pagePath: ruta URL de la página (p. ej., "/web-joystick")

Métodos virtuales (deben ser implementados por clases derivadas)

virtual void handleHTTPRequest(IWebClient& client) = 0

Gestiona las peticiones HTTP para esta página. Método puramente virtual.

  • cliente: Interfaz de cliente web para enviar una respuesta
virtual void handleWebSocketMessage(IWebSocket& ws, const char* message, uint16_t length) = 0

Gestiona los mensajes de WebSocket para esta página. Método virtual puro.

  • ws: Interfaz de conexión WebSocket
  • message: Contenido del mensaje recibido
  • length: Longitud del mensaje
virtual const char* getPageInfo() const = 0

Devuelve la cadena de identificación de la página utilizada en la visualización de la información de la conexión. Método virtual puro.

  • Devuelve: Cadena de información de la página (p. ej., "🕹️ Web Joystick: ")
virtual String getNavigationInfo() const = 0

Devuelve HTML para el botón de navegación de la página de inicio. Método virtual puro.

  • Devoluciones: Cadena HTML para la tarjeta de navegación

Métodos virtuales (sobrescrituras opcionales)

virtual void onWebSocketConnection(IWebSocket& ws)

Se llama cuando se establece una nueva conexión WebSocket.

  • ws: Nueva conexión WebSocket
virtual void onWebSocketClose(IWebSocket& ws)

Se llama cuando se cierra la conexión WebSocket.

  • ws: Conexión WebSocket cerrada

Métodos Comunes

const char* getPagePath() const

Obtiene la ruta de la URL de esta página.

  • Devuelve: cadena de la ruta de la página
bool isEnabled() const

Comprueba si la página está actualmente habilitada.

  • Devuelve: verdadero si está habilitado, falso si está deshabilitado
void setEnabled(bool enable)

Habilita o deshabilita la página.

  • habilitar: verdadero para habilitar, falso para deshabilitar

Métodos utilitarios

void sendHTTPHeader(IWebClient& client, const char* contentType = "text/html")

Envía cabeceras HTTP estándar al cliente.

  • client: Interfaz de cliente web
  • contentType: Tipo MIME (predeterminado: "text/html")
void sendWebSocketMessage(IWebSocket& ws, const char* message)

Envía un mensaje a un cliente WebSocket específico.

  • ws: Conexión WebSocket de destino
  • message: Mensaje a enviar
void broadcastToAllClients(const char* message)

Difunde un mensaje a todos los clientes WebSocket conectados.

  • mensaje: Mensaje para difundir
void sendLargeHTML(IWebClient& client, const char* html)

Envía contenido HTML grande utilizando la codificación de transferencia en trozos.

  • cliente: Interfaz de cliente web
  • HTML: Contenido HTML para enviar

Ejemplo de uso

class CustomPage : public DIYablesWebAppPageBase { public: CustomPage() : DIYablesWebAppPageBase("/custom") {} void handleHTTPRequest(IWebClient& client) override { sendHTTPHeader(client); client.println("<html><body>Custom Page</body></html>"); } void handleWebSocketMessage(IWebSocket& ws, const char* message, uint16_t length) override { // Handle WebSocket messages sendWebSocketMessage(ws, "Response: " + String(message)); } const char* getPageInfo() const override { return " 🔧 Custom Page: "; } String getNavigationInfo() const override { return "<a href=\"/custom\" class=\"app-card custom\">" "<h3>🔧 Custom</h3><p>Custom functionality</p></a>"; } };

Clases de Aplicaciones Web

Página de inicio de DIYables

Centro de navegación central que proporciona enlaces a todas las aplicaciones habilitadas.

Constructor

DIYablesHomePage()

Ruta URL

  • Ruta: / (raíz)

DIYablesWebChatPage

Interfaz de chat interactiva para la comunicación bidireccional con Arduino

Constructor

DIYablesWebChatPage()

Ruta de la URL

  • Ruta: /webchat

Métodos

void onWebChatMessage(std::function<void(const String&)> callback)

Configura la función de devolución de llamada para mensajes de chat entrantes.

void sendToWebChat(const String& message)

Envía un mensaje a la interfaz de chat web.

Página de Monitoreo Web de DIYables

Monitor serie basado en la web para salida en tiempo real y entrada de comandos.

Constructor

DIYablesWebMonitorPage()

Ruta de la URL

  • Ruta: /webmonitor

Métodos

void onWebMonitorMessage(std::function<void(const String&)> callback)

Establece la función de devolución de llamada para los mensajes entrantes del monitor.

void sendToWebMonitor(const String& message)

Envía un mensaje a la interfaz del monitor web.

Página de Pines Digitales de DIYables Web

Controlar y monitorizar los pines digitales del 0 al 13 a través de una interfaz web.

Constructor

DIYablesWebDigitalPinsPage()

Ruta de la URL

  • Ruta: /webdigitalpins

Métodos

void enablePin(int pin, int mode)

Habilita un PIN para el control web.

  • pin: Número de pin (0-13)
  • mode: WEB_PIN_OUTPUT o WEB_PIN_INPUT
void onPinWrite(std::function<void(int, int)> callback)

Establece una función de devolución de llamada para operaciones de escritura de pines (pines de salida).

void onPinRead(std::function<int(int)> callback)

Establece una función de devolución de llamada para las operaciones de lectura de pines (pines de entrada).

void onPinModeChange(std::function<void(int, int)> callback)

Configura una devolución de llamada para cambios en el modo del pin.

void updatePinState(int pin, int state)

Actualiza el estado del pin en tiempo real para los clientes web.

DIYablesWebSliderPage

Control deslizante dual para aplicaciones analógicas y PWM.

Constructor

DIYablesWebSliderPage()

Ruta de la URL

  • Ruta: /webslider

Métodos

void onSliderValueFromWeb(std::function<void(int, int)> callback)

Establece la devolución de llamada para los cambios de valor del control deslizante desde la web.

  • Parámetros: slider1 (0-255), slider2 (0-255)
void onSliderValueToWeb(std::function<void()> callback)

Configura una función de devolución de llamada para el cliente web que solicita valores actuales.

void sendToWebSlider(int slider1, int slider2)

Envía los valores de los deslizadores a la interfaz web.

Página web del joystick de DIYables

Control de joystick 2D para robótica y aplicaciones de posicionamiento.

Constructor

DIYablesWebJoystickPage(bool autoReturn = true, float sensitivity = 10.0)
  • autoReturn: Si el joystick regresa al centro automáticamente
  • sensitivity: Porcentaje mínimo de movimiento para activar actualizaciones

Ruta de la URL

  • Ruta: /webjoystick

Métodos

void onJoystickValueFromWeb(std::function<void(int, int)> callback)

Establece una función de devolución de llamada para el movimiento del joystick desde la web.

  • Parámetros: x (-100 a 100), y (-100 a 100)
void onJoystickValueToWeb(std::function<void()> callback)

Establece una devolución de llamada para el cliente web que solicita la posición actual.

void sendToWebJoystick(int x, int y)

Envía la posición del joystick a la interfaz web.

void setAutoReturn(bool autoReturn)

Establece el comportamiento de retorno automático.

void setSensitivity(float sensitivity)

Ajusta la sensibilidad de movimiento (porcentaje).

Página del plotter web de DIYables

Visualización de datos en tiempo real con soporte para múltiples series de datos.

Constructor

DIYablesWebPlotterPage()

Ruta de la URL

  • Ruta: /webplotter

Métodos

void setPlotTitle(const String& title)

Establece el título del gráfico.

void setAxisLabels(const String& xLabel, const String& yLabel)

Configura las etiquetas de los ejes.

void enableAutoScale(bool enable)

Activa o desactiva el escalado automático del eje Y.

void setMaxSamples(int maxSamples)

Establece el número máximo de puntos de datos que se muestran.

void addDataPoint(const String& seriesName, float x, float y)

Añade un punto de datos a una serie.

void clearPlot()

Borra todos los datos del gráfico.

Página no encontrada de DIYables

Página de error 404 opcional para una mejor experiencia de usuario.

Constructor

DIYablesNotFoundPage()

Ejemplo de uso básico

#include <DIYablesWebApps.h> // WiFi credentials const char* ssid = "YOUR_WIFI_SSID"; const char* password = "YOUR_WIFI_PASSWORD"; // Create server and web applications DIYablesWebAppServer webAppsServer(80, 81); DIYablesHomePage homePage; DIYablesWebChatPage chatPage; DIYablesWebMonitorPage monitorPage; void setup() { Serial.begin(9600); // Add only the applications you need webAppsServer.addApp(&homePage); webAppsServer.addApp(&chatPage); webAppsServer.addApp(&monitorPage); // Optional: Add 404 page webAppsServer.setNotFoundPage(DIYablesNotFoundPage()); // Start server if (webAppsServer.begin(ssid, password)) { Serial.println("Server started successfully"); Serial.print("IP: "); Serial.println(webAppsServer.getIPAddress()); } // Setup callbacks chatPage.onWebChatMessage([](const String& message) { Serial.println("Chat: " + message); chatPage.sendToWebChat("Arduino received: " + message); }); } void loop() { webAppsServer.loop(); delay(10); }

Visión general de las aplicaciones web

Página de Inicio

  • URL: http://[arduino-ip]/
  • Propósito: Centro de navegación central
  • Características: Enlaces a todas las aplicaciones habilitadas, estado de la conexión

Aplicación WebChat

  • URL: http://[arduino-ip]/webchat
  • Propósito: Interfaz de comunicación bidireccional
  • Características: Mensajería en tiempo real, historial de mensajes, estado de WebSocket

Monitor web

  • URL: http://[arduino-ip]/webmonitor
  • Propósito: Reemplazo del monitor serie
  • Características: Salida serie en tiempo real, entrada de comandos, tema oscuro

Control de Pines Digitales Web

  • URL: http://[arduino-ip]/webdigitalpins
  • Propósito: Controlar pines digitales 0-13
  • Características: Control individual de pines, operaciones en bloque, estado en tiempo real

Control deslizante web

  • URL: http://[arduino-ip]/webslider
  • Propósito: Control analógico/PWM dual
  • Características: Dos deslizadores independientes (0-255), valores preestablecidos, retroalimentación en tiempo real

Control de Joystick Web

  • URL: http://[arduino-ip]/webjoystick
  • Propósito: control de posición en 2D para robots/vehículos
  • Características: control táctil/ratón, visualización de coordenadas, ajuste de sensibilidad

Plotter web

  • URL: http://[arduino-ip]/webplotter
  • Propósito: Visualización de datos en tiempo real
  • Características: Múltiples series de datos, escalado automático, títulos y ejes configurables

Comunicación WebSocket

Todas las aplicaciones utilizan WebSocket en el puerto 81 para la comunicación en tiempo real:

  • URL de WebSocket: ws://[arduino-ip]:81
  • Conexión: Reconexión automática al desconectarse
  • Protocolo: Formato de mensajes basado en texto

Formatos de mensajes

Mensajes de WebChat

  • Desde la web: mensaje de texto directo
  • A la web: mensaje de texto directo

Mensajes del Monitor Web

  • Desde la web: Mensaje de texto directo
  • A la web: Mensaje de texto directo

Mensajes de pines digitales en la web

  • Desde la Web: formato JSON: {"pin": 13, "state": 1}
  • A la Web: formato JSON: {"pin": 13, "state": 1}

Mensajes del deslizador web

  • Desde la Web: formato JSON: {"slider1": 128, "slider2": 255}
  • Para la Web: formato JSON: {"slider1": 128, "slider2": 255}

Mensajes del Joystick Web

  • Desde la Web: Formato JSON: {"x": 50, "y": -25}
  • A la Web: Formato JSON: {"x": 50, "y": -25}

Mensajes del plotter web

  • Desde la Web: No aplica (solo para visualización)
  • A la Web: Formato JSON: {"series": "temp", "x": 10.5, "y": 23.4}

Gestión de Errores

La biblioteca incluye el manejo automático de errores para:

  • Fallos de conexión WiFi
  • Desconexiones de WebSocket
  • Formatos de mensajes inválidos
  • Límites de conexiones de clientes

Uso de memoria

Beneficios de la Arquitectura Modular: Incluya solo las aplicaciones web que necesite para optimizar el uso de la memoria.

Uso de memoria aproximado por componente:

  • DIYablesWebAppServer: ~8KB de Flash, ~2KB de RAM
  • DIYablesHomePage: ~3KB de Flash, ~1KB de RAM
  • DIYablesWebChatPage: ~6KB de Flash, ~1.5KB de RAM
  • DIYablesWebMonitorPage: ~5KB de Flash, ~1.5KB de RAM
  • DIYablesWebDigitalPinsPage: ~8KB de Flash, ~2KB de RAM
  • DIYablesWebSliderPage: ~6KB de Flash, ~1.5KB de RAM
  • DIYablesWebJoystickPage: ~7KB de Flash, ~1.5KB de RAM
  • DIYablesWebPlotterPage: ~10KB de Flash, ~2KB de RAM
  • WebSocket Buffer: ~1KB de RAM por conexión

Total si se habilitan todas las aplicaciones: ~53KB de memoria Flash, ~12KB de memoria RAM

Configuración mínima (servidor + hogar + 1 aplicación): ~17 KB de memoria Flash, ~4.5 KB de RAM

Compatibilidad del navegador

Navegadores compatibles:

  • Chrome 50+
  • Firefox 45+
  • Safari 10+
  • Edge 79+
  • Navegadores móviles (Safari para iOS, Chrome móvil)

Notas de Seguridad

  • Sin autenticación implementada (solo para redes locales)
  • Usar solo en redes de confianza
  • Considera añadir autenticación para despliegues públicos

Solución de problemas

Problemas comunes

  1. No se puede conectar a Wi-Fi
  • Verificar el SSID y la contraseña
  • Verifica que la red sea de 2.4 GHz (no 5 GHz)
  • Verificar la intensidad de la señal
  1. La conexión WebSocket falla
  • Verificar que la dirección IP sea correcta
  • Verifica la configuración del cortafuegos
  • Prueba un navegador diferente
  1. Alto consumo de memoria
  • Desactivar las aplicaciones no utilizadas
  • Limitar conexiones concurrentes
  • Reiniciar Arduino si se produce fragmentación de memoria
  1. Respuesta lenta
  • Verificar la intensidad de la señal WiFi
  • Reducir la frecuencia de los mensajes de WebSocket
  • Usa funciones de devolución de llamada más cortas.

Proyectos de ejemplo

Ejemplos de aplicaciones

La biblioteca WebApps de DIYables incluye ejemplos integrales diseñados para Arduino Uno R4 WiFi y la plataforma educativa DIYables STEM V4 IoT:

Ejemplos disponibles

  • Ejemplo de Chat: interfaz de comunicación bidireccional
  • Ejemplo de WebMonitor: reemplazo del monitor serie con funciones mejoradas
  • Ejemplo de WebDigitalPins: Controlar todos los pines digitales con retroalimentación visual
  • Ejemplo de WebSlider: Control dual analógico/PWM con preajustes
  • Ejemplo de WebJoystick: Control de posición en 2D para proyectos de robótica
  • Ejemplo de MultipleWebApps: Todas las aplicaciones ejecutándose simultáneamente

Compatibilidad de hardware

  • Recomendado: DIYables STEM V4 IoT (características mejoradas, sensores integrados)
  • Compatible: Arduino Uno R4 WiFi

Recursos de Tutoriales

Tutoriales completos paso a paso disponibles en:

  • Newbiely.com/tutorials/arduino/arduino-uno-r4-wifi-web-apps
  • Guías específicas de IoT para STEM V4 de DIYables y ejemplos de integración de sensores

Consulta la carpeta examples/ para proyectos completos y la carpeta docs/ para instrucciones detalladas de configuración.

Interfaces de abstracción de la plataforma

La biblioteca DIYables WebApps utiliza una capa de abstracción de plataforma con interfaces que permiten dar soporte a múltiples plataformas de hardware. Estas interfaces separan la funcionalidad central de WebApp de las implementaciones específicas de la plataforma.

Interfaces centrales

IWebClient

Interfaz para conexiones de cliente HTTP.

class IWebClient { public: virtual ~IWebClient() = default; // Stream interface methods virtual int available() = 0; virtual int read() = 0; virtual int peek() = 0; virtual size_t write(uint8_t data) = 0; virtual size_t write(const uint8_t* buffer, size_t size) = 0; virtual void flush() = 0; // Connection management virtual bool connected() = 0; virtual void stop() = 0; // Convenience methods virtual void print(const String& str) = 0; virtual void println(const String& str) = 0; };

IWebSocket

Interfaz para conexiones WebSocket con soporte de comunicación bidireccional

class IWebSocket { public: enum DataType { TEXT = 1, BINARY = 2 }; enum CloseCode { NORMAL_CLOSURE = 1000, GOING_AWAY = 1001, PROTOCOL_ERROR = 1002, UNSUPPORTED_DATA = 1003, POLICY_VIOLATION = 1008, MESSAGE_TOO_BIG = 1009, INTERNAL_ERROR = 1011 }; virtual ~IWebSocket() = default; // Message handling virtual void sendText(const char* message) = 0; virtual void sendBinary(const uint8_t* data, size_t length) = 0; virtual bool isConnected() const = 0; virtual void close(CloseCode code = NORMAL_CLOSURE, const char* reason = nullptr) = 0; // Event callbacks virtual void onMessage(std::function<void(IWebSocket*, DataType, const char*, uint16_t)> callback) = 0; virtual void onClose(std::function<void(IWebSocket*, CloseCode, const char*, uint16_t)> callback) = 0; };

IServidorWeb

Interfaz para la funcionalidad del servidor HTTP.

class IWebServer { public: virtual ~IWebServer() = default; // Server lifecycle virtual bool begin() = 0; virtual void stop() = 0; virtual IWebClient* available() = 0; // Configuration virtual void setPort(uint16_t port) = 0; virtual uint16_t getPort() const = 0; };

IWebSocketServer

Interfaz para un servidor WebSocket con gestión de conexiones.

class IWebSocketServer { public: using ConnectionCallback = std::function<void(IWebSocket*)>; using MessageCallback = std::function<void(IWebSocket*, IWebSocket::DataType, const char*, uint16_t)>; virtual ~IWebSocketServer() = default; // Server lifecycle virtual bool begin() = 0; virtual void stop() = 0; virtual void listen() = 0; // Event handling virtual void onConnection(ConnectionCallback callback) = 0; virtual void onMessage(MessageCallback callback) = 0; // Broadcasting virtual void broadcastText(const char* message) = 0; virtual void broadcastBinary(const uint8_t* data, size_t length) = 0; // Configuration virtual void setPort(uint16_t port) = 0; virtual uint16_t getPort() const = 0; };

IProveedorDeRed

Interfaz para la gestión de la conectividad de red.

class INetworkProvider { public: virtual ~INetworkProvider() = default; // Network lifecycle virtual bool begin(const char* ssid, const char* password) = 0; virtual void end() = 0; virtual bool isConnected() = 0; // Network information virtual String getLocalIP() = 0; virtual String getSSID() = 0; virtual int32_t getRSSI() = 0; };

IServerFactory

Interfaz de fábrica para crear implementaciones específicas de la plataforma.

class IServerFactory { public: virtual ~IServerFactory() = default; // Factory methods virtual INetworkProvider* createNetworkProvider() = 0; virtual IWebServer* createWebServer(uint16_t port) = 0; virtual IWebSocketServer* createWebSocketServer(uint16_t port) = 0; // Platform information virtual String getPlatformName() const = 0; };

Ejemplo de implementación de plataforma

Para Arduino Uno R4 WiFi, las interfaces se implementan utilizando la biblioteca UnoR4WiFi_WebServer:

class UnoR4ServerFactory : public IServerFactory { public: INetworkProvider* createNetworkProvider() override { return new UnoR4NetworkProvider(); } IWebServer* createWebServer(uint16_t port) override { return new UnoR4WebServer(port); } IWebSocketServer* createWebSocketServer(uint16_t port) override { return new UnoR4WebSocketServer(port); } String getPlatformName() const override { return "Arduino Uno R4 WiFi"; } };

Añadir soporte para nuevas plataformas

Para añadir soporte para una nueva plataforma (p. ej., ESP32):

  1. Implementar todas las interfaces para la plataforma objetivo
  2. Crear un ServerFactory que instancie tus implementaciones
  3. Manejar las redes específicas de la plataforma y los protocolos WebSocket
  4. Probar con las clases WebApp existentes (no se requieren cambios)

Ejemplos de uso con diferentes plataformas:

// Arduino Uno R4 WiFi UnoR4ServerFactory factory; DIYablesWebAppServer server(factory, 80, 81); // ESP32 (hypothetical) ESP32ServerFactory esp32Factory; DIYablesWebAppServer esp32Server(esp32Factory, 80, 81);

Beneficios del Diseño Basado en Interfaces

  • Independencia de la plataforma: La lógica central de WebApp funciona en cualquier plataforma
  • Extensibilidad: Fácil de añadir soporte para hardware nuevo
  • Mantenibilidad: El código específico de la plataforma está aislado
  • Testabilidad: Las interfaces pueden ser simuladas para pruebas unitarias
  • Consistencia: La misma API en todas las plataformas soportadas

Soporte de la plataforma actual

  • Arduino Uno R4 WiFi: Totalmente implementado y probado
  • 🔄 ESP32: Disponible como extensión independiente - DIYables_WebApps_ESP32
  • 🚀 Futuras plataformas: Pueden añadirse utilizando el mismo patrón de interfaz

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!