Exemplo WebSlider com ESP32 - Tutorial de Interface de Controle com Dois Sliders
Visão Geral
O exemplo WebSlider oferece dois controles deslizantes (sliders) independentes, acessíveis por um navegador web. Projetado para a plataforma educacional ESP32, com recursos analógicos aprimorados, controle de precisão e módulos educacionais integrados para aprender PWM e eletrônica analógica. Cada slider oferece valores de 0 a 255, o que os torna perfeitos para controle PWM, ajuste de brilho, controle de velocidade de motor e qualquer aplicação que precise de valores de controle semelhantes a analógicos.
Recursos
Dois Sliders: Dois controles deslizantes independentes (faixa de 0 a 255 cada)
Valores em Tempo Real: Atualizações instantâneas dos valores via comunicação WebSocket
Compatível com PWM: Valores de 8 bits (0-255), perfeitos para funções analogWrite()
Feedback Visual: Exibição do valor em tempo real para cada slider
Botões de Predefinição: Valores predefinidos rápidos para configurações comuns
Suporte a Toque e Mouse: Funciona em desktop, tablet e dispositivos móveis
Design Responsivo: Adapta-se a diferentes tamanhos de tela
Persistência de Valores: Os sliders lembram a última posição quando a página é recarregada
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.
Conecte a placa ESP32 ao seu computador usando um cabo USB.
Abra o Arduino IDE no seu computador.
Selecione a placa ESP32 apropriada (por exemplo, ESP32 Dev Module) e a porta COM.
Navegue até o ícone Libraries na barra esquerda do Arduino IDE.
Pesquise "DIYables ESP32 WebApps" e encontre a biblioteca DIYables ESP32 WebApps da DIYables
Clique no botão Install para instalar a biblioteca.
Você será solicitado a instalar algumas outras dependências da biblioteca
Clique no botão Install All para instalar todas as dependências da biblioteca.
No Arduino IDE, vá em File Examples DIYables ESP32 WebApps WebSlider, ou copie o código acima e cole no editor do 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);}
Configure as credenciais de WiFi no código atualizando estas linhas:
Clique no botão Upload no Arduino IDE para fazer o upload do código para o ESP32
Abra o Serial Monitor
Veja o resultado no Serial Monitor. Ele deve ser parecido com o abaixo
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
Se você não vir nada, reinicie a placa ESP32.
Anote o endereço IP exibido e digite esse endereço na barra de endereços de um navegador web no seu smartphone ou PC.
Exemplo: http://192.168.0.2
Você verá a página inicial como na imagem abaixo:
Clique no link Web Slider e você verá a interface do app Web Slider como abaixo:
Você também pode acessar a página diretamente pelo endereço IP seguido de /web-slider. Por exemplo: http://192.168.0.2/web-slider
Tente mover os dois sliders para controlar valores analógicos (0-255) e observe o feedback em tempo real no Serial Monitor.
Personalização Criativa - Adapte o Código ao Seu Projeto
Slider 1: Primeiro slider de controle com exibição do valor (0-255)
Slider 2: Segundo slider de controle com exibição do valor (0-255)
Exibição de Valor: Valores numéricos em tempo real para os dois sliders
Botões de Predefinição: Acesso rápido a valores comuns (0%, 25%, 50%, 75%, 100%)
Operando os Sliders
Desktop (Controle com Mouse)
Clicar e Arrastar: Clique na alça do slider e arraste para ajustar o valor
Clicar na Posição: Clique em qualquer ponto da trilha do slider para pular para aquele valor
Controle Fino: Use movimentos pequenos do mouse para um ajuste preciso
Celular/Tablet (Controle por Toque)
Tocar e Arrastar: Toque na alça do slider e arraste para a nova posição
Tocar na Posição: Toque na trilha do slider para definir o valor
Controle Suave: Arrastar o dedo proporciona mudanças suaves de valor
Faixas de Valores
Cada slider oferece:
Valor Mínimo: 0 (0% - totalmente desligado)
Valor Máximo: 255 (100% - intensidade máxima)
Resolução: 256 passos discretos (precisão de 8 bits)
Compatibilidade com PWM: Uso direto com a função analogWrite()
Exemplos de Programação
Tratador Básico de Slider
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 });}
Controle de Brilho 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;}
Exemplos de Integração com Hardware
Controle de Fita 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)); });}
Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!