Exemple ESP32 WebSlider - Tutoriel sur l’interface de contrôle à double curseur
Vue d'ensemble
L'exemple WebSlider fournit deux curseurs indépendants accessibles via un navigateur web. Conçu pour la plateforme éducative ESP32 avec des capacités analogiques améliorées, des fonctionnalités de contrôle de précision et des modules éducatifs intégrés pour apprendre le PWM et l'électronique analogique. Chaque curseur offre des valeurs de 0 à 255, ce qui les rend parfaits pour le contrôle PWM, le réglage de la luminosité, le contrôle de la vitesse du moteur et toute application nécessitant des valeurs de contrôle analogiques.
Fonctionnalités
Deux curseurs indépendants: Contrôles de curseur indépendants (plage 0-255 chacun)
Valeurs en temps réel: Mises à jour instantanées des valeurs via une communication WebSocket
Compatible PWM: Valeurs sur 8 bits (0-255), parfaites pour les fonctions analogWrite()
Rétroaction visuelle: Affichage en temps réel de la valeur pour chaque curseur
Boutons de préréglage: Valeurs préconfigurées rapides pour des configurations courantes
Support tactile et souris: Fonctionne sur ordinateur de bureau, tablette et appareils mobiles
Conception réactive: S'adapte à différentes tailles d'écran
Persistance des valeurs: Les curseurs retiennent la dernière position lors du rechargement de la page
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.
Connectez la carte ESP32 à votre ordinateur à l'aide d'un câble USB.
Lancez l'IDE Arduino sur votre ordinateur.
Sélectionnez la carte ESP32 appropriée (par exemple ESP32 Dev Module) et le port COM.
Accédez à l'icône Libraries dans la barre de gauche de l'IDE Arduino.
Recherchez "DIYables ESP32 WebApps", puis trouvez la bibliothèque DIYables ESP32 WebApps par DIYables.
Cliquez sur le bouton Install pour installer la bibliothèque.
On vous demandera d'installer d'autres dépendances de bibliothèque.
Cliquez sur le bouton Tout installer pour installer toutes les dépendances de la bibliothèque.
Dans l'IDE Arduino, allez dans Fichier Exemples DIYables ESP32 WebApps WebSlider exemple, ou copiez le code ci-dessus et collez-le dans l'éditeur de l'IDE Arduino
/* * 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);}
Configurez les identifiants WiFi dans le code en mettant à jour ces lignes :
Cliquez sur le bouton Téléverser dans l'IDE Arduino pour téléverser le code sur l'ESP32
Ouvrez le Moniteur Série
Consultez le résultat dans le Moniteur Série. Cela ressemble à ce qui suit.
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 vous ne voyez rien, redémarrez la carte ESP32.
Notez l'adresse IP affichée et saisissez cette adresse dans la barre d'adresse d'un navigateur Web sur votre smartphone ou votre PC.
Exemple : http://192.168.0.2
Vous verrez la page d'accueil comme sur l'image ci-dessous :
Cliquez sur le lien Web Slider, vous verrez l'interface utilisateur de l'application Web Slider comme ci-dessous:
Vous pouvez également accéder directement à la page par l'adresse IP suivie de /web-slider. Par exemple : http://192.168.0.2/web-slider
Essayez de déplacer les deux curseurs pour contrôler les valeurs analogiques (0-255) et observez le retour en temps réel dans le Moniteur série.
Personnalisation créative - Adaptez le code à votre projet
Curseur 1: Premier curseur de contrôle avec affichage de la valeur (0-255)
Curseur 2: Deuxième curseur de contrôle avec affichage de la valeur (0-255)
Affichage de la valeur: Valeurs numériques en temps réel pour les deux curseurs
Boutons prédéfinis: Accès rapide à des valeurs courantes (0 %, 25 %, 50 %, 75 %, 100 %)
Utilisation des curseurs
Bureau (contrôle de la souris)
Cliquer et faire glisser : Cliquez sur la poignée du curseur et faites-la glisser pour ajuster la valeur
Position du clic : Cliquez n'importe où sur la piste du curseur pour atteindre cette valeur
Réglage fin : Utilisez de petits mouvements de la souris pour un ajustement précis
Mobile/Tablette (Contrôle tactile)
Touchez et faites glisser: Touchez la poignée du curseur et faites-la glisser jusqu'à la nouvelle position
Position par tap: Touchez la piste du curseur pour régler la valeur
Contrôle fluide: Le glissement du doigt permet des changements de valeur fluides
Plages de valeurs
Chaque curseur fournit :
Valeur minimale: 0 (0% - complètement éteint)
Valeur maximale: 255 (100% - intensité maximale)
Résolution: 256 pas discrets (8 bits de précision)
Compatibilité PWM: Utilisation directe de la fonction analogWrite()
Exemples de programmation
Gestionnaire de curseur basique
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 });}
Contrôle de la luminosité des 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); });}
Système de valeurs prédéfinies
// 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;}
Exemples d'intégration matérielle
Contrôle du ruban 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)); });}
Réglage de la luminosité de l'éclairage de la pièce
Interface de mélange des couleurs RVB
Réglage de la vitesse d'animation du ruban LED
Réglage de l'intensité de l'éclairage de scène
Projets de contrôle des moteurs
Contrôle de la vitesse du robot
Régulation de la vitesse du ventilateur
Contrôle du débit de la pompe
Vitesse de la bande transporteuse
Projets audio
Interface de contrôle du volume
Contrôle de tonalité et égaliseur
Intensité des effets sonores
Contrôle de la visualisation musicale
Domotique
Contrôle du climat (intensité du chauffage et du refroidissement)
Contrôle de la position des stores
Contrôle du débit du système d'irrigation
Luminosité et volume des appareils intelligents
Intégration avec d'autres exemples
Combiner avec WebJoystick
Utilisez des curseurs pour les limites de vitesse et un joystick pour la direction :
// Global speed limit from slidersintmaxSpeed = 255;// In WebSlider callbackwebSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {maxSpeed = slider1; // Use slider 1 as global speed limit});// In WebJoystick callbackwebJoystickPage.onJoystickValueFromWeb([](int x, int y) {// Scale joystick values by slider-controlled speed limitint scaledX = map(x, -100, 100, -maxSpeed, maxSpeed);int scaledY = map(y, -100, 100, -maxSpeed, maxSpeed); controlRobot(scaledX, scaledY);});
Associer avec WebDigitalPins
Utilisez des curseurs pour contrôler le PWM et les broches numériques pour allumer et éteindre:
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {// Only apply PWM if corresponding digital pins are ONif (webDigitalPinsPage.getPinState(2)) {analogWrite(9, slider1); } else {analogWrite(9, 0); }if (webDigitalPinsPage.getPinState(3)) {analogWrite(10, slider2); } else {analogWrite(10, 0); }});
Tutoriel vidéo
La démo vidéo ci-dessous utilise le code ci-dessous :
/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32/diyables-esp32-web-apps-web-slider*//* * 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>#include <ESP32Servo.h>Servo servo1, servo2;// WiFi credentials - UPDATE THESE WITH YOUR NETWORKconstchar WIFI_SSID[] = "Nhuan 3";constchar WIFI_PASSWORD[] = "15671108";// 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 here servo1.attach(26); servo2.attach(27);Serial.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 initial positions servo1.write(map(slider1Value, 0, 255, 0, 180)); servo2.write(map(slider2Value, 0, 255, 0, 180)); webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) { slider1Value = slider1; slider2Value = slider2;// Map slider values (0-255) to servo angles (0-180°)int angle1 = map(slider1, 0, 255, 0, 180);int angle2 = map(slider2, 0, 255, 0, 180);// Move servos to calculated positions servo1.write(angle1); servo2.write(angle2);Serial.println("Servo1: " + String(angle1) + "°, Servo2: " + String(angle2) + "°"); });// 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);}
Prochaines étapes
Après avoir maîtrisé l'exemple WebSlider, essayez :
WebJoystick - Pour le contrôle directionnel en 2D
WebDigitalPins - Pour le contrôle discret marche/arrêt
WebMonitor - Pour le débogage des valeurs des curseurs
MultipleWebApps - En combinant des curseurs avec d'autres contrôles
Assistance
Pour obtenir une aide supplémentaire :
Consultez la documentation de référence de l’API
Consultez les tutoriels DIYables : https://esp32io.com/tutorials/diyables-esp32-webapps
N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !