Ejemplo de ESP32 WebDigitalPins - Tutorial de la Interfaz de Control de Pines Digitales

Visión general

El ejemplo WebDigitalPins proporciona una interfaz web para controlar y monitorizar todos los pines digitales de tu Arduino. Diseñado para la plataforma educativa basada en ESP32 con capacidades GPIO mejoradas, configuraciones de pines extendidas y características educativas integradas para aprender electrónica digital. Puedes encender y apagar los pines, monitorizar sus estados en tiempo real y realizar operaciones en lote a través de una interfaz web intuitiva.

Ejemplo de Arduino WebDigitalPins - Tutorial de la Interfaz de Control de Pines Digitales

Características

  • Control individual de pines: Controla cada pin digital (0-13) por separado
  • Estado en tiempo real: Monitorea los estados de los pines con indicadores visuales
  • Operaciones en lote: Controla todos los pines de una vez (Todos ENCENDIDOS, Todos APAGADOS, Alternar Todo)
  • Configuración de pines: Configura los pines como Entrada o Salida a través de la interfaz web
  • Retroalimentación visual: Los botones codificados por colores muestran los estados de los pines (verde=ENCENDIDO, rojo=APAGADO)
  • Diseño adaptable: Funciona en equipos de escritorio, tabletas y dispositivos móviles
  • Comunicación WebSocket: Actualizaciones instantáneas sin recargar la página

Hardware Requerido

1×Módulo de Desarrollo ESP32 ESP-WROOM-32
1×Cable USB Tipo-A a Tipo-C (para PC USB-A)
1×Cable USB Tipo-C a Tipo-C (para PC USB-C)
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para ESP32
1×(Recomendado) Breakout Expansion Board for ESP32
1×(Recomendado) Divisor de Alimentación para ESP32

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)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Instrucciones de Configuración

Pasos rápidos

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 con un cable USB.
  • Inicia el IDE de Arduino en tu computadora.
  • Selecciona la placa ESP32 adecuada (por ejemplo ESP32 Dev Module) y el puerto COM.
  • Navega hasta el ícono Bibliotecas en la barra izquierda del IDE de Arduino.
  • Busca "DIYables ESP32 WebApps", luego localiza la biblioteca DIYables ESP32 WebApps de DIYables
  • Haz clic en el botón Instalar para instalar la biblioteca.
Biblioteca de WebApps para ESP32 de DIYables
  • Se le pedirá que instale algunas otras dependencias de la biblioteca.
  • Haga clic en el botón Instalar todo para instalar todas las dependencias de la biblioteca.
Dependencia de DIYables ESP32 WebApps
  • En el IDE de Arduino, ve a Archivo Ejemplos DIYables ESP32 WebApps WebDigitalPins ejemplo, o copia el código anterior y pégalo en el editor del IDE de Arduino
/* * DIYables WebApp Library - Web Digital Pins Example * * This example demonstrates the Web Digital Pins feature with automatic command handling: * - Control output pins 0-13 via web interface * - Monitor input pins 0-13 in real-time * - Individual pin ON/OFF control for outputs * - Real-time pin status feedback for inputs * - Bulk operations (All ON, All OFF, Toggle All) for outputs * * Hardware: ESP32 Boards * * Setup: * 1. Update WiFi credentials below * 2. Upload the sketch to your Arduino * 3. Open Serial Monitor to see the IP address * 4. Navigate to http://[IP_ADDRESS]/webdigitalpins */ #include <DIYables_ESP32_Platform.h> #include <DIYablesWebApps.h> // WiFi credentials - UPDATE THESE WITH YOUR NETWORK const char WIFI_SSID[] = "YOUR_WIFI_SSID"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // Create WebApp server and page instances using platform abstraction ESP32ServerFactory serverFactory; DIYablesWebAppServer webAppsServer(serverFactory, 80, 81); DIYablesHomePage homePage; DIYablesWebDigitalPinsPage webDigitalPinsPage; // Array to store the state of each digital pin (0-13). Index corresponds to pin number. int pinStates[16] = { 0 }; // Initialize all states to LOW (0) void setup() { Serial.begin(9600); delay(1000); Serial.println("DIYables ESP32 WebApp - Web Digital Pins Example"); // Add home and digital pins pages webAppsServer.addApp(&homePage); webAppsServer.addApp(&webDigitalPinsPage); // Optional: Add 404 page for better user experience webAppsServer.setNotFoundPage(DIYablesNotFoundPage()); // Pin Configuration Examples: // Method 1: Enable specific pins individually for output control webDigitalPinsPage.enablePin(0, WEB_PIN_OUTPUT); // Enable pin 0 (TX - use with caution) webDigitalPinsPage.enablePin(1, WEB_PIN_OUTPUT); // Enable pin 1 (RX - use with caution) webDigitalPinsPage.enablePin(2, WEB_PIN_OUTPUT); webDigitalPinsPage.enablePin(3, WEB_PIN_OUTPUT); webDigitalPinsPage.enablePin(4, WEB_PIN_OUTPUT); //webDigitalPinsPage.enablePin(5, WEB_PIN_OUTPUT); // Comment/uncomment to disable/enable //webDigitalPinsPage.enablePin(6, WEB_PIN_OUTPUT); // Comment/uncomment to disable/enable webDigitalPinsPage.enablePin(13, WEB_PIN_OUTPUT); // Enable pin 13 (built-in LED) // Method 2: Enable pins for input monitoring webDigitalPinsPage.enablePin(8, WEB_PIN_INPUT); webDigitalPinsPage.enablePin(9, WEB_PIN_INPUT); //webDigitalPinsPage.enablePin(10, WEB_PIN_INPUT); // Comment/uncomment to disable/enable //webDigitalPinsPage.enablePin(11, WEB_PIN_INPUT); // Comment/uncomment to disable/enable // Method 3: Enable all pins at once (uncomment to use) // for (int pin = 0; pin <= 13; pin++) { // webDigitalPinsPage.enablePin(pin, WEB_PIN_OUTPUT); // or WEB_PIN_INPUT as needed // } // Method 4: Enable pins in a range using for loop (uncomment to use) // for (int pin = 7; pin <= 11; pin++) { // webDigitalPinsPage.enablePin(pin, WEB_PIN_OUTPUT); // or WEB_PIN_INPUT as needed // } // Initialize enabled pins int outputPins[] = { 0, 1, 2, 3, 4, 13 }; // Note: Pins 0,1 are TX/RX - use with caution for (int i = 0; i < 6; i++) { int pin = outputPins[i]; pinMode(pin, OUTPUT); digitalWrite(pin, LOW); pinStates[pin] = LOW; } int inputPins[] = { 8, 9 }; for (int i = 0; i < 2; i++) { int pin = inputPins[i]; pinMode(pin, INPUT); // Use INPUT_PULLUP if needed pinStates[pin] = digitalRead(pin); } // Start the WebApp server if (!webAppsServer.begin(WIFI_SSID, WIFI_PASSWORD)) { while (1) { Serial.println("Failed to start WebApp server!"); delay(1000); } } // Return the current state to display on Web App webDigitalPinsPage.onPinRead([](int pin) { return pinStates[pin]; // Return the current state of the pin // You can implement custom read logic here if needed }); // Handle the control request from Web App (for output pins) webDigitalPinsPage.onPinWrite([](int pin, int state) { digitalWrite(pin, state); pinStates[pin] = state; // You can implement custom control logic here if needed }); // Handle pin mode change requests (optional) webDigitalPinsPage.onPinModeChange([](int pin, int mode) { if (mode == WEB_PIN_OUTPUT) { pinMode(pin, OUTPUT); digitalWrite(pin, LOW); pinStates[pin] = LOW; } else if (mode == WEB_PIN_INPUT) { pinMode(pin, INPUT); // or INPUT_PULLUP as needed pinStates[pin] = digitalRead(pin); } // You can implement custom mode change logic here if needed }); } void loop() { // Handle WebApp server communications webAppsServer.loop(); // Monitor input pins for real-time updates static unsigned long lastInputCheck = 0; if (millis() - lastInputCheck > 100) { // Check every 100ms lastInputCheck = millis(); // Check input pins for changes and send real-time updates int inputPins[] = { 8, 9 }; for (int i = 0; i < 2; i++) { int pin = inputPins[i]; int currentState = digitalRead(pin); if (currentState != pinStates[pin]) { pinStates[pin] = currentState; // Send real-time update to web clients webDigitalPinsPage.updatePinState(pin, currentState); } } } // Add your main application code here delay(10); }
  • Configura las credenciales de WiFi en el código actualizando estas líneas:
const char WIFI_SSID[] = "YOUR_WIFI_NETWORK"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";
  • Haz clic en el botón Subir en el IDE de Arduino para subir código al ESP32
  • Abre el Monitor Serial
  • Revisa el resultado en el Monitor Serial. Se ve como se muestra a continuación
COM6
Send
WebSocket client connected from: 192.168.0.5 New WebSocket connection established WebSocket message received: SLIDER:GET_VALUES WebSocket client connected from: 192.168.0.5 New WebSocket connection established WebSocket message received: SLIDER:64,128 DIYables WebApp - Web Digital Pins Example INFO: Added app / INFO: Added app /web-digital-pins DEBUG: Enabling pin 0 with mode OUTPUT DEBUG: Enabling pin 1 with mode OUTPUT DEBUG: Enabling pin 2 with mode OUTPUT DEBUG: Enabling pin 3 with mode OUTPUT DEBUG: Enabling pin 4 with mode OUTPUT DEBUG: Enabling pin 13 with mode OUTPUT DEBUG: Enabling pin 8 with mode INPUT DEBUG: Enabling pin 9 with mode INPUT DIYables WebApp Library Platform: ESP32 Network connected! IP address: 192.168.0.2 HTTP server started on port 80 Configuring WebSocket server callbacks... WebSocket server started on port 81 WebSocket URL: ws://192.168.0.2:81 WebSocket server started on port 81 ========================================== DIYables WebApp Ready! ========================================== 📱 Web Interface: http://192.168.0.2 🔗 WebSocket: ws://192.168.0.2:81 📋 Available Applications: 🏠 Home Page: http://192.168.0.2/ 📟 Digital Pins: http://192.168.0.2/web-digital-pins ==========================================
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Si no ves nada, reinicia la placa ESP32.
  • Toma nota de la dirección IP que se muestre y escribe esa 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 a continuación:
ESP32 DIYables página de inicio de la aplicación web con la aplicación Web Digital Pins
  • Haz clic en el enlace de Web Digital Pins; verás la interfaz de usuario de la aplicación Web Digital Pins tal como se muestra a continuación:
ESP32 DIYables Aplicación Web de Pines Digitales
  • O también puedes acceder a la página directamente mediante la dirección IP seguida de /web-digital-pins. Por ejemplo: http://192.168.0.2/web-digital-pins
  • Intenta controlar los pines digitales haciendo clic en los botones de los pines para encenderlos/apagarlos y observa cómo el LED integrado (pin 13) responde a tus comandos.

Personalización Creativa - Adapta el código a tu proyecto

El ejemplo muestra diferentes formas de configurar pines para que se ajusten a las necesidades de tu proyecto creativo:

2. Configurar los ajustes de PIN

El ejemplo muestra diferentes formas de configurar pines:

Método 1: Habilitar pines específicos

// Enable individual pins for output control webDigitalPinsPage.enablePin(2, WEB_PIN_OUTPUT); // Pin 2 as output webDigitalPinsPage.enablePin(3, WEB_PIN_OUTPUT); // Pin 3 as output webDigitalPinsPage.enablePin(4, WEB_PIN_INPUT); // Pin 4 as input

Método 2: Habilitar rangos de pines

// Enable a range of pins for output control webDigitalPinsPage.enableOutputPins(2, 13); // Pins 2-13 as outputs

Método 3: Habilitar todos los pines

// Enable all pins 0-13 for control (use with caution for pins 0,1) webDigitalPinsPage.enableAllPins();

4. Subir el boceto

  1. Selecciona tu placa ESP32: Herramientas → Placa → ESP32
  2. Selecciona el puerto correcto: Herramientas → Puerto → [tu puerto ESP32]
  3. Haz clic en el botón Subir

5. Obtener la dirección IP

  1. Abrir Herramientas → Monitor Serial
  2. Establece la velocidad en baudios a 9600
  3. Espera a que el ESP32 se conecte a la red WiFi
  4. Anota la dirección IP mostrada (p. ej., 192.168.1.100)

6. Acceder a la Interfaz de Pines Digitales

Abre tu navegador web y navega a:

http://[ARDUINO_IP_ADDRESS]/digital-pins

Ejemplo: http://192.168.1.100/digital-pins

Cómo usar

Interfaz de control de pines

La interfaz web muestra todos los pines configurados con:

  • Número de pin: Muestra qué pin ESP32 (0-13)
  • Estado actual: Muestra si está ENCENDIDO (verde) o APAGADO (rojo)
  • Botón de control: Haz clic para alternar el estado del pin
  • Tipo de pin: Muestra si está configurado como ENTRADA o SALIDA

Control de pines individuales

  1. Encender PIN: Haz clic en el botón de pin cuando aparezca "APAGADO"
  2. Apagar PIN: Haz clic en el botón de pin cuando aparezca "ENCENDIDO"
  3. Estado del monitor: Los botones de pin se actualizan automáticamente para mostrar el estado actual

Operaciones en lote

Utilice los botones de control en lote para controlar varios pines a la vez:

Todo encendido

  • Coloca todos los pines de salida configurados en estado ALTO
  • Los pines de entrada no se ven afectados
  • Útil para probar todos los dispositivos conectados

Todo apagado

  • Coloca todos los pines de salida configurados en estado bajo
  • Los pines de entrada no se ven afectados
  • Forma segura de desactivar todas las salidas

Alternar todo

  • Invierte el estado de todos los pines de salida
  • Los pines encendidos se vuelven apagados; los pines apagados se vuelven encendidos
  • Crea efectos de iluminación interesantes

Monitoreo en tiempo real

  • Los estados de los pines se actualizan automáticamente a través de WebSocket
  • Los cambios realizados en el código se reflejan en la interfaz web
  • Varios usuarios pueden monitorear el mismo ESP32 al mismo tiempo

Conexiones de hardware

Ejemplos de pines de salida

Control de LEDs

Arduino Pin → LED (with resistor) → Ground Pin 2 → LED Anode → 220Ω Resistor → Ground Pin 3 → LED Anode → 220Ω Resistor → Ground

Control de relés

Arduino Pin → Relay Input Pin 4 → Relay IN1 Pin 5 → Relay IN2

Control de motor (a través del controlador de motor)

Arduino Pin → Motor Driver Input Pin 6 → Motor Driver IN1 Pin 7 → Motor Driver IN2 Pin 9 → Motor Driver ENA (PWM)

Ejemplos de pines de entrada

Entrada de interruptor

Switch → ESP32 Pin (with pull-up resistor) Switch → Pin 8 → 10kΩ resistor → 5V → GND

Entrada del sensor

Sensor Signal → ESP32 Pin PIR Sensor → Pin 10 Ultrasonic → Pin 11 (Echo)

Personalización de código

Añadir callbacks de cambio de pin

Monitorear cuando los pines cambien de estado:

void setup() { // Set callback for pin state changes webDigitalPinsPage.onPinChange([](int pin, bool state) { Serial.print("Pin "); Serial.print(pin); Serial.print(" changed to: "); Serial.println(state ? "HIGH" : "LOW"); // Add your custom logic here if (pin == 13 && state == HIGH) { Serial.println("Built-in LED turned ON!"); } }); }

Inicialización personalizada de pines

Configurar pines específicos en los estados deseados al iniciar:

void setup() { // Initialize pins to specific states webDigitalPinsPage.setPinState(2, HIGH); // Turn on pin 2 webDigitalPinsPage.setPinState(3, LOW); // Turn off pin 3 // Configure pin modes pinMode(4, INPUT_PULLUP); // Pin 4 as input with pull-up pinMode(5, OUTPUT); // Pin 5 as output }

Lectura de pines de entrada

Monitorea los pines de entrada en tu bucle principal:

void loop() { static unsigned long lastRead = 0; if (millis() - lastRead > 1000) { // Read every second // Read input pins and update web interface for (int pin = 0; pin <= 13; pin++) { if (webDigitalPinsPage.isPinEnabled(pin) && webDigitalPinsPage.getPinMode(pin) == WEB_PIN_INPUT) { bool currentState = digitalRead(pin); webDigitalPinsPage.updatePinState(pin, currentState); } } lastRead = millis(); } }

Características avanzadas

Grupos de pines

Crear grupos lógicos de pines para funciones relacionadas:

// Define pin groups const int LED_PINS[] = {2, 3, 4, 5}; const int RELAY_PINS[] = {6, 7, 8, 9}; void controlLEDGroup(bool state) { for (int pin : LED_PINS) { webDigitalPinsPage.setPinState(pin, state); } } void controlRelayGroup(bool state) { for (int pin : RELAY_PINS) { webDigitalPinsPage.setPinState(pin, state); } }

Generación de patrones

Crear patrones de iluminación o secuencias:

void runLightPattern() { static unsigned long lastChange = 0; static int currentPin = 2; if (millis() - lastChange > 500) { // Change every 500ms // Turn off all pins for (int pin = 2; pin <= 13; pin++) { webDigitalPinsPage.setPinState(pin, LOW); } // Turn on current pin webDigitalPinsPage.setPinState(currentPin, HIGH); // Move to next pin currentPin++; if (currentPin > 13) currentPin = 2; lastChange = millis(); } }

Integración del control de PWM

Combina con control analógico para funciones avanzadas:

void setup() { // Enable digital pins for on/off control webDigitalPinsPage.enablePin(9, WEB_PIN_OUTPUT); webDigitalPinsPage.enablePin(10, WEB_PIN_OUTPUT); // Set PWM pins for brightness control analogWrite(9, 128); // 50% brightness analogWrite(10, 255); // 100% brightness }

Consideraciones de seguridad

Guía de uso de pines

Pines 0 y 1 (TX/RX)

  • Se utiliza para la comunicación serial
  • Evite usarlo a menos que sea absolutamente necesario
  • Puede interferir con la programación y la depuración

Pin 13 (LED incorporado)

  • Seguro para pruebas
  • El LED incorporado proporciona retroalimentación visual
  • Bueno para pruebas iniciales

Pines 2-12

  • Seguro para entradas/salidas digitales generales
  • Recomendado para la mayoría de las aplicaciones
  • Sin consideraciones especiales

Limitaciones actuales

Corriente Máxima por Pin: 40 mA

  • Utiliza resistencias limitadoras de corriente con LEDs
  • Utiliza transistores o relés para cargas de alta corriente
  • Considera el consumo total de corriente

Niveles de voltaje: lógica de 3,3 V

  • ESP32 utiliza lógica de 3.3V
  • Asegúrate de que los dispositivos conectados sean compatibles
  • Utiliza convertidores de nivel para dispositivos de 5V si es necesario

Solución de problemas

Problemas comunes

1. PIN no responde

  • Verificar que el pin esté habilitado en el código
  • Verificar conexiones de hardware
  • Verificar si hay cortocircuitos
  • Confirmar el modo del pin (ENTRADA/SALIDA)

2. La interfaz web no se está actualizando

  • Verificar el estado de la conexión WebSocket
  • Recargar la página del navegador
  • Verificar la conectividad de la red
  • Verificar el Monitor Serial en busca de errores

3. Las operaciones en lote no funcionan

  • Asegúrese de que los pines estén configurados como salidas
  • Verifique las limitaciones del hardware
  • Verifique la capacidad de la fuente de alimentación
  • Monitoree las condiciones de sobrecorriente

4. Pines de entrada que muestran estados incorrectos

  • Verificar resistencias pull-up y pull-down adecuadas
  • Verificar los niveles de la señal de entrada
  • Verificar interferencia electromagnética
  • Confirmar la configuración de pines

Consejos de depuración

Habilitar la salida de depuración:

void debugPinStates() { Serial.println("=== Pin States ==="); for (int pin = 0; pin <= 13; pin++) { if (webDigitalPinsPage.isPinEnabled(pin)) { Serial.print("Pin "); Serial.print(pin); Serial.print(": "); Serial.print(digitalRead(pin) ? "HIGH" : "LOW"); Serial.print(" ("); Serial.print(webDigitalPinsPage.getPinMode(pin) == WEB_PIN_OUTPUT ? "OUTPUT" : "INPUT"); Serial.println(")"); } } Serial.println("=================="); }

Ideas de proyectos

Automatización del hogar

  • Luces de la sala de control
  • Operar las persianas
  • Controlar los sistemas de calefacción y refrigeración
  • Integración del sistema de seguridad

Automatización del jardín

  • Control del sistema de riego
  • Gestión de iluminación de cultivo
  • Regulación de la temperatura
  • Control de la humedad

Control del Taller

  • Control de potencia de la herramienta
  • Gestión de iluminación
  • Sistema de ventilación
  • Interbloqueos de seguridad

Proyectos Educativos

  • Demostraciones de puertas lógicas
  • Simulación de semáforo
  • Proyectos de sistemas de alarma
  • Experimentos de control remoto

Ejemplos de integración

Iluminación activada por movimiento

void setup() { webDigitalPinsPage.enablePin(2, WEB_PIN_OUTPUT); // LED webDigitalPinsPage.enablePin(3, WEB_PIN_INPUT); // PIR sensor pinMode(3, INPUT); } void loop() { if (digitalRead(3) == HIGH) { // Motion detected webDigitalPinsPage.setPinState(2, HIGH); // Turn on LED delay(5000); // Keep on for 5 seconds webDigitalPinsPage.setPinState(2, LOW); // Turn off LED } }

Ventilador con control de temperatura

void loop() { float temperature = getTemperature(); // Your temperature reading function if (temperature > 25.0) { webDigitalPinsPage.setPinState(4, HIGH); // Turn on fan } else { webDigitalPinsPage.setPinState(4, LOW); // Turn off fan } }

Próximos Pasos

Una vez que hayas dominado el ejemplo WebDigitalPins, intenta:

  1. WebSlider - Para control PWM y analógico
  2. WebJoystick - Para control direccional
  3. WebMonitor - Para depuración y monitoreo
  4. MultipleWebApps - Combinando todas las características

Soporte

※ 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!