DIYables ESP32 Web Apps Web Slider - Cara Membuat Web Slider untuk Mengontrol Nilai Analog ESP32 Secara Real-Time

DIYables ESP32 Web Apps Web Slider merupakan salah satu contoh aplikasi web yang disediakan oleh library DIYables ESP32 Web Apps untuk memudahkan pengendalian nilai analog melalui browser. Dengan antarmuka berbasis web ini, pengguna dapat mengatur dua buah slider secara independen sehingga sangat cocok digunakan pada berbagai aplikasi kendali, seperti mengatur tingkat kecerahan LED, kecepatan motor DC, posisi servo, maupun parameter analog lainnya. Setiap perubahan posisi slider akan langsung dikirimkan ke papan ESP32 menggunakan komunikasi WebSocket, sehingga respons yang dihasilkan berlangsung secara real-time tanpa perlu melakukan refresh halaman web. Hal ini membuat proses pengendalian menjadi jauh lebih cepat dibandingkan menggunakan metode HTTP Request biasa.

 

Selain itu, nilai yang dihasilkan oleh masing-masing slider berada pada rentang 0 hingga 255, sehingga langsung sesuai dengan resolusi PWM 8-bit yang umum digunakan pada berbagai aplikasi ESP32. Dengan demikian, nilai slider dapat langsung digunakan sebagai parameter pada fungsi pengendalian output PWM tanpa perlu melakukan konversi tambahan. Pada tutorial ini, Anda akan mempelajari cara menjalankan contoh Web Slider, mengakses antarmuka web melalui browser, serta memahami berbagai penerapan slider pada proyek berbasis ESP32.

Fitur DIYables ESP32 Web Apps Web Slider

Library DIYables ESP32 Web Apps menyediakan berbagai fitur yang memudahkan proses pengembangan antarmuka web interaktif. Berikut beberapa fitur utama yang dimiliki oleh contoh Web Slider.

1. Dua Slider Independen

Web Slider menyediakan dua buah slider yang dapat dikontrol secara terpisah. Masing-masing slider memiliki nilai tersendiri sehingga pengguna dapat mengatur dua parameter secara bersamaan, misalnya:

- Mengatur tingkat kecerahan LED pertama dan LED kedua.

- Mengontrol kecepatan dua motor DC secara independen.

- Mengatur posisi dua buah servo.

- Mengontrol dua parameter analog pada sistem otomatisasi.

2. Sinkronisasi Data Secara Real-Time

Setiap perubahan posisi slider akan langsung dikirim ke ESP32 melalui protokol WebSocket. Teknologi ini memungkinkan komunikasi dua arah (bidirectional communication) sehingga perubahan nilai dapat diterima hampir tanpa jeda (latency) dan tidak memerlukan proses refresh halaman.

3. Siap Digunakan untuk PWM

Nilai keluaran slider berada pada rentang 0–255, sesuai dengan resolusi PWM 8-bit. Nilai tersebut dapat langsung digunakan untuk:

- Mengatur duty cycle PWM.

- Mengontrol intensitas cahaya LED.

- Mengatur kecepatan motor.

- Mengontrol output analog virtual lainnya.

4. Menampilkan Nilai Secara Langsung

Setiap slider dilengkapi tampilan nilai numerik yang akan berubah secara otomatis saat slider digeser. Fitur ini memudahkan pengguna dalam melakukan pengaturan dengan tingkat presisi yang lebih tinggi.

5. Preset Nilai Cepat

Selain menggeser slider secara manual, tersedia pula tombol preset yang memungkinkan pengguna memilih beberapa nilai umum, seperti 0%, 25%, 50%, 75%, 100%. Fitur ini sangat berguna ketika aplikasi membutuhkan perpindahan nilai secara cepat tanpa harus menggeser slider satu per satu.

6. Mendukung Mouse dan Layar Sentuh

Antarmuka Web Slider dapat dioperasikan menggunakan berbagai perangkat, antara lain:

- Komputer atau laptop menggunakan mouse.

- Tablet dengan layar sentuh.

- Smartphone Android maupun iPhone.

Dengan demikian, aplikasi tetap nyaman digunakan pada berbagai ukuran layar.

7. Antarmuka Responsif

Tampilan web dirancang menggunakan desain responsif sehingga tata letak slider akan menyesuaikan ukuran layar perangkat. Baik dibuka melalui komputer maupun smartphone, antarmuka tetap mudah digunakan.

8. Menyimpan Posisi Slider Terakhir

Web Slider mampu mempertahankan posisi slider terakhir sehingga pengguna tidak perlu mengatur ulang setiap kali halaman web dibuka kembali. Hal ini meningkatkan kenyamanan terutama pada aplikasi yang sering digunakan.

 

Baca juga: DIYables ESP32 Web Apps Web Monitor - Cara Membuat Serial Monitor Berbasis Web pada ESP32 

Perangkat Keras yang Dibutuhkan

- ESP32 Dev Module ESP-WROOM-32 (38 Pin)

- Kabel USB yang mendukung transfer data (bukan hanya untuk pengisian daya)

Cara Menggunakan DIYables ESP32 Web Apps Web Slider

Ikuti langkah-langkah berikut untuk menjalankan contoh program Web Slider pada ESP32:

1. Hubungkan ESP32 ke Komputer

Hubungkan papan ESP32 ke komputer menggunakan kabel USB yang mendukung transfer data.

2. Jalankan Arduino IDE

Pastikan Arduino IDE telah terpasang beserta ESP32 Board Package sehingga papan ESP32 dapat dikenali.

3. Pilih Board dan Port

Pada Arduino IDE, pilih jenis board yang digunakan melalui menu Tools → Board. Selanjutnya pilih port komunikasi melalu Tools → Port. Pastikan port yang dipilih sesuai dengan ESP32 yang terhubung ke komputer.

4. Install Library DIYables ESP32 Web Apps

Buka Library Manager dengan memilih menu Sketch → Include Library → Manage Libraries...

atau klik ikon Library Manager pada panel kiri Arduino IDE. Ketik DIYables ESP32 Web Apps pada kotak pencarian.

5. Install Library

Pilih DIYables ESP32 Web Apps dari daftar hasil pencarian, kemudian klik tombol Install. Tunggu hingga proses instalasi selesai.



6. Install Library Dependensi

Setelah proses instalasi selesai, Arduino IDE akan menampilkan dialog untuk menginstal library pendukung (dependency). Klik tombol Install All agar seluruh library yang dibutuhkan ikut terpasang secara otomatis.



7. Buka Contoh Program

Setelah instalasi selesai, buka contoh program melalui menu File → Examples → DIYables ESP32 Web Apps → WebSlider. Contoh program tersebut sudah berisi konfigurasi dasar sehingga dapat langsung digunakan.

8. Konfigurasikan WiFi

Sebelum program diunggah ke ESP32, ubah nama jaringan WiFi dan password sesuai dengan jaringan yang digunakan.

 

const char WIFI_SSID[] = "YOUR_WIFI_NETWORK";

const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";

 

Gantilah:

- YOUR_WIFI_NETWORK dengan nama WiFi.

- YOUR_WIFI_PASSWORD dengan password WiFi.

9. Upload Program ke ESP32

Klik tombol Upload pada Arduino IDE, kemudian tunggu hingga proses kompilasi dan upload selesai.

10. Buka Serial Monitor

Setelah proses upload berhasil, buka Serial Monitor.

11. Periksa Alamat IP ESP32

Apabila koneksi WiFi berhasil, Serial Monitor akan menampilkan alamat IP yang diperoleh ESP32 dari router. Contohnya: 

IP Address: 10.195.113.32


 

Jika tidak ada informasi yang muncul, tekan tombol EN/RESET pada ESP32 untuk melakukan restart.

12. Buka Halaman Web

Masukkan alamat IP tersebut ke browser pada komputer atau smartphone. Contoh: http://10.195.113.32. Halaman utama DIYables ESP32 WebSlider akan ditampilkan.

 


13. Membuka Web Slider

Klik menu Web Slider pada halaman utama. Selanjutnya browser akan menampilkan antarmuka Web Slider yang berisi dua buah slider beserta tampilan nilai masing-masing.



Sebagai alternatif, halaman Web Slider juga dapat diakses secara langsung melalui URL http://10.195.113.32/web-slider

14. Menguji Slider

Geser kedua slider ke berbagai posisi. Setiap perubahan nilai akan langsung dikirimkan ke ESP32 melalui WebSocket, kemudian nilai terbaru akan muncul secara real-time pada Serial Monitor maupun dapat langsung digunakan untuk mengendalikan perangkat keras yang terhubung ke ESP32.

Kustomisasi Kreatif – Menyesuaikan Web Slider dengan Kebutuhan Proyek

Contoh program Web Slider yang disediakan oleh library DIYables ESP32 Web Apps dapat dikembangkan sesuai kebutuhan proyek. Salah satu penyesuaian yang paling sering dilakukan adalah menentukan nilai awal (default value) dari masing-masing slider ketika halaman web pertama kali dibuka. Dengan mengubah nilai default, pengguna dapat menentukan kondisi awal perangkat, misalnya LED menyala dengan tingkat kecerahan tertentu atau motor berputar pada kecepatan awal yang telah ditentukan.

Mengatur Nilai Default Slider

Ubah konfigurasi nilai awal slider pada program sesuai kebutuhan proyek.


// Current slider values (0-255)

int slider1Value = 64;   // Default 25% (64/255)

int slider2Value = 128;  // Default 50% (128/255)


Cara Menggunakan Web Slider

Antarmuka Web Slider dirancang agar mudah digunakan baik pada komputer maupun perangkat mobile. Seluruh perubahan nilai dilakukan secara real-time, sehingga pengguna dapat langsung melihat respons dari ESP32 tanpa perlu memuat ulang (refresh) halaman browser.

1. Mengenal Antarmuka Web Slider

Saat halaman Web Slider dibuka, akan ditampilkan beberapa komponen utama sebagai berikut.

- Slider 1 digunakan untuk mengatur parameter analog pertama dengan rentang nilai 0–255.

- Slider 2 digunakan untuk mengatur parameter analog kedua dengan rentang nilai 0–255.

- Value Display menampilkan nilai numerik dari masing-masing slider secara langsung ketika posisi slider berubah.

- Preset Button menyediakan pilihan nilai tertentu seperti 0%, 25%, 50%, 75%, dan 100%, sehingga pengguna dapat memilih nilai dengan cepat tanpa harus menggeser slider secara manual.

Seluruh perubahan nilai akan langsung dikirim ke ESP32 menggunakan WebSocket, sehingga komunikasi berlangsung sangat cepat.

2. Mengoperasikan Slider

Web Slider mendukung berbagai jenis perangkat, mulai dari komputer hingga smartphone.

a. Menggunakan Komputer (Mouse)

Pada komputer atau laptop, slider dapat dioperasikan menggunakan mouse dengan beberapa cara berikut.

- Klik dan geser (Click and Drag) untuk mengubah nilai secara bertahap.

- Klik pada jalur slider (Track) untuk langsung berpindah ke posisi tertentu.

- Lakukan pergeseran kecil apabila membutuhkan pengaturan nilai yang lebih presisi.

Metode ini sangat cocok digunakan ketika melakukan proses kalibrasi atau pengujian perangkat.

b. Menggunakan Smartphone atau Tablet (Touch Screen)

Pada perangkat layar sentuh, slider dapat dioperasikan dengan mudah menggunakan sentuhan jari.

- Sentuh dan geser pegangan slider ke posisi yang diinginkan.

- Ketuk jalur slider untuk langsung memilih nilai tertentu.

- Geser perlahan apabila diperlukan perubahan nilai yang lebih halus.

Karena antarmuka telah dibuat responsif, tampilan akan menyesuaikan ukuran layar sehingga tetap nyaman digunakan pada berbagai perangkat.

3. Rentang Nilai Slider

Masing-masing slider menghasilkan nilai digital dengan karakteristik sebagai berikut:


Parameter

Nilai

Nilai Minimum

0

Nilai Maksimum

255

Resolusi

256 Level (8-bit)

Kompatibilitas

PWM / analogWrite()


Rentang nilai 0–255 dipilih karena sesuai dengan resolusi PWM 8-bit, sehingga dapat langsung digunakan pada berbagai aplikasi pengendalian perangkat elektronik. Sebagai contoh:

- 0 menunjukkan output minimum atau kondisi mati.

- 128 menunjukkan sekitar 50% duty cycle.

- 255 menunjukkan output maksimum atau 100% duty cycle.

Contoh Pemrograman Menggunakan Web Slider

Nilai yang diperoleh dari Web Slider dapat dimanfaatkan untuk mengendalikan berbagai perangkat keras maupun proses pada ESP32. Berikut beberapa contoh implementasinya.

1. Membaca Nilai Slider

Contoh paling sederhana adalah membaca nilai dari masing-masing slider setiap kali terjadi perubahan. Melalui callback yang disediakan oleh library, ESP32 akan menerima nilai terbaru dan dapat langsung memprosesnya.


void setup() {

  // 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

  });

}


2. Mengatur Kecerahan LED (LED Brightness Control)

Salah satu penerapan paling umum adalah mengatur tingkat kecerahan LED menggunakan PWM. Pada contoh ini:

- Slider 1 digunakan untuk menentukan tingkat kecerahan LED.

- Nilai slider langsung dikirim ke fungsi PWM sehingga intensitas cahaya berubah secara real-time.

Semakin besar nilai slider, semakin terang LED yang dihasilkan.


// Pin definitions for PWM LEDs

const int LED1_PIN = 9;   // PWM pin for first LED

const int LED2_PIN = 10;  // PWM pin for second LED


void setup() {

  // Configure LED pins as outputs

  pinMode(LED1_PIN, OUTPUT);

  pinMode(LED2_PIN, OUTPUT);

  

  // Set initial brightness

  analogWrite(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));

  });

}


3. Mengontrol Posisi Servo

Web Slider juga dapat digunakan sebagai pengendali posisi motor servo. Nilai slider dapat dipetakan (mapping) menjadi sudut servo, misalnya dari 0° hingga 180°. Dengan demikian, pengguna dapat mengatur posisi servo langsung dari browser tanpa memerlukan joystick ataupun potensiometer.


#include <Servo.h>


Servo servo1, servo2;


void setup() {

  // Attach servos to PWM pins

  servo1.attach(9);

  servo2.attach(10);

  

  // 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) + "°");

  });

}


4. Mengatur Kecepatan Motor DC

Selain servo, slider juga dapat digunakan untuk mengontrol kecepatan motor DC melalui driver motor seperti L298N, L293D, atau driver PWM lainnya. Nilai slider digunakan sebagai nilai duty cycle PWM, sehingga semakin tinggi nilai slider, semakin cepat putaran motor. Metode ini banyak digunakan pada proyek robot, conveyor, kipas otomatis, maupun sistem transportasi mini.


// Motor driver pins

const int MOTOR1_PWM = 9;    // Motor 1 speed control

const int MOTOR1_DIR1 = 2;   // Motor 1 direction pin 1

const int MOTOR1_DIR2 = 3;   // Motor 1 direction pin 2

const int MOTOR2_PWM = 10;   // Motor 2 speed control

const int MOTOR2_DIR1 = 4;   // Motor 2 direction pin 1

const int MOTOR2_DIR2 = 5;   // Motor 2 direction pin 2


void setup() {

  // Configure motor pins

  pinMode(MOTOR1_PWM, OUTPUT);

  pinMode(MOTOR1_DIR1, OUTPUT);

  pinMode(MOTOR1_DIR2, OUTPUT);

  pinMode(MOTOR2_PWM, OUTPUT);

  pinMode(MOTOR2_DIR1, OUTPUT);

  pinMode(MOTOR2_DIR2, OUTPUT);

  

  // Set initial motor directions (forward)

  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;

    

    // Control motor speeds directly

    analogWrite(MOTOR1_PWM, slider1);

    analogWrite(MOTOR2_PWM, slider2);

    

    // Calculate percentage for display

    int speed1Percent = map(slider1, 0, 255, 0, 100);

    int speed2Percent = map(slider2, 0, 255, 0, 100);

    

    Serial.println("Motor1: " + String(speed1Percent) + "%, " +

                   "Motor2: " + String(speed2Percent) + "%");

  });

}


5. Mengontrol Warna LED RGB

Apabila menggunakan LED RGB, kedua slider dapat dimanfaatkan untuk mengatur kombinasi warna. Sebagai contoh:

- Slider 1 mengatur intensitas warna merah.

- Slider 2 mengatur intensitas warna hijau.

Sementara itu, kanal warna biru dapat diatur menggunakan nilai tetap atau ditambahkan slider ketiga apabila aplikasi dikembangkan lebih lanjut.


// RGB LED pins

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;

    

    // Use sliders to control RGB components

    // Slider 1 controls red intensity

    // Slider 2 controls blue intensity

    // Green is calculated based on both sliders

    

    int redValue = slider1;

    int blueValue = slider2;

    int greenValue = (slider1 + slider2) / 2;  // Average of both sliders

    

    analogWrite(RED_PIN, redValue);

    analogWrite(GREEN_PIN, greenValue);

    analogWrite(BLUE_PIN, blueValue);

    

    Serial.println("RGB - R:" + String(redValue) + 

                   " G:" + String(greenValue) + 

                   " B:" + String(blueValue));

  });

}


Teknik Pemrograman Lanjutan

Setelah memahami penggunaan dasar Web Slider, Anda dapat mengembangkan program dengan berbagai teknik agar sistem menjadi lebih stabil, responsif, dan mudah digunakan.

1. Melakukan Penghalusan Nilai (Value Smoothing)

Pada beberapa aplikasi, perubahan nilai slider yang terlalu cepat dapat menyebabkan gerakan motor menjadi kasar atau cahaya LED berubah secara tiba-tiba. Untuk mengatasinya, lakukan proses Value Smoothing sehingga perubahan nilai berlangsung lebih halus. Teknik ini sangat bermanfaat pada aplikasi seperti:

- Pengaturan kecepatan motor.

- Kontrol servo.

- Pengaturan intensitas LED.

- Sistem audio.


class SliderSmoother {

private:

  int currentValue = 0;

  int targetValue = 0;

  unsigned long lastUpdate = 0;

  const int SMOOTH_RATE = 5;  // Change per update cycle

  

public:

  void setTarget(int target) {

    targetValue = target;

  }

  

  int getCurrentValue() {

    return currentValue;

  }

  

  bool update() {

    if (millis() - lastUpdate > 10) {  // Update every 10ms

      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) {

    // Set target values for smooth transition

    smoother1.setTarget(slider1);

    smoother2.setTarget(slider2);

  });

}


void loop() {

  server.loop();

  

  // Update smoothed values

  bool changed1 = smoother1.update();

  bool changed2 = smoother2.update();

  

  if (changed1 || changed2) {

    // Apply smoothed values to hardware

    analogWrite(9, smoother1.getCurrentValue());

    analogWrite(10, smoother2.getCurrentValue());

  }

}


2. Kontrol Berbasis Ambang Batas (Threshold Control)

Pada kondisi tertentu, perubahan kecil pada slider tidak perlu langsung diproses oleh ESP32. Sebagai contoh, sistem hanya akan memperbarui output apabila perubahan nilai lebih besar dari batas tertentu (threshold). Pendekatan ini memiliki beberapa keuntungan, yaitu:

- Mengurangi jumlah proses yang dijalankan mikrokontroler.

- Mengurangi lalu lintas data WebSocket.

- Membuat sistem lebih stabil ketika slider sering berubah.


void setupThresholdControl() {

  webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {

    slider1Value = slider1;

    slider2Value = slider2;

    

    // Threshold-based control for discrete outputs

    const int LOW_THRESHOLD = 85;    // 33%

    const int MEDIUM_THRESHOLD = 170; // 66%

    

    // Control digital outputs based on slider 1 thresholds

    if (slider1 < LOW_THRESHOLD) {

      // Low level: Turn off all outputs

      digitalWrite(2, LOW);

      digitalWrite(3, LOW);

      digitalWrite(4, LOW);

    } else if (slider1 < MEDIUM_THRESHOLD) {

      // Medium level: Turn on first output

      digitalWrite(2, HIGH);

      digitalWrite(3, LOW);

      digitalWrite(4, LOW);

    } else {

      // High level: Turn on all outputs

      digitalWrite(2, HIGH);

      digitalWrite(3, HIGH);

      digitalWrite(4, HIGH);

    }

    

    // Use slider 2 for analog PWM control

    analogWrite(9, slider2);

  });

}


3. Sistem Preset Nilai

Pada aplikasi industri maupun otomasi rumah, sering kali diperlukan beberapa konfigurasi yang telah ditentukan sebelumnya. Sebagai contoh:

- Mode Hemat Energi

- Mode Normal

- Mode Maksimum

Setiap mode dapat langsung mengubah nilai slider ke konfigurasi tertentu tanpa harus melakukan pengaturan secara manual. Fitur preset juga mempermudah pengguna yang tidak ingin mengatur nilai satu per satu setiap kali menggunakan sistem.


// Predefined preset values

const int 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 hardware

    analogWrite(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 handling

    analogWrite(9, slider1);

    analogWrite(10, slider2);

  });

}


void loop() {

  server.loop();

  

  // Check for preset trigger conditions

  // Example: Read buttons connected to digital pins

  static bool lastButton = false;

  bool currentButton = digitalRead(7);  // Preset button on pin 7

  

  if (currentButton && !lastButton) {  // Button pressed

    static int currentPreset = 0;

    applyPreset(currentPreset);

    currentPreset = (currentPreset + 1) % 5;  // Cycle through presets

  }

  lastButton = currentButton;

}


Contoh Integrasi Perangkat Keras

Nilai yang dihasilkan oleh Web Slider dapat digunakan untuk mengendalikan berbagai perangkat keras berbasis ESP32.

1. Kontrol LED Strip

Web Slider sangat cocok digunakan sebagai pengatur tingkat kecerahan LED Strip.

Contohnya meliputi:

- Lampu dekorasi.

- Lampu ruangan pintar.

- Lampu panggung.

- Lampu ambient.

Nilai slider akan langsung menentukan duty cycle PWM sehingga intensitas cahaya berubah secara halus.


// For WS2812B or similar addressable LED strips

// (requires additional libraries like FastLED or Adafruit NeoPixel)


const int LED_STRIP_PIN = 6;

const int 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 hue

    

    uint8_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));

  });

}


2. Kontrol Kecepatan Kipas

Slider juga dapat dimanfaatkan untuk mengatur kecepatan kipas DC. Penerapan ini sering digunakan pada sistem pendingin elektronik, smart fan, ventilasi otomatis, dan pendingin ruangan mini. Pengguna cukup menggeser slider untuk mengatur kecepatan putaran kipas secara real-time.


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;

    

    // Control fan speeds with minimum threshold for startup

    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)) + "%");

  });

}


3. Kontrol Volume Audio

Selain perangkat mekanik, Web Slider juga dapat digunakan sebagai pengatur level audio. Contohnya meliputi:

- Pengaturan volume speaker digital.

- Mixer audio sederhana.

- Pengaturan gain amplifier digital.

- Sistem multimedia berbasis ESP32.

Nilai slider dapat dikirim ke modul audio untuk mengubah level keluaran suara secara langsung.


// For controlling audio amplifier or volume IC

const int VOLUME1_PIN = 9;  // PWM output to volume control

const int VOLUME2_PIN = 10; // Second channel or tone control


void setupAudioControl() {

  pinMode(VOLUME1_PIN, OUTPUT);

  pinMode(VOLUME2_PIN, OUTPUT);

  

  webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {

    slider1Value = slider1;

    slider2Value = slider2;

    

    // Use logarithmic scaling for better audio perception

    float volume1 = pow(slider1 / 255.0, 2) * 255;  // Square law

    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));

  });

}


Penyelesaian Masalah (Troubleshooting)

Saat mengembangkan aplikasi berbasis DIYables ESP32 Web Apps Web Slider, terkadang Anda dapat menemui beberapa kendala, seperti slider yang tidak merespons, nilai yang tidak berubah sesuai harapan, atau output PWM yang tidak bekerja. Berikut beberapa masalah yang paling umum beserta cara mengatasinya.

1. Slider Tidak Merespons

Apabila slider pada halaman web tidak dapat digeser atau perubahan nilainya tidak diterima oleh ESP32, lakukan beberapa pemeriksaan berikut:

- Pastikan ESP32 dan perangkat yang digunakan untuk membuka browser berada pada jaringan WiFi yang sama.

- Periksa apakah koneksi WebSocket telah berhasil dibuat melalui Developer Tools pada browser (Console).

- Pastikan alamat IP ESP32 yang diakses melalui browser sudah benar.

- Muat ulang (Refresh) halaman web untuk membangun kembali koneksi WebSocket.

- Periksa Serial Monitor pada Arduino IDE untuk memastikan ESP32 berhasil terhubung ke jaringan WiFi dan tidak menampilkan pesan kesalahan.

Jika masalah masih terjadi, tekan tombol EN/RESET pada ESP32 untuk melakukan restart, kemudian akses kembali halaman web.

2. Nilai Slider Tidak Mencapai Rentang Penuh

Apabila slider tidak dapat menghasilkan nilai 0 hingga 255, lakukan pemeriksaan berikut:

- Pastikan konfigurasi rentang nilai slider pada aplikasi web telah diatur dengan benar.

- Periksa proses pembacaan nilai pada fungsi callback di program Arduino.

- Pastikan tidak ada proses mapping atau pembatasan nilai yang menyebabkan hasil menjadi lebih kecil dari yang diharapkan.

- Lakukan pengujian menggunakan browser atau perangkat lain untuk memastikan masalah bukan berasal dari browser yang digunakan.

3. Kontrol Terasa Patah-Patah atau Tidak Stabil

Pada beberapa kondisi, perubahan nilai slider dapat terasa kurang halus, terutama apabila jaringan WiFi memiliki latensi tinggi. Untuk mengatasinya, Anda dapat menerapkan beberapa teknik berikut:

- Gunakan algoritma Value Smoothing agar perubahan nilai berlangsung secara bertahap.

- Terapkan Threshold Control sehingga perubahan kecil tidak langsung diproses.

- Hindari mengirim pembaruan nilai secara berlebihan apabila aplikasi tidak membutuhkan respons yang sangat cepat.

- Pastikan kualitas sinyal WiFi cukup baik agar komunikasi WebSocket tetap stabil.

Dengan langkah-langkah tersebut, pergerakan motor, servo, maupun perubahan intensitas LED akan terlihat lebih halus.

4. Output PWM Tidak Berfungsi

Apabila nilai slider sudah berubah tetapi perangkat yang dikendalikan tidak memberikan respons, lakukan pemeriksaan berikut:

- Pastikan pin GPIO yang digunakan mendukung fungsi PWM pada ESP32.

- Periksa kembali konfigurasi pin output pada program.

- Pastikan nilai slider benar-benar diteruskan ke fungsi PWM yang digunakan.

- Periksa kembali rangkaian perangkat keras, termasuk kabel, driver motor, LED, maupun catu daya yang digunakan.

- Pastikan beban yang dikendalikan tidak melebihi kemampuan output ESP32.

Tips Debugging

Selama proses pengembangan, Serial Monitor merupakan salah satu alat debugging yang sangat membantu untuk mengetahui apakah data dari Web Slider telah diterima dengan benar oleh ESP32. Anda dapat menambahkan beberapa perintah Serial.print() untuk menampilkan informasi penting, seperti:

- Nilai Slider 1.

- Nilai Slider 2.

- Status koneksi WebSocket.

- Informasi koneksi WiFi.

- Nilai PWM yang dikirim ke perangkat.

Dengan cara ini, proses pencarian kesalahan (debugging) menjadi jauh lebih mudah karena setiap perubahan nilai dapat dipantau secara langsung.


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("===================");

}


Ide Proyek Pembelajaran STEM

Web Slider merupakan antarmuka yang sangat fleksibel sehingga dapat diterapkan pada berbagai proyek STEM (Science, Technology, Engineering, and Mathematics). Berikut beberapa contoh implementasi yang dapat dijadikan referensi.

1. Sistem Kontrol Pencahayaan

Gunakan Web Slider sebagai pengendali intensitas pencahayaan pada berbagai aplikasi, seperti:

- Mengatur tingkat kecerahan lampu ruangan.

- Mengontrol warna LED RGB.

- Mengubah kecepatan animasi LED Strip.

- Mengatur intensitas lampu panggung atau lampu dekoratif.

Melalui browser, pengguna dapat mengatur pencahayaan secara real-time tanpa harus menyentuh perangkat secara langsung.

2. Sistem Kontrol Motor

Nilai slider juga dapat dimanfaatkan untuk mengendalikan berbagai jenis motor. Contoh implementasinya antara lain:

- Mengatur kecepatan robot bergerak.

- Mengontrol putaran kipas DC.

- Mengatur laju pompa air.

- Mengendalikan kecepatan konveyor mini.

- Mengatur putaran motor pada proyek otomatisasi.

Karena nilai slider dikirim secara langsung melalui WebSocket, perubahan kecepatan motor dapat dirasakan hampir tanpa jeda.

3. Sistem Audio Digital

Selain aplikasi mekanik, Web Slider juga dapat digunakan sebagai antarmuka pengaturan audio. Beberapa contoh penerapannya yaitu:

- Pengaturan volume speaker.

- Kontrol nada (Tone Control).

- Pengaturan Equalizer sederhana.

- Pengaturan intensitas efek suara.

- Pengontrol visualisasi musik berbasis ESP32.

4. Sistem Smart Home

Pada proyek Smart Home, Web Slider dapat digunakan untuk mengatur berbagai parameter perangkat secara jarak dekat melalui jaringan WiFi. Contohnya meliputi:

- Mengatur tingkat pendinginan atau pemanasan ruangan.

- Mengontrol posisi tirai atau window blind otomatis.

- Mengatur debit air pada sistem irigasi.

- Mengontrol tingkat kecerahan lampu pintar.

- Mengatur volume perangkat multimedia rumah.

Dengan antarmuka berbasis web, seluruh pengaturan dapat dilakukan menggunakan smartphone tanpa perlu membuat aplikasi Android khusus.

Integrasi dengan Contoh Web Apps Lain

Salah satu keunggulan DIYables ESP32 Web Apps adalah seluruh contoh aplikasi dapat dikombinasikan untuk membangun sistem kontrol yang lebih kompleks.

1. Menggabungkan Web Slider dengan WebJoystick

Web Slider dapat digunakan bersama WebJoystick untuk membuat sistem kendali robot yang lebih lengkap.

Sebagai contoh:

- WebJoystick digunakan untuk menentukan arah gerakan robot (maju, mundur, belok kanan, dan belok kiri).

- Web Slider digunakan untuk mengatur batas kecepatan maksimum motor.

Dengan kombinasi tersebut, pengguna tidak hanya dapat mengendalikan arah robot, tetapi juga mengatur kecepatannya secara real-time melalui browser.


// Global speed limit from sliders

int maxSpeed = 255;


// In WebSlider callback

webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {

  maxSpeed = slider1;  // Use slider 1 as global speed limit

});


// In WebJoystick callback

webJoystickPage.onJoystickValueFromWeb([](int x, int y) {

  // Scale joystick values by slider-controlled speed limit

  int scaledX = map(x, -100, 100, -maxSpeed, maxSpeed);

  int scaledY = map(y, -100, 100, -maxSpeed, maxSpeed);

  controlRobot(scaledX, scaledY);

});


2. Menggabungkan Web Slider dengan WebDigitalPins

Web Slider juga dapat dipadukan dengan contoh WebDigitalPins. Pada kombinasi ini:

- WebDigitalPins digunakan untuk mengaktifkan atau menonaktifkan perangkat (ON/OFF).

- Web Slider digunakan untuk mengatur besarnya output PWM ketika perangkat dalam kondisi aktif.

Sebagai contoh:

- Tombol digital digunakan untuk menyalakan LED.

- Slider digunakan untuk mengatur tingkat kecerahan LED.

- Tombol digital digunakan untuk mengaktifkan motor.

- Slider digunakan untuk mengatur kecepatan putaran motor.


webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {

  // Only apply PWM if corresponding digital pins are ON

  if (webDigitalPinsPage.getPinState(2)) {

    analogWrite(9, slider1);

  } else {

    analogWrite(9, 0);

  }

  

  if (webDigitalPinsPage.getPinState(3)) {

    analogWrite(10, slider2);

  } else {

    analogWrite(10, 0);

  }

});


Baca juga: DIYables ESP32 Web Apps Web Rotator - Cara Membuat Kontrol Sudut Servo dan Stepper Berbasis Web pada ESP32

 

 

 

Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.

Posting Komentar

0 Komentar