DIYables ESP32 Web Apps Multiple Web Apps - Membuat Beberapa Antarmuka Web dalam Satu ESP32

Salah satu keunggulan ESP32 dibandingkan mikrokontroler lainnya adalah kemampuannya menjalankan web server secara langsung melalui jaringan WiFi. Dengan memanfaatkan DIYables ESP32 WebApps Library, Anda dapat membuat beberapa halaman web interaktif yang berjalan secara bersamaan pada satu board ESP32 tanpa perlu server tambahan. Melalui contoh Multiple Web Apps, ESP32 tidak hanya berfungsi sebagai web server sederhana, tetapi juga mampu menyediakan berbagai antarmuka berbasis web, seperti Web Monitor, Chat Interface, Digital Pin Controller, Dual Slider, hingga Virtual Joystick. Seluruh halaman tersebut saling terintegrasi dan dapat diakses melalui browser pada komputer maupun smartphone yang terhubung ke jaringan WiFi yang sama. Tutorial ini akan membahas cara menjalankan contoh program Multiple Web Apps, memahami setiap fitur yang tersedia, serta mengenal konfigurasi dasar yang dapat digunakan sebagai fondasi dalam mengembangkan proyek Internet of Things (IoT) yang lebih kompleks.

Fitur Multiple Web Apps pada DIYables ESP32 WebApps

Contoh program ini menyediakan beberapa aplikasi web yang berjalan secara bersamaan dalam satu proyek ESP32. Berikut fungsi masing-masing fitur:

- Halaman Beranda (Home Page) sebagai pusat navigasi menuju seluruh aplikasi web.

- Web Monitor untuk melihat komunikasi serial secara real-time melalui browser.

- Chat Interface yang memungkinkan browser bertukar pesan dengan ESP32.

- Digital Pin Control untuk mengontrol maupun memantau status pin digital secara langsung.

- Dual Web Slider sebagai pengendali dua nilai analog secara independen.

- Virtual Joystick untuk mengirimkan koordinat posisi dua dimensi (X dan Y).

- Shared State Management, sehingga seluruh aplikasi dapat berbagi informasi status yang sama.

- Komunikasi Real-Time menggunakan WebSocket, sehingga perubahan data langsung diperbarui tanpa perlu me-refresh halaman browser.

- Template Proyek IoT, yang dapat dikembangkan menjadi aplikasi monitoring maupun kontrol perangkat yang lebih kompleks.

Dengan seluruh fitur tersebut, contoh ini sangat cocok dijadikan dasar untuk membuat sistem Smart Home, Robot WiFi, Monitoring Sensor, maupun aplikasi Industrial IoT. 

Perangkat Keras yang Dibutuhkan

Sebelum memulai, siapkan beberapa perangkat berikut:

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

Kabel USB untuk proses upload program sekaligus komunikasi serial dengan komputer.

Pastikan driver USB ESP32 telah terinstal sehingga board dapat dikenali oleh Arduino IDE.

Cara Menjalankan Contoh DIYables ESP32 Multiple Web Apps

Ikuti langkah-langkah berikut secara berurutan:

1. Hubungkan ESP32 ke Komputer

Sambungkan board ESP32 ke komputer menggunakan kabel USB. Pastikan lampu indikator pada board menyala sebagai tanda bahwa ESP32 telah memperoleh catu daya.

2. Buka Arduino IDE

Jalankan Arduino IDE, kemudian pilih jenis board yang sesuai. Klik menu Tools → Board → ESP32 Arduino → ESP32 Dev Module. Selanjutnya pilih Port COM yang digunakan oleh ESP32. Jika port belum muncul, periksa kembali driver USB yang digunakan oleh board ESP32.

3. Install DIYables ESP32 WebApps Library

Pada Arduino IDE, buka menu Library Manager. Pilih ikon Library pada bagian kiri Arduino IDE, kemudian cari library DIYables ESP32 WebApp. Pilih DIYables ESP32 WebApps Library by DIYables, kemudian klik Install.



4. Install Seluruh Library Dependensi

Saat proses instalasi berlangsung, Arduino IDE biasanya akan meminta pemasangan beberapa library tambahan (dependency). Klik tombol Install All agar seluruh library pendukung ikut terinstal secara otomatis. Hal ini penting karena contoh program Multiple Web Apps membutuhkan beberapa library lain agar dapat dikompilasi tanpa error.


 

5. Membuka Contoh Program Multiple Web Apps

Setelah seluruh library berhasil diinstal, buka contoh program bawaan melalui menu berikut:

File → Examples → DIYables ESP32 WebApps → MultipleWebApps

Arduino IDE akan membuka sebuah sketch yang telah siap digunakan.

6. Konfigurasi Jaringan WiFi

Sebelum program diunggah ke ESP32, ubah terlebih dahulu nama WiFi dan password sesuai jaringan yang akan digunakan. Cari bagian kode berikut:

 

const char WIFI_SSID[] = "YOUR_WIFI_NETWORK";

const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";

 

Kemudian ubah menjadi sesuai dengan jaringan WiFi Anda. Sebagai contoh:

 

const char WIFI_SSID[] = "Rumahku";

const char WIFI_PASSWORD[] = "12345678";

 

Pastikan jaringan WiFi menggunakan frekuensi 2.4 GHz, karena ESP32 tidak mendukung jaringan 5 GHz.

7. Upload Program ke ESP32

Klik tombol Upload pada Arduino IDE. Arduino IDE akan melakukan proses kompilasi program, mengunggah firmware ke ESP32, dan menjalankan program secara otomatis setelah proses upload selesai. Tunggu hingga muncul pesan Done Uploading.

8. Buka Serial Monitor

Setelah proses upload selesai, buka Serial Monitor. Jika proses koneksi berhasil, akan muncul informasi seperti berikut.



Jika Serial Monitor belum menampilkan informasi apa pun, tekan tombol EN (Reset) pada board ESP32 agar program dijalankan kembali.

9. Catat Alamat IP ESP32

Setelah ESP32 berhasil terhubung ke jaringan WiFi, Serial Monitor akan menampilkan alamat IP yang diberikan oleh router. Sebagai contoh: 10.195.113.32. Alamat IP inilah yang digunakan untuk mengakses seluruh aplikasi web yang berjalan di ESP32.

10. Membuka Dashboard melalui Browser

Buka browser pada komputer maupun smartphone yang masih terhubung ke jaringan WiFi yang sama.

Kemudian ketik alamat IP ESP32 pada address bar. Sebagai contoh: http://10.195.113.32. Jika koneksi berhasil, browser akan menampilkan halaman utama (Dashboard) yang berisi daftar seluruh aplikasi web.



11. Mencoba Seluruh Aplikasi Web

Pada halaman Dashboard tersedia beberapa menu yang dapat dipilih. Misalnya:

- Chat

- Web Monitor

- Digital Pins

Web Slider

- Web Joystick  

Klik salah satu menu tersebut untuk membuka antarmuka yang diinginkan. Selain melalui Dashboard, setiap aplikasi juga dapat diakses secara langsung menggunakan alamat URL masing-masing. Sebagai contoh: http://10.195.113.32/chat atau http://10.195.113.32/webmonitor. Silakan coba seluruh aplikasi untuk memahami bagaimana ESP32 mengelola beberapa antarmuka web secara bersamaan.

 

Baca juga: DIYables ESP32 Web Apps WebChat - Membuat Chat Interaktif antara Browser dan ESP32 Secara Real-Time 

Mengenal Navigasi Web pada Multiple Web Apps

Halaman Dashboard berfungsi sebagai pusat navigasi menuju seluruh aplikasi web yang tersedia. Beberapa halaman yang dapat diakses antara lain:

- Web Monitor (/webmonitor) untuk memantau komunikasi serial secara langsung melalui browser.

- Chat (/chat) untuk mengirim maupun menerima pesan antara browser dan ESP32.

- Digital Pins (/digital-pins) untuk mengontrol serta memonitor status pin digital.

Web Slider (/webslider) sebagai pengendali dua nilai analog menggunakan slider.

- Web Joystick (/webjoystick) untuk mengirim koordinat posisi X dan Y layaknya joystick.

Dengan adanya Dashboard ini, pengguna tidak perlu mengingat seluruh alamat URL karena semua menu telah tersedia dalam satu halaman utama. Selain melalui Dashboard, masing-masing aplikasi dapat dibuka secara langsung menggunakan alamat berikut:

1. Halaman utama: http://[ARDUINO_IP]/

2. Web Monitor: http://[ARDUINO_IP]/webmonitor

3. Chat: http://[ARDUINO_IP]/chat

4. Digital Pins: http://[ARDUINO_IP]/digital-pins

5. Web Slider: http://[ARDUINO_IP]/webslider

6. Web Joystick: http://[ARDUINO_IP]/webjoystick

Cukup ganti [ARDUINO_IP] dengan alamat IP ESP32 yang muncul pada Serial Monitor.

Kustomisasi Multiple Web Apps untuk Proyek IoT

Contoh program Multiple Web Apps dirancang sebagai template yang mudah dimodifikasi sesuai kebutuhan proyek. Anda dapat menambah fitur baru, mengubah konfigurasi pin, menghubungkan sensor tambahan, hingga mengendalikan berbagai aktuator tanpa harus membuat antarmuka web dari awal. Berikut beberapa konfigurasi penting yang dapat disesuaikan.

1. Konfigurasi Pin Digital

Library memungkinkan Anda menentukan pin mana saja yang akan digunakan sebagai output maupun input.

a. Konfigurasi Pin Output

Pin output dapat dikontrol langsung melalui halaman web.

 

webDigitalPinsPage.enablePin(2, WEB_PIN_OUTPUT);   // General purpose output

webDigitalPinsPage.enablePin(3, WEB_PIN_OUTPUT);   // General purpose output

webDigitalPinsPage.enablePin(4, WEB_PIN_OUTPUT);   // General purpose output

webDigitalPinsPage.enablePin(13, WEB_PIN_OUTPUT);  // Built-in LED

 

Pada contoh di atas, pin GPIO 2, GPIO 3, GPIO 4, dan GPIO 13 dikonfigurasi sebagai output sehingga pengguna dapat mengubah status HIGH maupun LOW melalui browser. Konfigurasi ini sangat cocok digunakan untuk mengendalikan LED, relay, buzzer, maupun perangkat elektronik lainnya.

b. Konfigurasi Pin Input

Selain output, beberapa pin juga dapat dijadikan sebagai input.

 

webDigitalPinsPage.enablePin(8, WEB_PIN_INPUT);

webDigitalPinsPage.enablePin(9, WEB_PIN_INPUT);

 

Pin tersebut akan dipantau secara terus-menerus dan statusnya diperbarui secara real-time pada halaman web. Konfigurasi ini umumnya digunakan untuk membaca tombol, limit switch, sensor digital, maupun perangkat input lainnya.

2. Konfigurasi Virtual Joystick

Library juga menyediakan Virtual Joystick yang dapat dikustomisasi.

 

DIYablesWebJoystickPage webJoystickPage(false, 5);


Pada contoh tersebut terdapat dua parameter penting:

- autoReturn = false berarti joystick akan tetap berada pada posisi terakhir setelah dilepas.

- sensitivity = 5 berarti ESP32 hanya akan mengirim data apabila perubahan posisi joystick melebihi 5%, sehingga komunikasi jaringan menjadi lebih efisien. 

Pengaturan ini sangat berguna untuk aplikasi robot, kendaraan RC berbasis WiFi, maupun sistem kendali arah lainnya.

3. Variabel Status yang Digunakan Bersama

Agar seluruh halaman web memiliki informasi yang sama, contoh program menggunakan beberapa variabel global untuk menyimpan status perangkat.

 

int pinStates[16] = { LOW };

int currentSlider1 = 64;

int currentSlider2 = 128;

int currentJoystickX = 0;

int currentJoystickY = 0;

 

Masing-masing variabel memiliki fungsi sebagai berikut:

- pinStates menyimpan status seluruh pin digital yang sedang digunakan.

- currentSlider1 menyimpan nilai slider pertama dengan rentang 0–255.

- currentSlider2 menyimpan nilai slider kedua dengan rentang 0–255.

- currentJoystickX menyimpan posisi sumbu X joystick dengan rentang -100 hingga 100.

- currentJoystickY menyimpan posisi sumbu Y joystick dengan rentang -100 hingga 100.

Dengan pendekatan ini, seluruh aplikasi web dapat menampilkan data yang selalu sinkron sehingga perubahan yang dilakukan pada satu halaman akan langsung terlihat pada halaman lainnya.

Perintah Obrolan (Chat) Bawaan

Salah satu fitur menarik pada Multiple Web Apps adalah Chat Interface, yaitu halaman web yang memungkinkan pengguna berkomunikasi langsung dengan ESP32 melalui browser. Setiap pesan yang dikirim akan diproses oleh program, kemudian ESP32 akan memberikan respons sesuai dengan perintah yang dikenali. Fitur ini dapat dimanfaatkan sebagai dasar untuk membuat sistem kendali berbasis teks (text command), misalnya untuk mengendalikan perangkat elektronik, membaca status sensor, atau menampilkan informasi tertentu tanpa harus membuat tombol kontrol khusus.

1. Perintah Dasar

Library telah menyediakan beberapa perintah bawaan yang dapat langsung dicoba.

a. halo

Perintah ini digunakan untuk menguji komunikasi antara browser dan ESP32. Saat menerima kata halo, ESP32 akan mengirimkan pesan sapaan sebagai tanda bahwa koneksi berjalan dengan baik.

Contoh:

Pengguna : halo

ESP32    : Halo! Saya Arduino Anda. Bagaimana saya bisa membantu Anda?

Perintah ini sering digunakan sebagai pengujian awal untuk memastikan fitur Chat telah berfungsi dengan benar.

b. time atau waktu

Perintah ini digunakan untuk mengetahui berapa lama ESP32 telah aktif sejak terakhir dinyalakan atau di-reset.

Contoh:

Pengguna : waktu

ESP32    : Saya telah berjalan selama 1245 detik.

Nilai tersebut biasanya diperoleh dari fungsi millis() yang kemudian dikonversi menjadi satuan detik.

Informasi ini berguna untuk mengetahui uptime perangkat, terutama pada aplikasi monitoring yang berjalan dalam waktu lama.

c. status

Perintah status digunakan untuk melihat kondisi ESP32 saat ini. Sebagai contoh, ESP32 dapat memberikan informasi mengenai status perangkat, kondisi LED bawaan, dan informasi lain yang telah diprogram oleh pengguna.

Contoh respons:

Pengguna : status

ESP32    : Status: Berjalan lancar! LED menyala.

Dalam pengembangan proyek IoT, perintah ini dapat diperluas untuk menampilkan informasi seperti:

- Status koneksi WiFi.

- Nilai sensor.

- Tegangan catu daya.

- Kapasitas memori.

Alamat IP ESP32.

d. help atau bantuan

Perintah ini digunakan untuk menampilkan daftar seluruh perintah yang tersedia pada sistem.

Contoh:

Pengguna: bantuan

ESP32: Perintah yang tersedia:

- halo

- waktu

- status

- led on

led off

Fitur ini sangat membantu apabila jumlah perintah pada proyek semakin banyak sehingga pengguna tidak perlu mengingat semuanya.

2. Perintah Kontrol

Selain memberikan informasi, Chat Interface juga dapat digunakan untuk mengendalikan perangkat yang terhubung ke ESP32.

a. led on

Perintah ini digunakan untuk menyalakan LED bawaan (Built-in LED) pada board ESP32.

Contoh:

Pengguna: led on

ESP32: LED built-in sekarang MENYALA!

Saat perintah diterima, ESP32 akan mengubah status pin LED menjadi HIGH sehingga LED menyala.

b. led off

Perintah ini digunakan untuk mematikan LED bawaan.

Contoh:

Pengguna: led off

ESP32: LED built-in sekarang MATI!

ESP32 akan mengubah status pin LED menjadi LOW, sehingga LED padam.

Konsep ini dapat diterapkan tidak hanya pada LED, tetapi juga pada berbagai aktuator lain seperti relay, buzzer, motor DC, servo, maupun perangkat elektronik lainnya.

3. Contoh Sesi Percakapan dengan ESP32

Berikut contoh komunikasi antara pengguna dan ESP32 melalui halaman Chat.

Pengguna : halo

ESP32    : Halo! Saya Arduino Anda. Bagaimana saya bisa membantu Anda?


Pengguna : led on

ESP32    : LED built-in sekarang MENYALA!


Pengguna : waktu

ESP32    : Saya telah berjalan selama 1245 detik.


Pengguna : status

ESP32    : Status: Berjalan lancar! LED menyala.


Contoh di atas menunjukkan bahwa ESP32 mampu menerima perintah teks dari browser, memprosesnya secara langsung, kemudian mengirimkan respons kembali secara real-time melalui koneksi WebSocket. Mekanisme ini membuat komunikasi berlangsung cepat tanpa perlu memuat ulang (refresh) halaman web.

Contoh Integrasi Pemrograman DIYables ESP32 Web Apps

Salah satu kelebihan DIYables ESP32 WebApps Library adalah fleksibilitasnya untuk diintegrasikan ke berbagai jenis proyek Internet of Things (IoT). Seluruh antarmuka web yang tersedia, seperti Web Joystick, Digital Pins, Web Slider, Web Monitor, dan Chat, dapat bekerja secara bersamaan untuk mengendalikan perangkat keras maupun menampilkan informasi secara real-time. Pada bagian ini akan dibahas dua contoh implementasi yang sering dijumpai, yaitu robot berbasis ESP32 dan sistem Smart Home.

1. Contoh Integrasi Sistem Kontrol Robot

Pada contoh berikut, seluruh fitur web dimanfaatkan untuk mengendalikan sebuah robot. Fungsi masing-masing antarmuka adalah sebagai berikut:

- Virtual Joystick digunakan untuk menggerakkan robot.

- Web Slider digunakan untuk mengatur kecepatan robot sekaligus posisi kamera.

- Digital Pins digunakan sebagai tombol kendali lampu, buzzer, dan Emergency Stop.

- Chat Interface digunakan untuk memberikan perintah berbasis teks.

- Web Monitor digunakan untuk menampilkan informasi status robot secara real-time.

Berikut contoh implementasi programnya.

 

#include <Servo.h>


// Hardware definitions

const int MOTOR_LEFT_PWM = 9;

const int MOTOR_RIGHT_PWM = 10;

const int SERVO_PAN = 11;

const int SERVO_TILT = 12;

const int LED_STRIP_PIN = 6;


Servo panServo, tiltServo;


void setup() {

  // Initialize hardware

  panServo.attach(SERVO_PAN);

  tiltServo.attach(SERVO_TILT);

  pinMode(MOTOR_LEFT_PWM, OUTPUT);

  pinMode(MOTOR_RIGHT_PWM, OUTPUT);


  // ... WebApp setup code ...


  setupRobotCallbacks();

}


void setupRobotCallbacks() {

  // Use joystick for robot movement

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


    // Convert joystick to tank drive

    int leftSpeed = y + (x / 2);

    int rightSpeed = y - (x / 2);


    leftSpeed = constrain(leftSpeed, -100, 100);

    rightSpeed = constrain(rightSpeed, -100, 100);


    // Apply speed limits from sliders

    leftSpeed = map(leftSpeed, -100, 100, -currentSlider1, currentSlider1);

    rightSpeed = map(rightSpeed, -100, 100, -currentSlider1, currentSlider1);


    // Control motors

    analogWrite(MOTOR_LEFT_PWM, abs(leftSpeed));

    analogWrite(MOTOR_RIGHT_PWM, abs(rightSpeed));


    Serial.println("Robot - Left: " + String(leftSpeed) + ", Right: " + String(rightSpeed));

  });


  // Use sliders for camera pan/tilt control

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


    // Slider 1 controls maximum speed

    // Slider 2 controls camera tilt


    int panAngle = map(currentJoystickX, -100, 100, 0, 180);

    int tiltAngle = map(slider2, 0, 255, 0, 180);


    panServo.write(panAngle);

    tiltServo.write(tiltAngle);


    Serial.println("Camera - Pan: " + String(panAngle) +

                   "°, Tilt: " + String(tiltAngle) + "°");

  });


  // Use digital pins for special functions

  webDigitalPinsPage.onPinWrite([](int pin, int state) {


    switch (pin) {


      case 2:      // Headlights

        digitalWrite(pin, state);

        Serial.println("Headlights " + String(state ? "ON" : "OFF"));

        break;


      case 3:      // Horn/Buzzer

        if (state) {

          digitalWrite(pin, HIGH);

          delay(200);

          digitalWrite(pin, LOW);

        }

        break;


      case 4:      // Emergency Stop

        if (state) {

          analogWrite(MOTOR_LEFT_PWM, 0);

          analogWrite(MOTOR_RIGHT_PWM, 0);

          Serial.println("EMERGENCY STOP ACTIVATED");

        }

        break;

    }

  });


  // Chat commands

  chatPage.onChatMessage([](const String& message) {


    String msg = message;

    msg.toLowerCase();


    if (msg.indexOf("stop") >= 0) {

      analogWrite(MOTOR_LEFT_PWM, 0);

      analogWrite(MOTOR_RIGHT_PWM, 0);

      chatPage.sendToChat("Robot stopped!");

      return;

    }


    if (msg.indexOf("center camera") >= 0) {

      panServo.write(90);

      tiltServo.write(90);

      chatPage.sendToChat("Camera centered!");

      return;

    }


    if (msg.indexOf("speed") >= 0) {

      String response = "Current max speed: " +

                        String(map(currentSlider1, 0, 255, 0, 100)) + "%";

      chatPage.sendToChat(response);

      return;

    }


    chatPage.sendToChat("Robot commands: stop, center camera, speed");

  });

}

 

Penjelasan Program

a. Konfigurasi Perangkat Keras

Pada bagian awal program didefinisikan seluruh pin yang digunakan robot.

- MOTOR_LEFT_PWM mengendalikan motor kiri.

- MOTOR_RIGHT_PWM mengendalikan motor kanan.

- SERVO_PAN mengatur arah horizontal kamera.

- ERVO_TILT mengatur arah vertikal kamera.

- LED_STRIP_PIN digunakan untuk lampu tambahan.

Seluruh perangkat tersebut kemudian diinisialisasi pada fungsi setup().

b. Virtual Joystick sebagai Pengendali Robot

Ketika posisi joystick berubah pada halaman web, callback berikut akan dipanggil.

 

webJoystickPage.onJoystickValueFromWeb(...)

 

Nilai koordinat X dan Y kemudian dikonversi menjadi kecepatan motor kiri dan kanan menggunakan metode tank drive. Dengan cara ini, pengguna dapat mengendalikan arah robot secara langsung melalui browser tanpa memerlukan remote control tambahan.

c. Web Slider untuk Kamera

Dua buah slider memiliki fungsi yang berbeda, yaitu:

- Slider 1 menentukan batas maksimum kecepatan robot.

Slider 2 mengatur sudut servo kamera.

Nilai slider kemudian dikonversi menjadi sudut 0–180° sebelum dikirim ke servo menggunakan fungsi write().

d. Digital Pins sebagai Tombol Kendali

Halaman Digital Pins dimanfaatkan untuk mengaktifkan beberapa fitur robot. Sebagai contoh:

- GPIO 2 menyalakan atau mematikan lampu depan.

- GPIO 3 membunyikan buzzer.

GPIO 4 menjalankan fungsi Emergency Stop yang langsung menghentikan kedua motor.

Dengan konsep ini, pengguna dapat membuat panel kontrol robot langsung dari browser.

e. Chat sebagai Konsol Perintah

Selain tombol, robot juga dapat dikendalikan menggunakan pesan teks. Contohnya: stop, center camera, dan speed. ESP32 akan membaca isi pesan, kemudian menjalankan fungsi yang sesuai. Pendekatan ini membuat antarmuka menjadi lebih fleksibel karena pengguna cukup mengetikkan perintah tanpa perlu menambahkan tombol baru pada halaman web.

2. Contoh Integrasi Sistem Smart Home

Selain robot, DIYables ESP32 WebApps juga sangat cocok digunakan sebagai dasar pembangunan sistem Smart Home. Pada contoh berikut:

- Digital Pins digunakan untuk mengendalikan lampu.

- Web Slider digunakan untuk mengatur kecepatan kipas dan intensitas AC.

- Chat digunakan sebagai pusat perintah rumah pintar.

Web Monitor digunakan untuk menampilkan notifikasi keamanan.

Berikut contoh implementasi programnya.

 

// Home automation pin assignments


const int LIVING_ROOM_LIGHTS = 2;

const int BEDROOM_LIGHTS = 3;

const int KITCHEN_LIGHTS = 4;

const int FAN_CONTROL = 9;

const int AC_CONTROL = 10;

const int MOTION_SENSOR = 8;

const int DOOR_SENSOR = 9;


void setupHomeAutomation() {


  pinMode(LIVING_ROOM_LIGHTS, OUTPUT);

  pinMode(BEDROOM_LIGHTS, OUTPUT);

  pinMode(KITCHEN_LIGHTS, OUTPUT);

  pinMode(FAN_CONTROL, OUTPUT);

  pinMode(AC_CONTROL, OUTPUT);

  pinMode(MOTION_SENSOR, INPUT);

  pinMode(DOOR_SENSOR, INPUT_PULLUP);


  webDigitalPinsPage.onPinWrite([](int pin, int state) {


    digitalWrite(pin, state);


    String room;


    switch (pin) {


      case 2:

        room = "Living Room";

        break;


      case 3:

        room = "Bedroom";

        break;


      case 4:

        room = "Kitchen";

        break;


      default:

        room = "Pin " + String(pin);

        break;

    }


    Serial.println(room + " lights " +

                   String(state ? "ON" : "OFF"));


    String message = room +

                     " lights turned " +

                     String(state ? "ON" : "OFF");


    chatPage.sendToChat(message);

  });


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


    analogWrite(FAN_CONTROL, slider1);

    analogWrite(AC_CONTROL, slider2);


    Serial.println("Fan: " +

      String(map(slider1, 0, 255, 0, 100)) + "%, AC: " +

      String(map(slider2, 0, 255, 0, 100)) + "%");

  });


  chatPage.onChatMessage([](const String& message) {


    String msg = message;

    msg.toLowerCase();


    if (msg.indexOf("all lights on") >= 0) {


      digitalWrite(LIVING_ROOM_LIGHTS, HIGH);

      digitalWrite(BEDROOM_LIGHTS, HIGH);

      digitalWrite(KITCHEN_LIGHTS, HIGH);


      chatPage.sendToChat("All lights turned ON!");

      return;

    }


    if (msg.indexOf("all lights off") >= 0) {


      digitalWrite(LIVING_ROOM_LIGHTS, LOW);

      digitalWrite(BEDROOM_LIGHTS, LOW);

      digitalWrite(KITCHEN_LIGHTS, LOW);


      chatPage.sendToChat("All lights turned OFF!");

      return;

    }


    if (msg.indexOf("temperature") >= 0) {


      String response =

      "Fan: " +

      String(map(currentSlider1, 0, 255, 0, 100)) +

      "%, AC: " +

      String(map(currentSlider2, 0, 255, 0, 100)) +

      "%";


      chatPage.sendToChat(response);

      return;

    }


    if (msg.indexOf("security") >= 0) {


      bool motion = digitalRead(MOTION_SENSOR);

      bool door = digitalRead(DOOR_SENSOR);


      String status =

      "Motion: " +

      String(motion ? "DETECTED" : "CLEAR") +

      ", Door: " +

      String(door ? "CLOSED" : "OPEN");


      chatPage.sendToChat(status);

      return;

    }


    chatPage.sendToChat(

      "Home commands: all lights on/off, temperature, security");

  });

}


void loop() {


  server.loop();


  static bool lastMotion = false;

  static bool lastDoor = false;


  bool currentMotion = digitalRead(MOTION_SENSOR);

  bool currentDoor = digitalRead(DOOR_SENSOR);


  if (currentMotion != lastMotion) {


    if (currentMotion) {


      chatPage.sendToChat("🚨 MOTION DETECTED!");


      webMonitorPage.sendToWebMonitor(

        "Security Alert: Motion detected");

    }


    lastMotion = currentMotion;

  }


  if (currentDoor != lastDoor) {


    String status = currentDoor ? "CLOSED" : "OPENED";


    chatPage.sendToChat("🚪 Door " + status);


    webMonitorPage.sendToWebMonitor(

      "Security: Door " + status);


    lastDoor = currentDoor;

  }


  delay(10);

}

 

Penjelasan Program

Program di atas memperlihatkan bagaimana seluruh fitur DIYables ESP32 WebApps dapat digabungkan menjadi sistem otomasi rumah yang terintegrasi. Digital Pins berfungsi sebagai sakelar virtual untuk mengendalikan lampu di beberapa ruangan. Setiap perubahan status lampu akan langsung dikirim ke halaman Chat sebagai notifikasi sehingga pengguna mengetahui perangkat mana yang baru saja diaktifkan atau dimatikan. Sedangkan Web Slider dimanfaatkan untuk mengatur kecepatan kipas dan tingkat intensitas pendingin ruangan (AC). Karena nilai slider memiliki rentang 0–255, pengguna dapat melakukan pengaturan secara bertahap sesuai kebutuhan. Fitur Chat Interface juga berperan sebagai pusat kontrol berbasis teks. Pengguna cukup mengetikkan perintah seperti all lights on, all lights off, temperature, atau security, kemudian ESP32 akan mengeksekusi perintah tersebut dan mengirimkan balasan secara real-time. Pada fungsi loop(), ESP32 terus memantau sensor gerak (Motion Sensor) dan sensor pintu (Door Sensor). Ketika terjadi perubahan kondisi, sistem secara otomatis mengirimkan pemberitahuan ke halaman Chat sekaligus mencatat peristiwa tersebut pada Web Monitor. Pendekatan ini memungkinkan pengguna memperoleh notifikasi keamanan secara langsung melalui browser tanpa perlu melakukan penyegaran halaman. Dari kedua contoh tersebut dapat disimpulkan bahwa DIYables ESP32 WebApps Library tidak hanya digunakan untuk membuat halaman web sederhana, tetapi juga mampu menjadi fondasi yang kuat dalam membangun aplikasi robotika, otomasi rumah (Smart Home), monitoring industri, hingga berbagai sistem Internet of Things (IoT) yang membutuhkan komunikasi dan kendali secara real-time.

3. Contoh Integrasi untuk Proyek Pendidikan dan Eksperimen Sains

Selain dapat digunakan pada proyek robotika maupun Smart Home, DIYables ESP32 WebApps Library juga sangat sesuai untuk membangun sistem eksperimen laboratorium, alat praktikum, maupun media pembelajaran berbasis Internet of Things (IoT). Pada contoh berikut, ESP32 digunakan untuk mengendalikan beberapa perangkat eksperimen, seperti:

- Elemen pemanas (Heating Element).

- Kipas pendingin (Cooling Fan).

- Motor pengaduk (Stirrer Motor).

- Sensor suhu.

Sensor pH.

Seluruh perangkat tersebut dapat dikontrol melalui antarmuka web tanpa memerlukan aplikasi tambahan. Berikut contoh implementasi programnya.

 

// Science experiment control system

const int HEATING_ELEMENT = 9;

const int COOLING_FAN = 10;

const int STIRRER_MOTOR = 11;

const int TEMP_SENSOR_PIN = A0;

const int PH_SENSOR_PIN = A1;


void setupScienceExperiment() {


  // Sliders for temperature and stirring control

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


    // Slider 1 controls target temperature

    int targetTemp = map(slider1, 0, 255, 20, 80);


    // Slider 2 controls stirrer speed

    analogWrite(STIRRER_MOTOR, slider2);


    // Simple temperature control

    int currentTemp = readTemperature();


    if (currentTemp < targetTemp) {


      analogWrite(HEATING_ELEMENT, 200);

      analogWrite(COOLING_FAN, 0);


    } else if (currentTemp > targetTemp + 2) {


      analogWrite(HEATING_ELEMENT, 0);

      analogWrite(COOLING_FAN, 255);


    } else {


      analogWrite(HEATING_ELEMENT, 0);

      analogWrite(COOLING_FAN, 0);

    }


    Serial.println("Target: " +

                   String(targetTemp) +

                   "°C, Current: " +

                   String(currentTemp) + "°C");

  });


  // Chat interface

  chatPage.onChatMessage([](const String& message) {


    String msg = message;

    msg.toLowerCase();


    if (msg.indexOf("data") >= 0) {


      int temp = readTemperature();

      float ph = readPH();


      String data =

      "Temperature: " +

      String(temp) +

      "°C, pH: " +

      String(ph, 2);


      chatPage.sendToChat(data);

      return;

    }


    if (msg.indexOf("start") >= 0) {


      chatPage.sendToChat(

      "🔬 Experiment started! Monitoring conditions...");

      return;

    }


    if (msg.indexOf("stop") >= 0) {


      analogWrite(HEATING_ELEMENT, 0);

      analogWrite(COOLING_FAN, 0);

      analogWrite(STIRRER_MOTOR, 0);


      chatPage.sendToChat(

      "⚠️ Experiment stopped - all systems OFF");

      return;

    }


    chatPage.sendToChat(

      "Science commands: data, start, stop");

  });


  // Automatic data logging

  webMonitorPage.onWebMonitorMessage([](const String& message) {


    if (message == "log") {


      int temp = readTemperature();

      float ph = readPH();


      String logEntry =

      String(millis()) + "," +

      String(temp) + "," +

      String(ph, 2);


      webMonitorPage.sendToWebMonitor(logEntry);

    }

  });

}


int readTemperature() {


  int sensorValue = analogRead(TEMP_SENSOR_PIN);


  return map(sensorValue, 0, 1023, 0, 100);

}


float readPH() {


  int sensorValue = analogRead(PH_SENSOR_PIN);


  return map(sensorValue, 0, 1023, 0, 14) / 10.0;

}

 

Penjelasan Program

Program di atas menunjukkan bagaimana ESP32 dapat dijadikan sebagai pusat kendali sebuah eksperimen laboratorium sederhana.

a. Mengatur Suhu Menggunakan Web Slider

Slider pertama digunakan untuk menentukan suhu target dengan rentang 20°C hingga 80°C. Nilai slider kemudian dipetakan menggunakan fungsi map() sehingga menghasilkan nilai suhu yang diinginkan. Selanjutnya ESP32 membandingkan suhu target dengan suhu yang dibaca sensor.

- Jika suhu masih lebih rendah dari target, elemen pemanas akan diaktifkan.

- Jika suhu melebihi batas yang ditentukan, kipas pendingin akan dinyalakan.

Jika suhu sudah berada pada rentang yang sesuai, kedua perangkat akan dimatikan agar suhu tetap stabil.

Konsep ini merupakan bentuk kontrol suhu sederhana (On-Off Control) yang sering digunakan sebagai dasar dalam sistem otomasi.

b. Mengatur Kecepatan Motor Pengaduk

Slider kedua digunakan untuk mengendalikan kecepatan motor pengaduk. Semakin besar nilai slider, semakin cepat motor berputar sehingga proses pencampuran larutan dapat disesuaikan dengan kebutuhan eksperimen.

c. Mengontrol Eksperimen Melalui Chat

Selain menggunakan slider, pengguna juga dapat mengendalikan eksperimen melalui halaman Chat. Beberapa perintah yang tersedia antara lain:

- data untuk menampilkan hasil pembacaan sensor suhu dan sensor pH.

- start untuk memulai proses eksperimen.

- stop untuk menghentikan seluruh perangkat sebagai fungsi Emergency Stop. 

Pendekatan ini memungkinkan pengguna mengontrol eksperimen tanpa harus membuat tombol tambahan pada antarmuka web.

d. Pencatatan Data Otomatis

Program juga memanfaatkan Web Monitor sebagai media pencatatan data (data logging). Ketika halaman Web Monitor mengirimkan pesan log, ESP32 akan membaca nilai sensor, kemudian mengirimkan data dalam format berikut:

Waktu,Suhu,pH

Contoh:

 

12500,30,6.85


Format tersebut memudahkan proses penyimpanan maupun analisis data eksperimen.

e. Membaca Sensor Suhu dan Sensor pH

Fungsi readTemperature() dan readPH() bertugas membaca nilai analog dari sensor, kemudian mengubahnya menjadi nilai yang lebih mudah dipahami. Pada contoh ini digunakan fungsi map() sebagai simulasi konversi nilai ADC menjadi suhu dan nilai pH. Dalam proyek sebenarnya, bagian ini dapat diganti dengan rumus kalibrasi sesuai karakteristik sensor yang digunakan.

Teknik Integrasi Lanjutan

Setelah memahami cara menggabungkan beberapa antarmuka web dalam satu proyek, langkah berikutnya adalah membuat seluruh halaman tersebut saling berkomunikasi dan selalu menampilkan informasi yang sama. DIYables ESP32 WebApps menyediakan mekanisme yang memungkinkan sinkronisasi data secara real-time sehingga perubahan pada satu antarmuka dapat langsung diketahui oleh antarmuka lainnya.

1. Sinkronisasi Status Antar Antarmuka

Pada proyek yang memiliki banyak halaman web, sinkronisasi data merupakan hal yang sangat penting. Tanpa sinkronisasi, informasi yang ditampilkan pada setiap halaman dapat berbeda meskipun berasal dari perangkat yang sama. Contoh berikut digunakan untuk memperbarui seluruh status antarmuka.

 

void synchronizeAllStates() {


  // Ensure all interfaces show current state

  webSliderPage.sendToWebSlider(

      currentSlider1,

      currentSlider2);


  webJoystickPage.sendToWebJoystick(

      currentJoystickX,

      currentJoystickY);


  // Update all pin states

  for (int pin = 0; pin <= 13; pin++) {


    if (webDigitalPinsPage.isPinEnabled(pin)) {


      webDigitalPinsPage.updatePinState(

          pin,

          pinStates[pin]);

    }

  }


  Serial.println("All interface states synchronized");

}

 

Penjelasan Program

Fungsi synchronizeAllStates() bertugas memperbarui seluruh informasi yang ditampilkan pada halaman web. Beberapa data yang disinkronkan meliputi:

- Nilai Web Slider.

- Posisi Virtual Joystick.

Status seluruh pin digital yang telah diaktifkan.

Dengan demikian, apabila browser dibuka dari beberapa perangkat sekaligus, seluruh pengguna akan melihat kondisi sistem yang sama secara real-time.

2. Komunikasi Lintas Antarmuka (Cross Interface Communication)

Salah satu fitur menarik dari DIYables ESP32 WebApps adalah kemampuan setiap halaman web untuk saling memengaruhi. Artinya, perubahan yang terjadi pada satu antarmuka dapat memicu aksi pada antarmuka lainnya. Contohnya ditunjukkan pada program berikut:

 

void setupCrossInterfaceCommunication() {


  // Joystick affects slider limits

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


    float distance = sqrt(x * x + y * y);


    if (distance > 50) {


      int maxValue =

      map(distance, 50, 100, 255, 128);


      // Dynamic slider limit

    }

  });


  // Pin state affects chat

  webDigitalPinsPage.onPinWrite([](int pin, int state) {


    if (pin == 2 && state == HIGH) {


      chatPage.sendToChat(

      "📢 System armed - additional commands available");


    } else if (pin == 2 && state == LOW) {


      chatPage.sendToChat(

      "📢 System disarmed - limited commands only");

    }

  });

}

 

Penjelasan Program

Pada contoh di atas terdapat dua bentuk komunikasi lintas antarmuka, yaitu:

a. Joystick Memengaruhi Slider

Posisi joystick dihitung menggunakan rumus jarak terhadap titik tengah (distance from center). Jika joystick digerakkan terlalu jauh, program dapat membatasi nilai maksimum slider. Teknik ini berguna untuk meningkatkan keamanan sistem, misalnya membatasi kecepatan motor saat robot sedang berbelok tajam.

b. Status Pin Memengaruhi Halaman Chat

Contoh berikut menunjukkan bahwa perubahan status Digital Pins juga dapat memicu pengiriman pesan ke halaman Chat. Ketika GPIO 2 berubah menjadi HIGH, pengguna akan menerima notifikasi bahwa sistem telah aktif (armed). Sebaliknya, ketika pin berubah menjadi LOW, sistem akan mengirimkan pemberitahuan bahwa mode keamanan dinonaktifkan (disarmed). Konsep komunikasi lintas antarmuka seperti ini memungkinkan setiap halaman web saling bertukar informasi secara otomatis tanpa perlu interaksi langsung dari pengguna. Dengan memanfaatkan teknik sinkronisasi status dan komunikasi lintas antarmuka, Anda dapat membangun aplikasi Internet of Things (IoT) yang lebih kompleks, responsif, dan mudah dikembangkan. Seluruh antarmuka web akan bekerja sebagai satu kesatuan sehingga kontrol, monitoring, dan notifikasi dapat berjalan secara bersamaan dalam satu sistem berbasis ESP32.

Penyelesaian Masalah (Troubleshooting)

Saat mengembangkan aplikasi menggunakan DIYables ESP32 WebApps Library, terkadang Anda akan menemui beberapa kendala, mulai dari halaman web yang tidak dapat dibuka hingga masalah penggunaan memori pada ESP32. Bagian berikut membahas beberapa masalah yang paling sering terjadi beserta solusi yang dapat diterapkan.

1. Masalah yang Sering Terjadi

a. Beberapa Antarmuka Web Tidak Dapat Dimuat

Jika salah satu halaman web, seperti Chat, Web Slider, atau Web Joystick, tidak dapat dibuka melalui browser, penyebabnya biasanya berasal dari konfigurasi server atau proses inisialisasi aplikasi. Beberapa hal yang perlu diperiksa antara lain:

- Pastikan seluruh aplikasi web telah didaftarkan ke server pada fungsi setup().

- Periksa apakah koneksi WebSocket berhasil dibuat melalui Developer Console pada browser.

Pastikan memori ESP32 masih mencukupi untuk menjalankan seluruh antarmuka web secara bersamaan.

Jika salah satu aplikasi belum ditambahkan ke server, halaman tersebut tidak akan dapat diakses meskipun URL yang digunakan sudah benar.

b. Status Antar Antarmuka Tidak Sinkron

Pada proyek yang memiliki beberapa halaman web, terkadang satu halaman menampilkan informasi yang berbeda dengan halaman lainnya. Masalah ini umumnya terjadi karena setiap halaman belum menggunakan sumber data yang sama. Untuk mengatasinya, lakukan beberapa langkah berikut:

- Gunakan variabel global sebagai tempat penyimpanan status sistem.

- Terapkan callback sinkronisasi agar setiap perubahan langsung diperbarui ke seluruh antarmuka.

Jalankan fungsi sinkronisasi setiap kali terjadi perubahan data penting.

Dengan cara tersebut, seluruh halaman web akan selalu menampilkan informasi yang konsisten.

c. Performa Menurun Saat Banyak Antarmuka Aktif

Semakin banyak halaman web yang dijalankan, semakin besar pula beban kerja ESP32. Akibatnya, respons sistem dapat menjadi lebih lambat, terutama ketika seluruh antarmuka melakukan pembaruan data secara bersamaan. Beberapa cara untuk meningkatkan performa adalah sebagai berikut:

- Kurangi frekuensi pembaruan pada halaman yang tidak memerlukan respons cepat.

- Kirim pembaruan hanya kepada antarmuka yang sedang aktif digunakan.

- Nonaktifkan aplikasi web yang tidak diperlukan pada proyek tertentu. 

Pendekatan ini dapat mengurangi beban pemrosesan sekaligus meningkatkan respons sistem secara keseluruhan.

d. Keterbatasan Memori

ESP32 memang memiliki kapasitas RAM yang cukup besar dibandingkan Arduino Uno, namun penggunaan beberapa antarmuka web secara bersamaan tetap dapat menghabiskan memori. Untuk menghindari masalah tersebut, Anda dapat melakukan beberapa langkah berikut:

- Pantau sisa memori menggunakan fungsi seperti freeMemory().

- Nonaktifkan fitur yang tidak digunakan.

- Sederhanakan fungsi callback agar penggunaan RAM lebih efisien.

Hindari penggunaan variabel global yang berlebihan.

Semakin sedikit objek dan proses yang berjalan, semakin stabil pula kinerja ESP32.

2. Strategi Debugging

Ketika terjadi kesalahan pada sistem, informasi kondisi ESP32 sangat membantu dalam proses pencarian sumber masalah. Contoh berikut digunakan untuk menampilkan status sistem melalui Serial Monitor.

 

void debugSystemState() {


  Serial.println("=== System State Debug ===");


  Serial.println("Free Memory: " +

                 String(freeMemory()) +

                 " bytes");


  Serial.println("Digital Pins:");


  for (int pin = 0; pin <= 13; pin++) {


    if (webDigitalPinsPage.isPinEnabled(pin)) {


      Serial.println(

        "  Pin " +

        String(pin) +

        ": " +

        String(pinStates[pin] ? "HIGH" : "LOW"));

    }

  }


  Serial.println("Sliders: " +

                 String(currentSlider1) +

                 ", " +

                 String(currentSlider2));


  Serial.println("Joystick: X=" +

                 String(currentJoystickX) +

                 ", Y=" +

                 String(currentJoystickY));


  Serial.println("========================");

}

 

Penjelasan Program

Fungsi debugSystemState() digunakan untuk menampilkan informasi penting mengenai kondisi sistem. Data yang ditampilkan meliputi:

- Sisa memori yang tersedia.

- Status seluruh pin digital.

- Nilai kedua slider.

- Posisi joystick. 

Informasi tersebut sangat membantu ketika aplikasi tidak berjalan sesuai harapan, karena pengembang dapat mengetahui kondisi ESP32 secara langsung melalui Serial Monitor.

Template Proyek yang Dapat Dikembangkan

Setelah memahami cara kerja setiap antarmuka web, Anda dapat menggunakannya sebagai dasar untuk membangun berbagai jenis proyek IoT. Berikut beberapa contoh implementasinya:

1. Template Sistem Kontrol Industri

Template ini cocok digunakan untuk sistem otomasi maupun mesin industri. Beberapa fitur yang dapat dimanfaatkan antara lain:

- Digital Pins untuk mengendalikan mesin atau aktuator.

- Web Slider untuk mengatur kecepatan motor maupun suhu proses.

- Virtual Joystick sebagai pengendali sistem pemindah posisi (positioning system).

- Chat Interface untuk menerima perintah operator maupun mengirimkan laporan status mesin.

Web Monitor untuk melakukan pencatatan data produksi secara real-time.

2. Template Laboratorium Pendidikan

Untuk kebutuhan pembelajaran maupun penelitian, seluruh antarmuka web dapat digabungkan menjadi sistem eksperimen berbasis IoT. Sebagai contoh:

- Slider digunakan untuk mengatur parameter eksperimen.

- Digital Pins mengendalikan berbagai peralatan laboratorium.

- Chat digunakan sebagai media komunikasi antara pengguna dan sistem.

- Web Monitor mencatat seluruh hasil pengukuran.

Sensor dipantau secara langsung melalui browser

Template ini sangat cocok digunakan sebagai media praktikum berbasis ESP32.

3. Template Smart Home

DIYables ESP32 WebApps juga dapat dikembangkan menjadi sistem Smart Home. Beberapa implementasi yang umum digunakan antara lain:

- Mengontrol lampu melalui Digital Pins.

- Mengatur tingkat kecerahan lampu atau kecepatan kipas menggunakan Slider.

- Memantau sensor keamanan seperti sensor pintu dan sensor gerak.

- Mengendalikan perangkat rumah melalui Chat Interface.

Menampilkan status seluruh perangkat pada Web Monitor.

Dengan satu halaman web, pengguna dapat mengendalikan berbagai perangkat rumah secara bersamaan.

4. Template Robotika

Pada bidang robotika, setiap antarmuka memiliki fungsi yang berbeda. Sebagai contoh:

- Virtual Joystick digunakan sebagai pengendali arah robot.

- Web Slider mengatur kecepatan motor maupun posisi servo.

- Digital Pins membaca sensor maupun mengendalikan aktuator.

- Chat Interface menerima perintah berbasis teks.

- Web Monitor menampilkan data telemetri dan informasi debugging secara real-time. 

Seluruh fitur tersebut dapat digabungkan menjadi sistem kendali robot berbasis web yang lengkap.

Optimasi Kinerja Sistem

Ketika aplikasi semakin kompleks, optimasi menjadi langkah penting agar ESP32 tetap bekerja secara stabil. Berikut beberapa teknik yang dapat diterapkan:

1. Mengoptimalkan Penggunaan Memori

Jika proyek tidak memerlukan seluruh antarmuka web, sebaiknya hanya aktifkan halaman yang benar-benar digunakan. Contohnya sebagai berikut:

 

void optimizeMemoryUsage() {


  // Disable unused interfaces to save memory


  // server.addApp(&homePage);            // Tetap digunakan

  // server.addApp(&webMonitorPage);      // Untuk debugging


  // server.addApp(&chatPage);            // Aktifkan bila diperlukan

  // server.addApp(&webDigitalPinsPage);  // Sesuai kebutuhan

  // server.addApp(&webSliderPage);       // Sesuai kebutuhan

  // server.addApp(&webJoystickPage);     // Sesuai kebutuhan

}

 

Penjelasan Program

Kode di atas menunjukkan bahwa setiap aplikasi web dapat diaktifkan atau dinonaktifkan sesuai kebutuhan proyek. Sebagai contoh, apabila proyek hanya membutuhkan Digital Pins dan Web Monitor, maka antarmuka Chat maupun Web Joystick dapat dinonaktifkan untuk menghemat penggunaan memori. Semakin sedikit antarmuka yang aktif, semakin ringan beban kerja ESP32.

2. Mengatur Frekuensi Pembaruan Data

Tidak semua data harus diperbarui dengan kecepatan yang sama. Sebagai contoh, data joystick memerlukan respons yang sangat cepat, sedangkan data sensor suhu cukup diperbarui setiap beberapa detik. Contoh implementasinya sebagai berikut:

 

void controlUpdateFrequency() {


  static unsigned long lastSlowUpdate = 0;

  static unsigned long lastFastUpdate = 0;


  // Pembaruan cepat (10 ms)

  if (millis() - lastFastUpdate > 10) {


    // Update joystick

    // Emergency control


    lastFastUpdate = millis();

  }


  // Pembaruan lambat (1000 ms)

  if (millis() - lastSlowUpdate > 1000) {


    // Update sensor

    // Update status sistem


    lastSlowUpdate = millis();

  }

}

 

Penjelasan Program

Pada contoh di atas, proses pembaruan dibagi menjadi dua kelompok berdasarkan tingkat prioritas.

- Pembaruan cepat (10 ms) digunakan untuk fungsi yang membutuhkan respons tinggi, seperti Virtual Joystick, tombol Emergency Stop, atau kendali motor.

Pembaruan lambat (1000 ms) digunakan untuk membaca sensor, memperbarui status perangkat, maupun mengirimkan informasi monitoring.

Teknik ini membuat penggunaan prosesor menjadi lebih efisien karena ESP32 tidak perlu memperbarui seluruh data secara bersamaan.

 

Dengan menerapkan optimasi memori, sinkronisasi data, serta pengaturan frekuensi pembaruan, aplikasi berbasis DIYables ESP32 WebApps Library akan memiliki performa yang lebih stabil, responsif, dan siap dikembangkan menjadi sistem Internet of Things (IoT) berskala lebih besar.

 

Baca juga: DIYables ESP32 Web Analog Gauge - Membuat Tampilan Gauge Analog Real-Time 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