ESP32 WebSlider-Beispiel – Tutorial zur Bedienoberfläche mit zwei Schiebereglern
Das WebSlider-Beispiel bietet zwei unabhängige Schieberegler, die über einen Webbrowser zugänglich sind. Für ESP32 entwickelt Bildungsplattform mit erweiterten analogen Fähigkeiten, Präzisionssteuerungsfunktionen und integrierten Bildungsmodulen zum Erlernen von PWM und analoger Elektronik. Jeder Schieberegler bietet Werte von 0–255, wodurch er sich ideal für PWM-Steuerung, Helligkeitsregelung, Motordrehzahlregelung und jede Anwendung eignet, die analoge Steuerwerte erfordert.
Zwei unabhängige Schieberegler: Bereich pro Regler 0–255
Werte in Echtzeit: Sofortige Werteaktualisierung über WebSocket-Kommunikation
PWM-kompatibel: 8-Bit-Werte (0–255) perfekt für Funktionen wie analogWrite()
Visuelles Feedback: Anzeige der Werte in Echtzeit für jeden Slider
Voreinstellungs-Schaltflächen: Schnelle Voreinstellungen für gängige Konfigurationen
Touch- und Mausunterstützung: Funktioniert auf Desktop-, Tablet- und Mobilgeräten
Responsives Design: Passt sich an verschiedene Bildschirmgrößen an
Wertpersistenz: Die Schieberegler merken sich die letzte Position beim Neuladen der Seite
Oder Sie können die folgenden Kits kaufen:
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.
Befolgen Sie diese Anweisungen Schritt für Schritt:
Schließen Sie das ESP32-Board mit einem USB-Kabel an Ihren Computer an.
Starten Sie die Arduino IDE auf Ihrem Computer.
Wählen Sie das passende ESP32-Board (z. B. ESP32 Dev Module) und den COM-Port aus.
Gehen Sie zu dem Libraries-Symbol in der linken Leiste der Arduino IDE.
Suchen Sie "DIYables ESP32 WebApps", und finden Sie dann die DIYables ESP32 WebApps-Bibliothek von DIYables.
Klicken Sie auf die Schaltfläche Installieren, um die Bibliothek zu installieren.
Sie werden aufgefordert, weitere Bibliotheksabhängigkeiten zu installieren
Klicken Sie auf die Schaltfläche Alle installieren, um alle Bibliotheksabhängigkeiten zu installieren.

#include <DIYables_ESP32_Platform.h>
#include <DIYablesWebApps.h>
const char WIFI_SSID[] = "YOUR_WIFI_SSID";
const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";
ESP32ServerFactory serverFactory;
DIYablesWebAppServer webAppsServer(serverFactory, 80, 81);
DIYablesHomePage homePage;
DIYablesWebSliderPage webSliderPage;
int slider1Value = 64;
int slider2Value = 128;
void setup() {
Serial.begin(9600);
delay(1000);
Serial.println("DIYables ESP32 WebApp - Web Slider Example");
webAppsServer.addApp(&homePage);
webAppsServer.addApp(&webSliderPage);
webAppsServer.setNotFoundPage(DIYablesNotFoundPage());
if (!webAppsServer.begin(WIFI_SSID, WIFI_PASSWORD)) {
while (1) {
Serial.println("Failed to start WebApp server!");
delay(1000);
}
}
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
Serial.println("Slider 1: " + String(slider1) + ", Slider 2: " + String(slider2));
});
webSliderPage.onSliderValueToWeb([]() {
webSliderPage.sendToWebSlider(slider1Value, slider2Value);
Serial.println("Web client requested values - Sent: Slider1=" + String(slider1Value) + ", Slider2=" + String(slider2Value));
});
}
void loop() {
webAppsServer.loop();
delay(10);
}
const char WIFI_SSID[] = "YOUR_WIFI_NETWORK";
const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";
Klicken Sie in der Arduino IDE auf die Schaltfläche Hochladen, um den Code auf den ESP32 hochzuladen.
Öffnen Sie den seriellen Monitor.
Überprüfen Sie das Ergebnis im seriellen Monitor. Es sieht wie folgt aus.
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
==========================================
Wenn Sie nichts sehen, starten Sie das ESP32-Board neu.
Notieren Sie sich die angezeigte IP-Adresse und geben Sie diese Adresse in die Adresszeile eines Webbrowsers auf Ihrem Smartphone oder PC ein.
Beispiel: http://192.168.0.2
Sie sehen die Startseite wie im untenstehenden Bild:
Oder Sie können die Seite auch direkt über die IP-Adresse aufrufen, gefolgt von /web-slider. Zum Beispiel: http://192.168.0.2/web-slider
Versuchen Sie, die beiden Schieberegler zu bewegen, um analoge Werte (0-255) zu steuern, und beobachten Sie die Echtzeit-Rückmeldungen im Serial Monitor.
Anfangspositionen der Schieberegler festlegen:
int slider1Value = 64;
int slider2Value = 128;
Die Benutzeroberfläche des Schiebereglers bietet:
Schieberegler 1: Erster Schieberegler mit Wertanzeige (0-255)
Schieberegler 2: Zweiter Schieberegler mit Wertanzeige (0-255)
Wertanzeige: Numerische Werte beider Schieberegler in Echtzeit
Voreinstellungs-Schaltflächen: Schneller Zugriff auf gängige Werte (0%, 25%, 50%, 75%, 100%)
Klicken und Ziehen: Klicken Sie auf den Schiebereglergriff und ziehen Sie ihn, um den Wert anzupassen.
Klick-Position: Klicken Sie irgendwo auf der Schieberegler-Spur, um zu diesem Wert zu springen.
Feineinstellung: Verwenden Sie kleine Mausbewegungen für eine präzise Einstellung.
Berühren und Ziehen: Tippe den Schieberegler-Griff an und ziehe ihn in eine neue Position
Position tippen: Tippe auf den Bereich des Schiebereglers, um den Wert festzulegen
Glatte Bedienung: Fingerziehen sorgt für gleichmäßige Wertänderungen
Jeder Schieberegler bietet:
Mindestwert: 0 (0% - vollständig ausgeschaltet)
Maximalwert: 255 (100% - maximale Intensität)
Auflösung: 256 diskrete Schritte (8-Bit-Präzision)
PWM-Kompatibilität: Direkte Verwendung mit der Funktion analogWrite()
void setup() {
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
Serial.println("Slider 1: " + String(slider1) + ", Slider 2: " + String(slider2));
});
}
const int LED1_PIN = 9;
const int LED2_PIN = 10;
void setup() {
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
analogWrite(LED1_PIN, slider1Value);
analogWrite(LED2_PIN, slider2Value);
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
analogWrite(LED1_PIN, slider1);
analogWrite(LED2_PIN, slider2);
Serial.println("LED1 Brightness: " + String(slider1) +
", LED2 Brightness: " + String(slider2));
});
}
#include <Servo.h>
Servo servo1, servo2;
void setup() {
servo1.attach(9);
servo2.attach(10);
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;
int angle1 = map(slider1, 0, 255, 0, 180);
int angle2 = map(slider2, 0, 255, 0, 180);
servo1.write(angle1);
servo2.write(angle2);
Serial.println("Servo1: " + String(angle1) + "°, Servo2: " + String(angle2) + "°");
});
}
const int MOTOR1_PWM = 9;
const int MOTOR1_DIR1 = 2;
const int MOTOR1_DIR2 = 3;
const int MOTOR2_PWM = 10;
const int MOTOR2_DIR1 = 4;
const int MOTOR2_DIR2 = 5;
void setup() {
pinMode(MOTOR1_PWM, OUTPUT);
pinMode(MOTOR1_DIR1, OUTPUT);
pinMode(MOTOR1_DIR2, OUTPUT);
pinMode(MOTOR2_PWM, OUTPUT);
pinMode(MOTOR2_DIR1, OUTPUT);
pinMode(MOTOR2_DIR2, OUTPUT);
digitalWrite(MOTOR1_DIR1, HIGH);
digitalWrite(MOTOR1_DIR2, LOW);
digitalWrite(MOTOR2_DIR1, HIGH);
digitalWrite(MOTOR2_DIR2, LOW);
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
analogWrite(MOTOR1_PWM, slider1);
analogWrite(MOTOR2_PWM, slider2);
int speed1Percent = map(slider1, 0, 255, 0, 100);
int speed2Percent = map(slider2, 0, 255, 0, 100);
Serial.println("Motor1: " + String(speed1Percent) + "%, " +
"Motor2: " + String(speed2Percent) + "%");
});
}
const int RED_PIN = 9;
const int GREEN_PIN = 10;
const int BLUE_PIN = 11;
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
int redValue = slider1;
int blueValue = slider2;
int greenValue = (slider1 + slider2) / 2;
analogWrite(RED_PIN, redValue);
analogWrite(GREEN_PIN, greenValue);
analogWrite(BLUE_PIN, blueValue);
Serial.println("RGB - R:" + String(redValue) +
" G:" + String(greenValue) +
" B:" + String(blueValue));
});
}
class SliderSmoother {
private:
int currentValue = 0;
int targetValue = 0;
unsigned long lastUpdate = 0;
const int SMOOTH_RATE = 5;
public:
void setTarget(int target) {
targetValue = target;
}
int getCurrentValue() {
return currentValue;
}
bool update() {
if (millis() - lastUpdate > 10) {
bool changed = false;
if (currentValue < targetValue) {
currentValue = min(currentValue + SMOOTH_RATE, targetValue);
changed = true;
} else if (currentValue > targetValue) {
currentValue = max(currentValue - SMOOTH_RATE, targetValue);
changed = true;
}
lastUpdate = millis();
return changed;
}
return false;
}
};
SliderSmoother smoother1, smoother2;
void setup() {
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
smoother1.setTarget(slider1);
smoother2.setTarget(slider2);
});
}
void loop() {
server.loop();
bool changed1 = smoother1.update();
bool changed2 = smoother2.update();
if (changed1 || changed2) {
analogWrite(9, smoother1.getCurrentValue());
analogWrite(10, smoother2.getCurrentValue());
}
}
void setupThresholdControl() {
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
const int LOW_THRESHOLD = 85;
const int MEDIUM_THRESHOLD = 170;
if (slider1 < LOW_THRESHOLD) {
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
} else if (slider1 < MEDIUM_THRESHOLD) {
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
} else {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}
analogWrite(9, slider2);
});
}
const int PRESETS[][2] = {
{0, 0},
{64, 128},
{128, 128},
{255, 128},
{255, 255}
};
void applyPreset(int presetNumber) {
if (presetNumber >= 0 && presetNumber < 5) {
slider1Value = PRESETS[presetNumber][0];
slider2Value = PRESETS[presetNumber][1];
analogWrite(9, slider1Value);
analogWrite(10, slider2Value);
webSliderPage.sendToWebSlider(slider1Value, slider2Value);
Serial.println("Applied preset " + String(presetNumber) +
": " + String(slider1Value) + ", " + String(slider2Value));
}
}
void setupPresetSystem() {
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
analogWrite(9, slider1);
analogWrite(10, slider2);
});
}
void loop() {
server.loop();
static bool lastButton = false;
bool currentButton = digitalRead(7);
if (currentButton && !lastButton) {
static int currentPreset = 0;
applyPreset(currentPreset);
currentPreset = (currentPreset + 1) % 5;
}
lastButton = currentButton;
}
const int LED_STRIP_PIN = 6;
const int NUM_LEDS = 30;
void setupLEDStrip() {
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
uint8_t brightness = slider1;
uint8_t hue = slider2;
Serial.println("LED Strip - Brightness: " + String(brightness) +
", Hue: " + String(hue));
});
}
const int FAN1_PIN = 9;
const int FAN2_PIN = 10;
void setupFanControl() {
pinMode(FAN1_PIN, OUTPUT);
pinMode(FAN2_PIN, OUTPUT);
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
int fan1Speed = (slider1 > 50) ? map(slider1, 50, 255, 100, 255) : 0;
int fan2Speed = (slider2 > 50) ? map(slider2, 50, 255, 100, 255) : 0;
analogWrite(FAN1_PIN, fan1Speed);
analogWrite(FAN2_PIN, fan2Speed);
Serial.println("Fan1: " + String(map(fan1Speed, 0, 255, 0, 100)) + "%, " +
"Fan2: " + String(map(fan2Speed, 0, 255, 0, 100)) + "%");
});
}
const int VOLUME1_PIN = 9;
const int VOLUME2_PIN = 10;
void setupAudioControl() {
pinMode(VOLUME1_PIN, OUTPUT);
pinMode(VOLUME2_PIN, OUTPUT);
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
float volume1 = pow(slider1 / 255.0, 2) * 255;
float volume2 = pow(slider2 / 255.0, 2) * 255;
analogWrite(VOLUME1_PIN, (int)volume1);
analogWrite(VOLUME2_PIN, (int)volume2);
Serial.println("Volume1: " + String((int)volume1) +
", Volume2: " + String((int)volume2));
});
}
Schieberegler reagieren nicht
Überprüfe die WebSocket-Verbindung in der Browser-Konsole
Überprüfe die Netzwerkverbindung zwischen dem Gerät und dem Arduino
Lade die Browser-Seite neu, um die Verbindung zurückzusetzen
Überprüfe den seriellen Monitor auf Verbindungsfehler
2. Werte, die den vollen Bereich nicht erreichen
Überprüfen Sie die Einstellungen des Schiebereglers in der Weboberfläche
Überprüfen Sie Probleme bei der Wertezuordnung in der Callback-Funktion
Testen Sie mit verschiedenen Browsern oder Geräten
Ruckartige oder inkonsistente Steuerung
Wertglättung für allmähliche Änderungen implementieren
Netzwerklatenzprobleme überprüfen
Entprellung für schnelle Wertänderungen hinzufügen
4. PWM-Ausgang funktioniert nicht
Prüfen Sie, ob die Pins PWM unterstützen (ESP32-Pinbelegung prüfen)
Stellen Sie sicher, dass analogWrite() mit den richtigen Pin-Nummern aufgerufen wird
Überprüfen Sie die Hardwareverbindungen und Lastanforderungen
Umfassendes Debugging hinzufügen:
void debugSliderValues(int slider1, int slider2) {
Serial.println("=== Slider Debug ===");
Serial.println("Slider 1: " + String(slider1) + " (" + String(map(slider1, 0, 255, 0, 100)) + "%)");
Serial.println("Slider 2: " + String(slider2) + " (" + String(map(slider2, 0, 255, 0, 100)) + "%)");
Serial.println("PWM Pin 9: " + String(slider1));
Serial.println("PWM Pin 10: " + String(slider2));
Serial.println("===================");
}
Helligkeitssteuerung der Raumbeleuchtung
RGB-Farbmischschnittstelle
Geschwindigkeitsregelung der LED-Streifen-Animation
Helligkeitsregelung der Bühnenbeleuchtung
Lautstärkeregler-Oberfläche
Ton- und Equalizersteuerung
Soundeffektintensität
Musikvisualisierungssteuerung
Klimaregelung (Heiz-/Kühlintensität)
Jalousienpositionsregelung
Durchflussregelung des Bewässerungssystems
Helligkeit und Lautstärke von Smart-Geräten
Verwenden Sie Schieberegler für Geschwindigkeitsbegrenzungen und den Joystick für die Richtung:
int maxSpeed = 255;
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
maxSpeed = slider1;
});
webJoystickPage.onJoystickValueFromWeb([](int x, int y) {
int scaledX = map(x, -100, 100, -maxSpeed, maxSpeed);
int scaledY = map(y, -100, 100, -maxSpeed, maxSpeed);
controlRobot(scaledX, scaledY);
});
Verwenden Sie Schieberegler, um PWM zu steuern, und digitale Pins zum Ein- oder Ausschalten:
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
if (webDigitalPinsPage.getPinState(2)) {
analogWrite(9, slider1);
} else {
analogWrite(9, 0);
}
if (webDigitalPinsPage.getPinState(3)) {
analogWrite(10, slider2);
} else {
analogWrite(10, 0);
}
});
Nachdem Sie das WebSlider-Beispiel gemeistert haben, versuchen Sie Folgendes:
WebJoystick - Für die 2D-Richtungssteuerung
WebDigitalPins - Für eine diskrete Ein/Aus-Steuerung
WebMonitor - Zum Debuggen von Schiebereglerwerten
MultipleWebApps - Das Kombinieren von Schiebereglern mit anderen Steuerelementen