ESP32 Bluetooth Rotator Voorbeeld - Bedieningsinterface voor draaibare schijf/knop

Overzicht

Het Bluetooth Rotator voorbeeld biedt een draaibare schijf/knopbediening die toegankelijk is via de DIYables Bluetooth STEM-app. Ontworpen voor ESP32-boards met ondersteuning voor zowel BLE (Bluetooth Low Energy) als Classic Bluetooth verbindingen. De rotator stuurt hoekwaarden en ondersteunt continue (0-360°) of beperkte hoekbereik-modi — perfect voor servo-besturing, kompasweergave, volumeknoppen en elke applicatie die rotatie-invoer vereist.

Dit voorbeeld ondersteunt twee Bluetooth-modi:

  • ESP32 BLE (Bluetooth Low Energy): Werkt op zowel Android als iOS
  • ESP32 Classic Bluetooth: Werkt alleen op Android. iOS ondersteunt geen Classic Bluetooth. Gebruik BLE als u iOS-ondersteuning nodig hebt.
ESP32 Bluetooth Rotator Voorbeeld - Bedieningsinterface voor draaibare schijf/knop

Kenmerken

  • Draaibare Knop: Tik en sleep om de schijf op het scherm te draaien
  • Continue Modus: Volledige 360° rotatie zonder limieten
  • Beperkte Modus: Beperkt hoekbereik (bijv. 0-180° voor servo’s)
  • Hoekuitgang: Realtime zwevend-kommagetal van hoekwaarde
  • Servo-compatibel: Directe mapping naar servohoeken (0-180°)
  • BLE & Classic Bluetooth: Kies de Bluetooth-modus die past bij uw project
  • Cross-platform: BLE werkt op Android en iOS; Classic Bluetooth werkt op Android
  • Laag verbruik: BLE verbruikt minder stroom dan Classic Bluetooth

Benodigde hardware

1×ESP32 ESP-WROOM-32 Ontwikkelingsmodule
1×USB-kabel Type-C
1×Breadboard (experimenteerprint)
1×Jumperdraden
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor ESP32
1×(Aanbevolen) Breakout Expansion Board for ESP32
1×(Aanbevolen) Stromsplitter voor ESP32

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

ESP32 Code

Snelle stappen

Volg deze instructies stap voor stap:

  • Als dit uw eerste keer is met de ESP32, raadpleeg dan de tutorial over het opzetten van de omgeving voor ESP32 in de Arduino IDE.
  • Verbind het ESP32-board met uw computer via een USB-kabel.
  • Start de Arduino IDE op uw computer.
  • Selecteer het juiste ESP32-board en COM-poort.
  • Ga naar het Bibliotheken-icoon in de linkerzijbalk van de Arduino IDE.
  • Zoek op "DIYables Bluetooth" en vind de DIYables Bluetooth bibliotheek van DIYables
  • Klik op de knop Installeren om de bibliotheek te installeren.
ESP32 DIYables Bluetooth bibliotheek
  • Er wordt gevraagd om extra afhankelijkheden te installeren
  • Klik op de knop Alles installeren om alle benodigde bibliotheken te installeren.
ESP32 DIYables Bluetooth afhankelijkheden

Kies een van de twee Bluetooth-modi hieronder afhankelijk van uw behoeften:

ESP32 Classic Bluetooth-code (werkt alleen met app op Android)

Opmerking: Classic Bluetooth wordt NIET ondersteund op iOS. Gebruik de BLE-code hieronder als u iOS-ondersteuning nodig hebt.

  • Open in Arduino IDE Bestand Voorbeelden DIYables Bluetooth Esp32Bluetooth_Rotator, of kopieer de bovenstaande code en plak deze in de editor van de Arduino IDE
/* * DIYables Bluetooth Library - ESP32 Classic Bluetooth Rotator Example * Works with DIYables Bluetooth STEM app on Android * Note: Classic Bluetooth is NOT supported on iOS. Use BLE examples for iOS support. * * This example demonstrates the Bluetooth Rotator feature: * - Rotatable disc/knob control (0-360 degrees) * - Continuous or limited angle range * - Perfect for servo control, compass display, volume knobs * * Compatible Boards: * - ESP32 (all variants with Classic Bluetooth) * - ESP32-WROOM-32 * - ESP32-DevKitC * - ESP32-WROVER * * Note: Select "Huge APP (3MB No OTA/1MB SPIFFS)" partition scheme * in Arduino IDE: Tools > Partition Scheme * * Optional: Servo motor for visual feedback * * Setup: * 1. Upload the sketch to your ESP32 * 2. Open Serial Monitor (115200 baud) to see connection status * 3. Use DIYables Bluetooth App to connect and rotate the knob * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */ #include <DIYables_BluetoothServer.h> #include <DIYables_BluetoothRotator.h> #include <platforms/DIYables_Esp32Bluetooth.h> // Create Bluetooth instances DIYables_Esp32Bluetooth bluetooth("ESP32_Rotator"); DIYables_BluetoothServer bluetoothServer(bluetooth); // Create Rotator app instance // Option 1: Continuous mode (0-360, wraps around) // DIYables_BluetoothRotator bluetoothRotator(ROTATOR_MODE_CONTINUOUS); // Option 2: Limited mode (constrained angle range) DIYables_BluetoothRotator bluetoothRotator(ROTATOR_MODE_LIMITED, 0, 180); // Variables to store current angle float currentAngle = 0.0; // Optional: Servo control (uncomment if using ESP32Servo library) // #include <ESP32Servo.h> // Servo myServo; // const int SERVO_PIN = 13; void setup() { Serial.begin(115200); delay(1000); Serial.println("DIYables Bluetooth - ESP32 Rotator Example"); // Optional: Initialize servo // myServo.attach(SERVO_PIN); // myServo.write(0); bluetoothServer.begin(); bluetoothServer.addApp(&bluetoothRotator); bluetoothServer.setOnConnected([]() { Serial.println("Bluetooth connected!"); bluetoothRotator.send(currentAngle); }); bluetoothServer.setOnDisconnected([]() { Serial.println("Bluetooth disconnected!"); }); bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; Serial.print("Rotator angle: "); Serial.print(angle); Serial.println("°"); // TODO: Add your control logic here based on angle // Examples: // - Servo control: myServo.write((int)angle); // - Stepper motor: stepper.moveTo(angleToSteps(angle)); // - LED ring: setLEDPosition(angle); // - Volume control: setVolume(map(angle, 0, 360, 0, 100)); }); Serial.println("Waiting for Bluetooth connection..."); } void loop() { bluetoothServer.loop(); delay(10); }
  • Klik op de knop Uploaden in de Arduino IDE om de code naar de ESP32 te uploaden
  • Open de Seriële Monitor
  • Bekijk het resultaat in de Seriële Monitor. Het ziet er als volgt uit:
COM6
Send
DIYables Bluetooth - ESP32 Rotator Voorbeeld Wachten op Bluetooth-verbinding...
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

ESP32 BLE-code (werkt met app op Android en iOS)

  • Open in Arduino IDE Bestand Voorbeelden DIYables Bluetooth Esp32BLE_Rotator, of kopieer de bovenstaande code en plak deze in de editor van de Arduino IDE
/* * DIYables Bluetooth Library - ESP32 BLE Rotator Example * Works with DIYables Bluetooth STEM app on Android and iOS * * This example demonstrates the Bluetooth Rotator feature: * - Rotatable disc/knob control (0-360 degrees) * - Continuous or limited angle range * - Perfect for servo control, compass display, volume knobs * * Compatible Boards: * - ESP32-WROOM-32 * - ESP32-DevKitC * - ESP32-WROVER * - ESP32-S3 * - ESP32-C3 * - Any ESP32 board supporting BLE * * Note: Select "Huge APP (3MB No OTA/1MB SPIFFS)" partition scheme * in Arduino IDE: Tools > Partition Scheme * * Optional: Servo motor for visual feedback * * Setup: * 1. Upload the sketch to your ESP32 * 2. Open Serial Monitor (115200 baud) to see connection status * 3. Use DIYables Bluetooth App to connect and rotate the knob * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */ #include <DIYables_BluetoothServer.h> #include <DIYables_BluetoothRotator.h> #include <platforms/DIYables_Esp32BLE.h> // BLE Configuration const char* DEVICE_NAME = "ESP32BLE_Rotator"; 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"; // Create Bluetooth instances DIYables_Esp32BLE bluetooth(DEVICE_NAME, SERVICE_UUID, TX_UUID, RX_UUID); DIYables_BluetoothServer bluetoothServer(bluetooth); // Create Rotator app instance DIYables_BluetoothRotator bluetoothRotator(ROTATOR_MODE_LIMITED, 0, 180); // Variables to store current angle float currentAngle = 0.0; void setup() { Serial.begin(115200); delay(1000); Serial.println("DIYables Bluetooth - ESP32 BLE Rotator Example"); bluetoothServer.begin(); bluetoothServer.addApp(&bluetoothRotator); bluetoothServer.setOnConnected([]() { Serial.println("Bluetooth connected!"); bluetoothRotator.send(currentAngle); }); bluetoothServer.setOnDisconnected([]() { Serial.println("Bluetooth disconnected!"); }); bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; Serial.print("Rotator angle: "); Serial.print(angle); Serial.println("°"); // TODO: Add your control logic here based on angle }); Serial.println("Waiting for Bluetooth connection..."); } void loop() { bluetoothServer.loop(); delay(10); }
  • Klik op de knop Uploaden in de Arduino IDE om de code naar de ESP32 te uploaden
  • Open de Seriële Monitor
  • Bekijk het resultaat in de Seriële Monitor. Het ziet er als volgt uit:
COM6
Send
DIYables Bluetooth - ESP32 BLE Rotator Voorbeeld Wachten op Bluetooth-verbinding...
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Mobiele app

  • Installeer de DIYables Bluetooth App op uw smartphone: Android | iOS
  • Als u de ESP32 Classic Bluetooth-code gebruikt, moet u de ESP32 eerst koppelen met uw Android-telefoon voordat u de app opent:
    • Ga naar de Instellingen > Bluetooth van uw telefoon
    • Zorg dat Bluetooth aan staat
    • Uw telefoon zoekt naar beschikbare apparaten
    • Zoek en tik op "ESP32_Rotator" in de lijst met apparaten
    • Bevestig het koppelverzoek (geen pincode vereist)
    • Wacht tot er "Gekoppeld" onder de apparaatnaam verschijnt
  • Als u de ESP32 BLE-code gebruikt, is koppelen niet nodig. Ga simpelweg door naar de volgende stap.
  • Open de DIYables Bluetooth App
  • Bij het eerste gebruik vraagt de app om permissies. verleen alstublieft de volgende:
    • Nearby Devices permissie (Android 12+) / Bluetooth permissie (iOS) - nodig om te scannen en verbinden met Bluetooth-apparaten
    • Locatie permissie (Android 11 en ouder) - nodig voor oudere Android-versies om te kunnen scannen naar BLE-apparaten
  • Controleer of Bluetooth is ingeschakeld op uw telefoon
  • Tik op het startscherm op de knop Verbind. De app zal zoeken naar BLE en Classic Bluetooth-apparaten.
DIYables Bluetooth App - Startscherm met Zoeken-knop
  • Zoek uw apparaat in de lijst en tik om verbinding te maken:
    • Voor Classic Bluetooth: tik op "ESP32_Rotator"
    • Voor BLE: tik op "ESP32BLE_Rotator"
  • Zodra de verbinding is gemaakt, keert de app automatisch terug naar het startscherm. Selecteer de Rotator app in het app-menu.
DIYables Bluetooth App - Startscherm met Rotator App

Opmerking: U kunt op het instellingen-icoon op het startscherm tikken om apps te verbergen/weergeven. Zie voor meer details de DIYables Bluetooth App Gebruikershandleiding.

  • Sleep de rotatorknop om de hoek te wijzigen
DIYables Bluetooth App - Rotator scherm

Kijk nu terug naar de Seriële Monitor in Arduino IDE. U ziet:

COM6
Send
Bluetooth connected! Rotator angle: 45.0° Rotator angle: 90.0° Rotator angle: 135.0° Rotator angle: 180.0°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Draai de knop in de app en kijk naar de realtime hoekwaarden in de Seriële Monitor

Creatieve aanpassing - Pas de code aan voor uw project

Rotatormodus configureren

Stel continue of beperkte modus in:

// Optie 1: Continue modus (0-360°, rondt door) DIYables_BluetoothRotator bluetoothRotator(ROTATOR_MODE_CONTINUOUS); // Optie 2: Beperkte modus (beperkt hoekbereik) DIYables_BluetoothRotator bluetoothRotator(ROTATOR_MODE_LIMITED, 0, 180); // Wijzig modus tijdens runtime: bluetoothRotator.setRotatorMode(ROTATOR_MODE_LIMITED, 0, 270); // Huidige configuratie uitlezen: int mode = bluetoothRotator.getRotatorMode(); float minAngle = bluetoothRotator.getMinAngle(); float maxAngle = bluetoothRotator.getMaxAngle();

Hoekwijzigingen afhandelen

Gebruik de callback onRotatorAngle() om hoekwaarden te ontvangen:

bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; Serial.print("Rotator angle: "); Serial.print(angle); Serial.println("°"); // TODO: Voeg hier uw besturingslogica toe });

Configuratieverzoek vanuit app afhandelen

bluetoothRotator.onGetConfig([]() { // Stuur huidige hoek naar app bluetoothRotator.send(currentAngle); Serial.println("App requested config - sent current angle"); });

Hoek naar app verzenden

U kunt de rotatorpositie vanuit de ESP32 bijwerken:

// Stuur hoekwaarde om de weergave in de app te updaten bluetoothRotator.send(90.0); // Zet rotator op 90° // Stuur tekstbericht bluetoothRotator.send("Calibrated");

Verbindingsgebeurtenissen afhandelen

bluetoothServer.setOnConnected([]() { Serial.println("Bluetooth connected!"); bluetoothRotator.send(currentAngle); // Stuur huidige positie }); bluetoothServer.setOnDisconnected([]() { Serial.println("Bluetooth disconnected!"); });

Hoe gebruikt u de rotator

App-interface bedieningselementen

De rotator-interface in de DIYables Bluetooth App biedt:

  • Draaibare schijf: Tik en sleep om te draaien
  • Hoekweergave: Toont actuele hoekwaarde
  • Visuele indicatie: Markeert de huidige draaipositie

Rotatormodi

  • ROTATOR_MODE_CONTINUOUS (0): Volledige 360° rotatie, met doorloop
  • ROTATOR_MODE_LIMITED (1): Beperkt tot minimum en maximum hoek

Programmeervoorbeelden

Servo-besturing

#include <ESP32Servo.h> Servo myServo; const int SERVO_PIN = 13; void setup() { myServo.attach(SERVO_PIN); myServo.write(0); // Beperkte modus: 0-180° komt overeen met servo-bereik // bluetoothRotator is al geconfigureerd als (ROTATOR_MODE_LIMITED, 0, 180) bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; myServo.write((int)angle); Serial.print("Servo: "); Serial.print((int)angle); Serial.println("°"); }); }

Volume-/helderheidsknop

const int PWM_PIN = 16; void setup() { pinMode(PWM_PIN, OUTPUT); // Continue modus: 0-360° wordt gemapt naar 0-255 bluetoothRotator.setRotatorMode(ROTATOR_MODE_CONTINUOUS); bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; int pwmValue = map((int)angle, 0, 360, 0, 255); analogWrite(PWM_PIN, pwmValue); int percentage = map((int)angle, 0, 360, 0, 100); Serial.print("Volume: "); Serial.print(percentage); Serial.println("%"); }); }

Kompasweergave

// Lees kompasrichting van sensor en toon op rotator float getCompassHeading() { // TODO: Lees van HMC5883L, QMC5883L of BMM150 // Retourneer richting in graden 0-360 return 0.0; } void loop() { bluetoothServer.loop(); static unsigned long lastUpdate = 0; if (millis() - lastUpdate >= 500) { lastUpdate = millis(); float heading = getCompassHeading(); bluetoothRotator.send(heading); // Werk rotatorweergave bij } delay(10); }

Stappenmotorbesturing

#include <AccelStepper.h> AccelStepper stepper(AccelStepper::DRIVER, 16, 17); const int STEPS_PER_REV = 200; void setup() { stepper.setMaxSpeed(1000); stepper.setAcceleration(500); bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; // Converteer hoek naar stappenmotorpositie long targetSteps = (long)(angle / 360.0 * STEPS_PER_REV); stepper.moveTo(targetSteps); Serial.print("Stepper target: "); Serial.print(targetSteps); Serial.println(" steps"); }); } void loop() { bluetoothServer.loop(); stepper.run(); delay(1); }

Geavanceerde programmeertechnieken

Hoek vastklikken op increments

bluetoothRotator.onRotatorAngle([](float angle) { // Vastklikken op dichtstbijzijnde 15°-sprong float snapped = round(angle / 15.0) * 15.0; currentAngle = snapped; Serial.print("Snapped angle: "); Serial.print(snapped, 0); Serial.println("°"); // Update app met vastgeklikte waarde bluetoothRotator.send(snapped); });

Zonegebaseerde besturing

bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; // Verdeel 360° in zones if (angle < 90) { Serial.println("Zone: NOORD"); setColor(0, 0, 255); // Blauw } else if (angle < 180) { Serial.println("Zone: OOST"); setColor(0, 255, 0); // Groen } else if (angle < 270) { Serial.println("Zone: ZUID"); setColor(255, 0, 0); // Rood } else { Serial.println("Zone: WEST"); setColor(255, 255, 0); // Geel } });

BLE vs Classic Bluetooth - Welke kiezen?

FeatureBLE (Esp32BLE_Rotator)Classic Bluetooth (Esp32Bluetooth_Rotator)
iOS Ondersteuning? Ja? Nee
Android Ondersteuning? Ja? Ja
StroomverbruikLaagHoger
Bereik~30-100m~10-100m
DatasnelheidLagerHoger
Koppeling NodigNee (automatisch)Ja (handmatig)
Geschikt voorBatterij-gestuurd, cross-platformHoog datadoorvoer, alleen Android

Problemen oplossen

Veelvoorkomende problemen

1. Kan het apparaat niet vinden in de app

  • Controleer of de ESP32 is ingeschakeld en de sketch is geüpload
  • Voor BLE: Zorg dat Bluetooth en Locatie zijn ingeschakeld op uw telefoon
  • Voor Classic Bluetooth: Koppel het apparaat eerst via de Bluetooth-instellingen van uw telefoon
  • Controleer of het juiste partitietype is geselecteerd (Huge APP)

2. Rotator reageert niet

  • Controleer bluetoothverbinding in de app
  • Verifieer verbinding in Seriële Monitor
  • Probeer opnieuw verbinden

3. Hoekwaarden lijken onjuist

  • Controleer rotatormodusconfiguratie (continuous vs limited)
  • Controleer minimale/maximale hoekinstellingen met getMinAngle() en getMaxAngle()
  • Bekijk in Seriële Monitor welke hoekwaarden binnenkomen

4. Servo hapert bij bepaalde hoeken

  • Voeg een kleine dode-zonefilter toe om hoekfluctuaties te verminderen
  • Gebruik een aparte voeding voor de servo
  • Plaats een condensator over servo-voedingspinnen

5. Verbinding valt vaak weg

  • Kom dichterbij de ESP32 (verminder afstand)
  • Voor BLE: Controleer op storing door andere BLE-apparaten
  • Voor Classic Bluetooth: Zorg voor stabiele voeding aan de ESP32

6. Sketch te groot / onvoldoende ruimte

  • Ga in Arduino IDE naar Hulpmiddelen > Partition Scheme en kies "Huge APP (3MB No OTA/1MB SPIFFS)" of "No OTA (Large APP)"
  • Standaard partitietype biedt ~1,2MB voor app-code, niet genoeg voor Bluetooth-bibliotheken
  • Deze instelling geeft ~3MB door de OTA-partitie op te geven

Debugtips

Voeg uitgebreide debugging toe:

void debugRotatorValue(float angle) { Serial.println("=== Rotator Debug ==="); Serial.println("Angle: " + String(angle, 1) + "°"); Serial.println("Mode: " + String(bluetoothRotator.getRotatorMode() == ROTATOR_MODE_CONTINUOUS ? "Continuous" : "Limited")); Serial.println("Bereik: " + String(bluetoothRotator.getMinAngle(), 0) + "° - " + String(bluetoothRotator.getMaxAngle(), 0) + "°"); Serial.println("====================="); }

Projectideeën

Motorbesturing

  • Servo positieknop
  • Hoekselector voor stappenmotor
  • Snelheidsregelknop motor
  • Gewrichtsbesturing robotarm

Display-projecten

  • Kompasrichting weergave
  • Analoog klokwijzers
  • Windrichtingsindicator
  • Simulator draaigauge

Audio-projecten

  • Volumeregelknop
  • Toonfrequentie-selector
  • Equalizer bandbesturing
  • Radiotunerknop

Verlichtingsprojecten

  • Positiebediening LED-ring
  • Kleurenschijf (kleurselector)
  • Richtingsbediening spotlights
  • Bewegingshoek podiumverlichting

Integratie met andere Bluetooth-apps

Combineren met Bluetooth Slider

Gebruik rotator voor hoek en slider voor snelheid/intensiteit:

float speed = 50; bluetoothSlider.onSliderValue([](int slider1, int slider2) { speed = slider1; }); bluetoothRotator.onRotatorAngle([](float angle) { // Combineer hoek (richting) met snelheid (intensiteit) float radians = angle * PI / 180.0; float x = speed * cos(radians); float y = speed * sin(radians); controlMotors(x, y); });

Combineren met Bluetooth Table

Toon rotator-data in een gestructureerde tabel:

bluetoothRotator.onRotatorAngle([](float angle) { bluetoothTable.sendValueUpdate("Angle", String(angle, 1) + "°"); bluetoothTable.sendValueUpdate("Quadrant", String((int)(angle / 90) + 1)); bluetoothTable.sendValueUpdate("Radians", String(angle * PI / 180.0, 3)); });

Volgende stappen

Na het beheersen van het Bluetooth Rotator voorbeeld, probeer dan:

  1. Bluetooth Joystick - Voor 2D richtingsbesturing
  2. Bluetooth Slider - Voor lineaire waardebesturing
  3. Bluetooth Analog Gauge - Voor wijzertype feedbackweergave
  4. Meerdere Bluetooth Apps - Combineren van rotator met andere bedieningselementen

Ondersteuning

Voor extra hulp:

  • Raadpleeg de API-referentiedocumentatie
  • Arduino community forums

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!