Ejemplo de ESP32 WebSlider - Tutorial de la Interfaz de Control de Dos Deslizadores
Visión general
El ejemplo WebSlider proporciona dos controles deslizantes independientes accesibles a través de un navegador web. Plataforma educativa diseñada para ESP32 con capacidades analógicas mejoradas, características de control de precisión y módulos educativos integrados para aprender PWM y electrónica analógica. Cada control deslizante ofrece valores de 0-255, lo que los hace perfectos para el control PWM, el ajuste de brillo, el control de velocidad del motor y cualquier aplicación que requiera valores de control analógicos.
Características
Deslizadores Dobles: Dos controles deslizantes independientes (rango 0-255 cada uno)
Valores en Tiempo Real: Actualizaciones de valores en tiempo real a través de WebSocket
Compatibles con PWM: Valores de 8 bits (0-255), perfectos para las funciones analogWrite()
Retroalimentación Visual: Visualización de valores en tiempo real para cada control deslizante
Botones Predefinidos: Valores rápidos para configuraciones comunes
Soporte Táctil y con Ratón: Funciona en computadoras de escritorio, tabletas y dispositivos móviles
Diseño Adaptable: Se adapta a diferentes tamaños de pantalla
Persistencia de Valores: Los deslizadores recuerdan la última posición cuando se recarga la página
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.
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 Dev Module) y el puerto COM.
Navega hasta el icono Bibliotecas en la barra izquierda del IDE de Arduino.
Busca "DIYables ESP32 WebApps", luego encuentra la DIYables ESP32 WebApps Library de DIYables.
Haz 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, vaya a Archivo Ejemplos DIYables ESP32 WebApps WebSlider ejemplo, o copie el código anterior y péguelo en el editor de Arduino IDE
/* * DIYables WebApp Library - Web Slider Example * * This example demonstrates the Web Slider feature: * - Two independent sliders (0-255) * - Real-time value monitoring * - Template for hardware control * * 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]/webslider */#include <DIYables_ESP32_Platform.h>#include <DIYablesWebApps.h>// WiFi credentials - UPDATE THESE WITH YOUR NETWORKconstchar WIFI_SSID[] = "YOUR_WIFI_SSID";constchar WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";// Create WebApp server and page instancesESP32ServerFactory serverFactory;DIYablesWebAppServerwebAppsServer(serverFactory, 80, 81);DIYablesHomePage homePage;DIYablesWebSliderPage webSliderPage;// Current slider valuesint slider1Value = 64; // Default 25%int slider2Value = 128; // Default 50%voidsetup() {Serial.begin(9600);delay(1000);// TODO: Initialize your hardware pins hereSerial.println("DIYables ESP32 WebApp - Web Slider Example");// Add home and web slider pageswebAppsServer.addApp(&homePage);webAppsServer.addApp(&webSliderPage);// Optional: Add 404 page for better user experiencewebAppsServer.setNotFoundPage(DIYablesNotFoundPage());// Start the WebApp serverif (!webAppsServer.begin(WIFI_SSID, WIFI_PASSWORD)) {while (1) {Serial.println("Failed to start WebApp server!");delay(1000); } }// Set up slider callback for value changes webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {// Store the received values slider1Value = slider1; slider2Value = slider2;// Print slider values (0-255)Serial.println("Slider 1: " + String(slider1) + ", Slider 2: " + String(slider2));// TODO: Add your control logic here based on slider values// Examples:// - Control PWM: analogWrite(LED_PIN, slider1);// - Control servos: servo.write(map(slider1, 0, 255, 0, 180));// - Control motor speed: analogWrite(MOTOR_PIN, slider2);// - Control brightness: strip.setBrightness(slider1);// - Send values via Serial, I2C, SPI, etc. });// Set up callback for config requests (when client requests current values) webSliderPage.onSliderValueToWeb([]() { webSliderPage.sendToWebSlider(slider1Value, slider2Value);Serial.println("Web client requested values - Sent: Slider1=" + String(slider1Value) + ", Slider2=" + String(slider2Value)); });}voidloop() {// Handle WebApp server communicationswebAppsServer.loop();// TODO: Add your main application code heredelay(10);}
Configura las credenciales de WiFi en el código actualizando estas líneas:
Haz clic en el botón Subir en el IDE de Arduino para subir el código al ESP32
Abre el Monitor Serial
Consulta el resultado en el Monitor Serial. Es similar a lo siguiente
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
DIYables WebApp - Web Slider Example
INFO: Added app /
INFO: Added app /web-slider
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/
🎚️ Web Slider: http://192.168.0.2/web-slider
==========================================
Ln 11, Col 1
ESP32 Dev Module on COM15
2
Si no ves nada, reinicia la placa ESP32.
Toma nota de la dirección IP mostrada 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.
Haga clic en el enlace Web Slider; verá la interfaz de usuario de la aplicación Web Slider como se muestra a continuación:
O también puedes acceder a la página directamente mediante la dirección IP seguida de /web-slider. Por ejemplo: http://192.168.0.2/web-slider
Intenta mover los dos deslizadores para controlar valores analógicos (0-255) y observa la retroalimentación en tiempo real en el Monitor Serial.
Personalización Creativa - Adapte el código a su proyecto
Establecer valores predeterminados del deslizador
Configurar las posiciones iniciales de los deslizadores:
Deslizador 1: Primer deslizador de control con visualización del valor (0-255)
Deslizador 2: Segundo deslizador de control con visualización del valor (0-255)
Visualización del valor: Valores numéricos en tiempo real para ambos deslizadores
Botones de preajuste: Acceso rápido a valores comunes (0%, 25%, 50%, 75%, 100%)
Funcionamiento de los deslizadores
Escritorio (Control del Ratón)
Haga clic y arrastre: Haga clic en el manejador del deslizante y arrástrelo para ajustar el valor
Posición de clic: Haga clic en cualquier lugar de la pista deslizante para ir a ese valor
Ajuste fino: Utilice movimientos pequeños del ratón para un ajuste preciso
Móvil/Tableta (Control táctil)
Tocar y Arrastrar: Toca la manija del control deslizante y arrástrala a una nueva posición
Tocar la pista: Toca en la pista del control deslizante para establecer el valor
Control Suave: El arrastre con el dedo proporciona cambios de valor suaves
Rangos de valores
Cada control deslizante ofrece:
Valor mínimo: 0 (0% - completamente apagado)
Valor máximo: 255 (100% - intensidad máxima)
Resolución: 256 pasos discretos (precisión de 8 bits)
Compatibilidad PWM: Uso directo con la función analogWrite()
Ejemplos de Programación
Manejador de control deslizante básico
voidsetup() {// Set up slider callback for value changes webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {// Store the received values slider1Value = slider1; slider2Value = slider2;// Print slider values (0-255)Serial.println("Slider 1: " + String(slider1) + ", Slider 2: " + String(slider2));// Add your control logic here });}
Control de Brillo de LED
// Pin definitions for PWM LEDsconstint LED1_PIN = 9; // PWM pin for first LEDconstint LED2_PIN = 10; // PWM pin for second LEDvoidsetup() {// Configure LED pins as outputspinMode(LED1_PIN, OUTPUT);pinMode(LED2_PIN, OUTPUT);// Set initial brightnessanalogWrite(LED1_PIN, slider1Value);analogWrite(LED2_PIN, slider2Value); webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {// Store values slider1Value = slider1; slider2Value = slider2;// Control LED brightness directly (0-255 PWM)analogWrite(LED1_PIN, slider1);analogWrite(LED2_PIN, slider2);Serial.println("LED1 Brightness: " + String(slider1) +", LED2 Brightness: " + String(slider2)); });}
void setupThresholdControl() { webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) { slider1Value = slider1; slider2Value = slider2;// Threshold-based control for discrete outputsconstint LOW_THRESHOLD = 85; // 33%constint MEDIUM_THRESHOLD = 170; // 66%// Control digital outputs based on slider 1 thresholdsif (slider1 < LOW_THRESHOLD) {// Low level: Turn off all outputsdigitalWrite(2, LOW);digitalWrite(3, LOW);digitalWrite(4, LOW); } elseif (slider1 < MEDIUM_THRESHOLD) {// Medium level: Turn on first outputdigitalWrite(2, HIGH);digitalWrite(3, LOW);digitalWrite(4, LOW); } else {// High level: Turn on all outputsdigitalWrite(2, HIGH);digitalWrite(3, HIGH);digitalWrite(4, HIGH); }// Use slider 2 for analog PWM controlanalogWrite(9, slider2); });}
Sistema de Valores Predefinidos
// Predefined preset valuesconstint PRESETS[][2] = { {0, 0}, // Preset 0: Both off {64, 128}, // Preset 1: Low/Medium {128, 128}, // Preset 2: Both medium {255, 128}, // Preset 3: High/Medium {255, 255} // Preset 4: Both maximum};void applyPreset(int presetNumber) {if (presetNumber >= 0 && presetNumber < 5) { slider1Value = PRESETS[presetNumber][0]; slider2Value = PRESETS[presetNumber][1];// Update hardwareanalogWrite(9, slider1Value);analogWrite(10, slider2Value);// Send updated values to web interface webSliderPage.sendToWebSlider(slider1Value, slider2Value);Serial.println("Applied preset " + String(presetNumber) +": " + String(slider1Value) + ", " + String(slider2Value)); }}void setupPresetSystem() {// You could trigger presets based on other inputs// For example, reading digital pins for preset buttons webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) { slider1Value = slider1; slider2Value = slider2;// Your normal slider handlinganalogWrite(9, slider1);analogWrite(10, slider2); });}voidloop() { server.loop();// Check for preset trigger conditions// Example: Read buttons connected to digital pinsstaticbool lastButton = false;bool currentButton = digitalRead(7); // Preset button on pin 7if (currentButton && !lastButton) { // Button pressedstaticint currentPreset = 0; applyPreset(currentPreset); currentPreset = (currentPreset + 1) % 5; // Cycle through presets } lastButton = currentButton;}
Ejemplos de integración de hardware
Control de tiras de LED
// For WS2812B or similar addressable LED strips// (requires additional libraries like FastLED or Adafruit NeoPixel)constint LED_STRIP_PIN = 6;constint NUM_LEDS = 30;void setupLEDStrip() {// Initialize LED strip (depends on library used) webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) { slider1Value = slider1; slider2Value = slider2;// Slider 1 controls brightness (0-255)// Slider 2 controls color temperature or hueuint8_t brightness = slider1;uint8_t hue = slider2;// Update LED strip (example with conceptual functions)// strip.setBrightness(brightness);// strip.fill(CHSV(hue, 255, 255));// strip.show();Serial.println("LED Strip - Brightness: " + String(brightness) +", Hue: " + String(hue)); });}
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!