Das Bluetooth Slider-Beispiel bietet zwei unabhängige Slider-Steuerungen, die über die DIYables Bluetooth STEM App zugänglich sind. Entwickelt für ESP32-Boards mit Unterstützung für sowohl BLE (Bluetooth Low Energy) als auch Classic Bluetooth Verbindungen. Jeder Slider bietet Werte von 0-100, was sie perfekt für PWM-Steuerung, Helligkeitseinstellung, Motorgeschwindigkeitskontrolle und jede Anwendung macht, die analog-ähnliche Steuerwerte benötigt.
Dieses Beispiel unterstützt zwei Bluetooth-Modi:
ESP32 BLE (Bluetooth Low Energy): Funktioniert sowohl auf Android als auch iOS
ESP32 Classic Bluetooth: Funktioniert nur auf Android. iOS unterstützt kein Classic Bluetooth. Verwenden Sie BLE, wenn Sie iOS-Unterstützung benötigen.
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.
Folgen Sie diesen Anweisungen Schritt für Schritt:
Verbinden Sie das ESP32-Board über ein USB-Kabel mit Ihrem Computer.
Starten Sie die Arduino IDE auf Ihrem Computer.
Wählen Sie das entsprechende ESP32-Board und den COM-Port aus.
Navigieren Sie zum Bibliotheken-Symbol in der linken Leiste der Arduino IDE.
Suchen Sie "DIYables Bluetooth" und finden Sie die DIYables Bluetooth-Bibliothek von DIYables
Klicken Sie auf den Installieren-Button, um die Bibliothek zu installieren.
Sie werden gefragt, ob Sie weitere Bibliotheksabhängigkeiten installieren möchten
Klicken Sie auf Alle Installieren, um alle Bibliotheksabhängigkeiten zu installieren.
Wählen Sie einen der beiden Bluetooth-Modi unten je nach Ihren Anforderungen:
Hinweis: Classic Bluetooth wird NICHT auf iOS unterstützt. Falls Sie iOS-Unterstützung benötigen, verwenden Sie den BLE-Code unten.
#include <DIYables_BluetoothServer.h>
#include <DIYables_BluetoothSlider.h>
#include <platforms/DIYables_Esp32Bluetooth.h>
DIYables_Esp32Bluetooth bluetooth("ESP32_Slider");
DIYables_BluetoothServer bluetoothServer(bluetooth);
DIYables_BluetoothSlider bluetoothSlider(0, 100, 1);
int currentSlider1 = 0;
int currentSlider2 = 0;
const int PWM_PIN_1 = 16;
const int PWM_PIN_2 = 17;
const int PWM_CHANNEL_1 = 0;
const int PWM_CHANNEL_2 = 1;
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("DIYables Bluetooth - ESP32 Slider Example");
ledcSetup(PWM_CHANNEL_1, 5000, 8);
ledcSetup(PWM_CHANNEL_2, 5000, 8);
ledcAttachPin(PWM_PIN_1, PWM_CHANNEL_1);
ledcAttachPin(PWM_PIN_2, PWM_CHANNEL_2);
bluetoothServer.begin();
bluetoothServer.addApp(&bluetoothSlider);
bluetoothServer.setOnConnected([]() {
Serial.println("Bluetooth connected!");
bluetoothSlider.send(currentSlider1, currentSlider2);
});
bluetoothServer.setOnDisconnected([]() {
Serial.println("Bluetooth disconnected!");
});
bluetoothSlider.onSliderValue([](int slider1, int slider2) {
currentSlider1 = slider1;
currentSlider2 = slider2;
Serial.print("Slider 1: ");
Serial.print(slider1);
Serial.print(", Slider 2: ");
Serial.println(slider2);
int pwm1 = map(slider1, 0, 100, 0, 255);
int pwm2 = map(slider2, 0, 100, 0, 255);
ledcWrite(PWM_CHANNEL_1, pwm1);
ledcWrite(PWM_CHANNEL_2, pwm2);
});
bluetoothSlider.onGetConfig([]() {
bluetoothSlider.send(currentSlider1, currentSlider2);
Serial.print("App requested values - Sent: Slider1=");
Serial.print(currentSlider1);
Serial.print(", Slider2=");
Serial.println(currentSlider2);
});
Serial.println("Waiting for Bluetooth connection...");
}
void loop() {
bluetoothServer.loop();
delay(10);
}
Klicken Sie auf den Upload-Button in der Arduino IDE, um den Code auf den ESP32 hochzuladen
Öffnen Sie den Serial Monitor
Überprüfen Sie das Ergebnis im Serial Monitor. Es sieht folgendermaßen aus:
DIYables Bluetooth - ESP32 Slider Example
Waiting for Bluetooth connection...
#include <DIYables_BluetoothServer.h>
#include <DIYables_BluetoothSlider.h>
#include <platforms/DIYables_Esp32BLE.h>
const char* DEVICE_NAME = "ESP32BLE_Slider";
const char* SERVICE_UUID = "19B10000-E8F2-537E-4F6C-D104768A1214";
const char* TX_UUID = "19B10001-E8F2-537E-4F6C-D104768A1214";
const char* RX_UUID = "19B10002-E8F2-537E-4F6C-D104768A1214";
DIYables_Esp32BLE bluetooth(DEVICE_NAME, SERVICE_UUID, TX_UUID, RX_UUID);
DIYables_BluetoothServer bluetoothServer(bluetooth);
DIYables_BluetoothSlider bluetoothSlider(0, 100, 1);
int currentSlider1 = 0;
int currentSlider2 = 0;
const int PWM_PIN_1 = 16;
const int PWM_PIN_2 = 17;
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("DIYables Bluetooth - ESP32 BLE Slider Example");
pinMode(PWM_PIN_1, OUTPUT);
pinMode(PWM_PIN_2, OUTPUT);
bluetoothServer.begin();
bluetoothServer.addApp(&bluetoothSlider);
bluetoothServer.setOnConnected([]() {
Serial.println("Bluetooth connected!");
bluetoothSlider.send(currentSlider1, currentSlider2);
});
bluetoothServer.setOnDisconnected([]() {
Serial.println("Bluetooth disconnected!");
});
bluetoothSlider.onSliderValue([](int slider1, int slider2) {
currentSlider1 = slider1;
currentSlider2 = slider2;
Serial.print("Slider 1: ");
Serial.print(slider1);
Serial.print(", Slider 2: ");
Serial.println(slider2);
int pwm1 = map(slider1, 0, 100, 0, 255);
int pwm2 = map(slider2, 0, 100, 0, 255);
analogWrite(PWM_PIN_1, pwm1);
analogWrite(PWM_PIN_2, pwm2);
});
bluetoothSlider.onGetConfig([]() {
bluetoothSlider.send(currentSlider1, currentSlider2);
Serial.print("App requested values - Sent: Slider1=");
Serial.print(currentSlider1);
Serial.print(", Slider2=");
Serial.println(currentSlider2);
});
Serial.println("Waiting for Bluetooth connection...");
}
void loop() {
bluetoothServer.loop();
delay(10);
}
Klicken Sie auf den Upload-Button in der Arduino IDE, um den Code auf den ESP32 hochzuladen
Öffnen Sie den Serial Monitor
Überprüfen Sie das Ergebnis im Serial Monitor. Es sieht folgendermaßen aus:
DIYables Bluetooth - ESP32 BLE Slider Example
Waiting for Bluetooth connection...
Installieren Sie die DIYables Bluetooth App auf Ihrem Smartphone:
Android |
iOS
Falls Sie den ESP32 Classic Bluetooth Code verwenden, müssen Sie den ESP32 mit Ihrem Android-Telefon vor dem Öffnen der App koppeln:
Gehen Sie zu den Einstellungen > Bluetooth Ihres Telefons
Stellen Sie sicher, dass Bluetooth aktiviert ist
Ihr Telefon sucht nach verfügbaren Geräten
Finden und tippen Sie auf "ESP32_Slider" in der Liste verfügbarer Geräte
Bestätigen Sie die Kopplungsanfrage (keine PIN erforderlich)
Warten Sie, bis "Gekoppelt" unter dem Gerätenamen angezeigt wird
Falls Sie den ESP32 BLE Code verwenden, ist keine Kopplung erforderlich. Fahren Sie einfach mit dem nächsten Schritt fort.
Öffnen Sie die DIYables Bluetooth App
Beim ersten Öffnen der App werden Berechtigungen abgefragt. Gewähren Sie bitte folgende:
Geräte in der Nähe Berechtigung (Android 12+) / Bluetooth Berechtigung (iOS) - erforderlich zum Scannen und Verbinden mit Bluetooth-Geräten
Standort Berechtigung (nur Android 11 und älter) - erforderlich bei älteren Android-Versionen zum Scannen nach BLE-Geräten
Stellen Sie sicher, dass Bluetooth auf Ihrem Telefon aktiviert ist
Tippen Sie auf dem Startbildschirm auf die Verbinden-Schaltfläche. Die App sucht nach sowohl BLE- als auch Classic Bluetooth-Geräten.

Finden und tippen Sie auf Ihr Gerät in den Scan-Ergebnissen, um eine Verbindung herzustellen:
Sobald verbunden, kehrt die App automatisch zum Startbildschirm zurück. Wählen Sie die Slider App aus dem App-Menü.
Hinweis: Sie können das Einstellungen-Symbol auf dem Startbildschirm antippen, um Apps auf dem Startbildschirm ein-/auszublenden. Weitere Details finden Sie im DIYables Bluetooth App Benutzerhandbuch.
Schauen Sie nun zurück zum Serial Monitor in der Arduino IDE. Sie werden sehen:
Bluetooth connected!
Slider 1: 50, Slider 2: 30
Slider 1: 75, Slider 2: 30
Slider 1: 75, Slider 2: 60
Slider 1: 100, Slider 2: 85
Konfigurieren Sie anfängliche Slider-Positionen:
int currentSlider1 = 25;
int currentSlider2 = 50;
DIYables_BluetoothSlider bluetoothSlider(0, 255, 5);
bluetoothSlider.setRange(0, 255);
bluetoothSlider.setStep(5);
int currentMin = bluetoothSlider.getMin();
int currentMax = bluetoothSlider.getMax();
int currentStep = bluetoothSlider.getStep();
Wenn die App sich verbindet und den Slider-Bildschirm öffnet, fordert sie die Slider-Konfiguration vom ESP32 an. Sie können den onGetConfig()-Callback verwenden, um die aktuellen Slider-Werte zu diesem Zeitpunkt an die App zu senden:
bluetoothSlider.onGetConfig([]() {
bluetoothSlider.send(currentSlider1, currentSlider2);
Serial.println("App requested config - sent current values");
});
Sie können Slider-Werte vom ESP32 an die App senden (z.B. um die Slider-Positionen der App zu aktualisieren):
bluetoothSlider.send(currentSlider1, currentSlider2);
bluetoothSlider.send(50);
Sie können erkennen, wann sich die App mit dem ESP32 verbindet oder trennt:
bluetoothServer.setOnConnected([]() {
Serial.println("Bluetooth connected!");
bluetoothSlider.send(currentSlider1, currentSlider2);
});
bluetoothServer.setOnDisconnected([]() {
Serial.println("Bluetooth disconnected!");
});
if (bluetoothServer.isConnected()) {
}
Das Slider-Interface in der DIYables Bluetooth App bietet:
Slider 1: Erste Steuer-Slider mit Wertanzeige
Slider 2: Zweite Steuer-Slider mit Wertanzeige
Wertanzeige: Echtzeit-Zahlenwerte für beide Slider
Jeder Slider bietet:
Standard-Bereich: 0 bis 100
Konfigurierbar: Bereich und Schritt können im Code angepasst werden
PWM-Zuordnung: Einfache Zuordnung zu 0-255 für analogWrite()
void setup() {
bluetoothSlider.onSliderValue([](int slider1, int slider2) {
currentSlider1 = slider1;
currentSlider2 = slider2;
Serial.println("Slider 1: " + String(slider1) + ", Slider 2: " + String(slider2));
});
}
const int PWM_PIN_1 = 16;
const int PWM_PIN_2 = 17;
void setup() {
pinMode(PWM_PIN_1, OUTPUT);
pinMode(PWM_PIN_2, OUTPUT);
bluetoothSlider.onSliderValue([](int slider1, int slider2) {
currentSlider1 = slider1;
currentSlider2 = slider2;
int pwm1 = map(slider1, 0, 100, 0, 255);
int pwm2 = map(slider2, 0, 100, 0, 255);
analogWrite(PWM_PIN_1, pwm1);
analogWrite(PWM_PIN_2, pwm2);
Serial.println("LED1 Helligkeit: " + String(pwm1) +
", LED2 Helligkeit: " + String(pwm2));
});
}
const int PWM_PIN_1 = 16;
const int PWM_PIN_2 = 17;
const int PWM_CHANNEL_1 = 0;
const int PWM_CHANNEL_2 = 1;
void setup() {
ledcSetup(PWM_CHANNEL_1, 5000, 8);
ledcSetup(PWM_CHANNEL_2, 5000, 8);
ledcAttachPin(PWM_PIN_1, PWM_CHANNEL_1);
ledcAttachPin(PWM_PIN_2, PWM_CHANNEL_2);
bluetoothSlider.onSliderValue([](int slider1, int slider2) {
currentSlider1 = slider1;
currentSlider2 = slider2;
int pwm1 = map(slider1, 0, 100, 0, 255);
int pwm2 = map(slider2, 0, 100, 0, 255);
ledcWrite(PWM_CHANNEL_1, pwm1);
ledcWrite(PWM_CHANNEL_2, pwm2);
Serial.println("LED1 Helligkeit: " + String(pwm1) +
", LED2 Helligkeit: " + String(pwm2));
});
}
#include <ESP32Servo.h>
Servo servo1, servo2;
void setup() {
servo1.attach(16);
servo2.attach(17);
bluetoothSlider.onSliderValue([](int slider1, int slider2) {
currentSlider1 = slider1;
currentSlider2 = slider2;
int angle1 = map(slider1, 0, 100, 0, 180);
int angle2 = map(slider2, 0, 100, 0, 180);
servo1.write(angle1);
servo2.write(angle2);
Serial.println("Servo1: " + String(angle1) + "°, Servo2: " + String(angle2) + "°");
});
}
const int MOTOR1_PWM = 16;
const int MOTOR1_DIR1 = 18;
const int MOTOR1_DIR2 = 19;
const int MOTOR2_PWM = 17;
const int MOTOR2_DIR1 = 21;
const int MOTOR2_DIR2 = 22;
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);
bluetoothSlider.onSliderValue([](int slider1, int slider2) {
currentSlider1 = slider1;
currentSlider2 = slider2;
int pwm1 = map(slider1, 0, 100, 0, 255);
int pwm2 = map(slider2, 0, 100, 0, 255);
analogWrite(MOTOR1_PWM, pwm1);
analogWrite(MOTOR2_PWM, pwm2);
Serial.println("Motor1: " + String(slider1) + "%, " +
"Motor2: " + String(slider2) + "%");
});
}
const int RED_PIN = 16;
const int GREEN_PIN = 17;
const int BLUE_PIN = 18;
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
bluetoothSlider.onSliderValue([](int slider1, int slider2) {
currentSlider1 = slider1;
currentSlider2 = slider2;
int redValue = map(slider1, 0, 100, 0, 255);
int blueValue = map(slider2, 0, 100, 0, 255);
int greenValue = (redValue + blueValue) / 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 = 2;
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() {
bluetoothSlider.onSliderValue([](int slider1, int slider2) {
smoother1.setTarget(slider1);
smoother2.setTarget(slider2);
});
}
void loop() {
bluetoothServer.loop();
bool changed1 = smoother1.update();
bool changed2 = smoother2.update();
if (changed1 || changed2) {
analogWrite(16, map(smoother1.getCurrentValue(), 0, 100, 0, 255));
analogWrite(17, map(smoother2.getCurrentValue(), 0, 100, 0, 255));
}
}
void setupThresholdControl() {
bluetoothSlider.onSliderValue([](int slider1, int slider2) {
currentSlider1 = slider1;
currentSlider2 = slider2;
const int LOW_THRESHOLD = 33;
const int MEDIUM_THRESHOLD = 66;
if (slider1 < LOW_THRESHOLD) {
digitalWrite(18, LOW);
digitalWrite(19, LOW);
digitalWrite(21, LOW);
} else if (slider1 < MEDIUM_THRESHOLD) {
digitalWrite(18, HIGH);
digitalWrite(19, LOW);
digitalWrite(21, LOW);
} else {
digitalWrite(18, HIGH);
digitalWrite(19, HIGH);
digitalWrite(21, HIGH);
}
analogWrite(16, map(slider2, 0, 100, 0, 255));
});
}
const int PRESETS[][2] = {
{0, 0},
{25, 50},
{50, 50},
{100, 50},
{100, 100}
};
void applyPreset(int presetNumber) {
if (presetNumber >= 0 && presetNumber < 5) {
currentSlider1 = PRESETS[presetNumber][0];
currentSlider2 = PRESETS[presetNumber][1];
analogWrite(16, map(currentSlider1, 0, 100, 0, 255));
analogWrite(17, map(currentSlider2, 0, 100, 0, 255));
bluetoothSlider.send(currentSlider1, currentSlider2);
Serial.println("Voreinstellung " + String(presetNumber) + " angewandt" +
": " + String(currentSlider1) + ", " + String(currentSlider2));
}
}
const int LED_STRIP_PIN = 16;
const int NUM_LEDS = 30;
void setupLEDStrip() {
bluetoothSlider.onSliderValue([](int slider1, int slider2) {
currentSlider1 = slider1;
currentSlider2 = slider2;
uint8_t brightness = map(slider1, 0, 100, 0, 255);
uint8_t hue = map(slider2, 0, 100, 0, 255);
Serial.println("LED Strip - Helligkeit: " + String(brightness) +
", Farbton: " + String(hue));
});
}