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

DIYables ESP32 WebChat merupakan salah satu contoh aplikasi dari library DIYables ESP32 WebApps yang memungkinkan ESP32 berkomunikasi secara interaktif dengan browser melalui antarmuka chat berbasis web. Berbeda dengan komunikasi menggunakan Serial Monitor, fitur ini memungkinkan pengguna mengirim dan menerima pesan langsung dari browser secara real-time menggunakan teknologi WebSocket. Contoh proyek ini sangat cocok untuk mempelajari komunikasi dua arah (bidirectional communication) antara browser dan ESP32. Setiap pesan yang dikirim dari browser akan diterima oleh ESP32, kemudian diproses sesuai logika program sebelum mengirimkan balasan kembali ke browser. Selain berfungsi sebagai media komunikasi, WebChat juga dapat digunakan untuk mengontrol perangkat keras, seperti menyalakan atau mematikan LED bawaan ESP32 melalui perintah teks yang dikirimkan dari browser.

Fitur DIYables ESP32 WebChat

Contoh WebChat memiliki beberapa fitur utama sebagai berikut:

- Chat real-time menggunakan WebSocket tanpa perlu melakukan refresh halaman.

- ESP32 dapat memberikan respons otomatis berdasarkan isi pesan yang diterima.

- Mengontrol LED bawaan ESP32 menggunakan perintah chat.

- Mengenali nama pengguna selama sesi percakapan berlangsung.

Menampilkan riwayat percakapan pada halaman browser.

- Antarmuka responsif sehingga dapat digunakan melalui komputer maupun smartphone.  

 

Baca juga: Library DIYables ESP32 WebServer - Membuat Web Server ESP32 dengan Dukungan WebSocket 

Perangkat Keras yang Dibutuhkan

Sebelum memulai, siapkan beberapa perangkat berikut:

- Modul ESP32 ESP-WROOM-32 Dev Board 38 Pin

Kabel USB

Cara Menjalankan Contoh WebChat DIYables ESP32

Ikuti langkah-langkah berikut untuk mencoba contoh program WebChat:

- Hubungkan board ESP32 ke komputer menggunakan kabel USB.

- Jalankan Arduino IDE.

- Pilih board ESP32 yang digunakan, misalnya ESP32 Dev Module, kemudian pilih Port COM yang sesuai.

- Klik ikon Library Manager pada panel sebelah kiri Arduino IDE.

- Cari library DIYables ESP32 WebApps, kemudian pilih DIYables ESP32 WebApps Library by DIYables.

- Klik Install untuk menginstal library tersebut.



- Selama proses instalasi, Arduino IDE akan meminta pemasangan beberapa library pendukung (dependencies).

- Klik Install All agar seluruh library yang dibutuhkan ikut terpasang.

- Setelah proses instalasi selesai, buka menu File → Examples → DIYables ESP32 WebApps → WebChat.

Konfigurasi Koneksi WiFi

Sebelum program di-upload ke ESP32, ubah terlebih dahulu nama jaringan WiFi (SSID) dan password sesuai dengan jaringan yang akan digunakan. 

- Ubah bagian berikut pada program:

 

const char WIFI_SSID[] = "YOUR_WIFI_NETWORK";

const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";

 

- Ganti YOUR_WIFI_NETWORK dengan nama jaringan WiFi Anda.

Ganti YOUR_WIFI_PASSWORD dengan password WiFi yang benar.

Pastikan komputer atau smartphone yang digunakan untuk mengakses WebChat terhubung ke jaringan WiFi yang sama dengan ESP32.

Upload Program ke ESP32

Setelah konfigurasi selesai, lakukan proses upload program ke board ESP32:

- Klik tombol Upload pada Arduino IDE.

- Tunggu hingga proses kompilasi dan upload selesai tanpa error.

- Setelah upload berhasil, buka Serial Monitor. 

Pada Serial Monitor, ESP32 akan menampilkan informasi proses koneksi ke jaringan WiFi beserta alamat IP yang diperoleh.



- Jika tidak ada informasi yang muncul pada Serial Monitor, tekan tombol EN/Reset pada board ESP32 untuk melakukan restart.

- Catat alamat IP yang ditampilkan oleh ESP32.

- Masukkan alamat IP tersebut ke address bar browser pada komputer atau smartphone.

Jika koneksi berhasil, browser akan menampilkan halaman utama (Home Page) dari DIYables WebApps.



Klik menu Chat untuk membuka halaman WebChat.



- Selain melalui halaman utama, Anda juga dapat membuka WebChat secara langsung menggunakan alamat http://10.245.50.32/chat.

Setelah halaman WebChat terbuka, Anda dapat mulai berinteraksi dengan ESP32 melalui browser. Cobalah mengirim beberapa perintah seperti hello, help, led on, led off, atau status untuk melihat bagaimana ESP32 menerima, memproses, dan memberikan respons secara langsung melalui antarmuka chat.

Cara Menggunakan DIYables ESP32 WebChat

Setelah halaman WebChat berhasil dibuka pada browser, Anda dapat langsung berkomunikasi dengan ESP32 melalui kotak chat yang tersedia. Setiap pesan yang dikirim akan diterima oleh ESP32 melalui WebSocket, kemudian diproses sesuai logika program sebelum mengirimkan balasan kembali ke browser.

1. Memulai Percakapan

Ikuti langkah-langkah berikut untuk mulai menggunakan WebChat:

- Buka halaman WebChat pada browser.

- Klik kolom chat dan ketik pesan pertama Anda.

- Tekan Enter atau tombol Send untuk mengirim pesan.

ESP32 akan memproses pesan tersebut dan memberikan respons sesuai perintah yang dikenali.

2. Perintah Chat yang Didukung

Program contoh WebChat telah dilengkapi beberapa perintah dasar yang dapat dikenali oleh ESP32.

a. Perintah Kontrol LED

Perintah berikut digunakan untuk mengontrol LED bawaan ESP32.

- led on atau light on → Menyalakan LED internal ESP32.

led off atau light off → Mematikan LED internal ESP32.

b. Perintah Informasi

Beberapa perintah berikut digunakan untuk memperoleh informasi dari ESP32.

- hello atau hi → Menampilkan pesan sambutan.

- help → Menampilkan daftar perintah yang tersedia.

- status → Menampilkan status LED dan lama waktu ESP32 aktif (uptime).

- time → Menampilkan lama waktu ESP32 telah berjalan sejak dinyalakan. 

c. Perintah Percakapan

Selain perintah khusus, ESP32 juga akan memberikan respons otomatis terhadap pesan yang tidak dikenali. Respons tersebut diambil secara bergantian dari daftar kalimat yang telah ditentukan pada program sehingga percakapan terasa lebih interaktif.

Mengembangkan WebChat Sesuai Kebutuhan

Contoh program yang disediakan DIYables hanyalah implementasi dasar. Anda dapat mengembangkannya menjadi sebuah asisten interaktif yang mampu mengendalikan berbagai perangkat keras maupun membaca data dari sensor. Karena seluruh logika percakapan diproses langsung oleh ESP32, Anda bebas menambahkan perintah baru sesuai kebutuhan proyek.

Struktur Program WebChat

Secara umum, program WebChat terdiri atas beberapa bagian utama:

1. WebApp Server

Bagian ini bertugas menjalankan web server, menerima koneksi HTTP, serta mengelola komunikasi WebSocket antara browser dan ESP32.

2. WebChat Page

Komponen ini menyediakan antarmuka chat yang ditampilkan pada browser sehingga pengguna dapat mengirim dan menerima pesan secara langsung.

3. Callback Pemrosesan Pesan

Setiap pesan yang dikirim dari browser akan diterima melalui fungsi callback berikut:

 

// Handle incoming chat messages

void handleChatMessage(String message, String clientId) {

  // Process message and generate response

}


Pada bagian inilah seluruh logika aplikasi biasanya ditambahkan, misalnya membaca isi pesan, mencocokkan perintah, mengontrol perangkat keras, atau membaca sensor.

4. Mengirim Respons ke Browser

Setelah pesan diproses, ESP32 akan mengirimkan balasan menggunakan fungsi berikut:

 

// Send message to web interface

void sendChatResponse(String response, String clientId) {

  // Send response via WebSocket

}


Melalui mekanisme WebSocket, respons dapat diterima browser secara real-time tanpa perlu melakukan refresh halaman.

Menambahkan Perintah Chat Baru

Salah satu kelebihan WebChat adalah kemudahan dalam menambahkan perintah baru.

Sebagai contoh, Anda dapat menambahkan kondisi berikut pada proses pemeriksaan pesan.

 

if (message.indexOf("your_command") >= 0) {

  response = "Your custom response";

  // Add your custom action here

}


Setiap kali pengguna mengirimkan teks your_command, ESP32 akan menjalankan aksi yang telah Anda tentukan.

Ide Pengembangan WebChat

Berikut beberapa ide yang dapat diterapkan untuk memperluas kemampuan WebChat.

1. Mengubah Respons ESP32

Anda dapat mengubah isi pesan balasan sehingga ESP32 memiliki gaya komunikasi yang berbeda.

 

String greetings[] = {

  "Hello! How can I help you today?",

  "Hi there! Ready to chat?",

  "Greetings! What's on your mind?"

};


Anda juga dapat menambahkan lebih banyak variasi respons agar percakapan terasa lebih alami.

2. Menambahkan Kontrol Perangkat Keras

Selain LED, WebChat juga dapat digunakan untuk mengendalikan berbagai perangkat lain. Sebagai contoh, menggerakkan servo.

 

// Control servo motor

if (message.indexOf("move servo") >= 0) {

  servo.write(90);

  response = "Servo moved to 90 degrees!";

}


Contoh lain adalah membaca data sensor.

 

// Read sensor data

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

  float temp = getTemperature();

  response = "Current temperature: " + String(temp) + "°C";

}


Konsep ini dapat dikembangkan untuk berbagai sensor seperti sensor suhu, kelembapan, cahaya, ultrasonik, gas, maupun sensor lainnya.

3. Mengubah Tampilan Antarmuka

Apabila ingin mengubah tampilan WebChat, Anda dapat memodifikasi file CSS pada library. Beberapa bagian yang dapat disesuaikan antara lain:

- Warna latar belakang.

- Jenis dan ukuran font.

- Tata letak halaman.

- Ukuran kotak chat.

- Warna tombol dan ikon. 

Penyelesaian Masalah (Troubleshooting)

Berikut beberapa masalah yang sering ditemui saat menggunakan WebChat beserta solusinya.

a. ESP32 Tidak Merespons Pesan

- Periksa Serial Monitor untuk mengetahui apakah terdapat pesan error.

- Pastikan koneksi WebSocket berhasil dibuat.

- Refresh halaman browser kemudian coba kembali. 

b. ESP32 Gagal Terhubung ke WiFi

- Periksa kembali SSID dan password WiFi.

- Gunakan jaringan WiFi 2.4 GHz karena sebagian besar board ESP32 belum mendukung jaringan 5 GHz.

Pastikan sinyal WiFi cukup kuat.

c. Halaman WebChat Tidak Dapat Diakses

- Pastikan alamat IP ESP32 sudah benar.

- Periksa apakah ESP32 masih terhubung ke jaringan WiFi.

- Cobalah membuka halaman utama terlebih dahulu menggunakan alamat http://[IP_ADDRESS]

Jika halaman utama berhasil dibuka, lanjutkan dengan membuka halaman /chat.

d. LED Tidak Merespons Perintah

- Pastikan board yang digunakan memiliki LED bawaan.

- Periksa kembali penulisan perintah seperti led on atau led off.

Gunakan Serial Monitor untuk memastikan pesan berhasil diterima oleh ESP32.

Tips Debugging

Selama proses pengembangan, aktifkan pesan debug pada Serial Monitor agar lebih mudah mengetahui alur program. Tambahkan baris berikut pada fungsi setup().

 

Serial.println("Debug mode enabled");


Melalui Serial Monitor, Anda dapat memantau beberapa informasi penting seperti berikut:

- Pesan yang diterima dari browser.

- Hasil proses pencocokan perintah.

- Respons yang dikirim kembali ke browser.

Status perangkat keras yang sedang dikendalikan.

Fitur Lanjutan yang Dapat Dikembangkan

Contoh WebChat masih dapat dikembangkan menjadi aplikasi IoT yang lebih kompleks.

1. Mendukung Banyak Pengguna

WebChat dapat dikembangkan agar mampu melayani beberapa pengguna secara bersamaan.

- Setiap pengguna memiliki sesi komunikasi sendiri.

- ESP32 dapat membedakan identitas setiap client.

Pesan dapat dikirim ke seluruh client (broadcast) maupun hanya ke client tertentu.

2. Menyimpan Riwayat Percakapan

Riwayat chat juga dapat disimpan menggunakan EEPROM atau media penyimpanan lainnya.

 

#include <EEPROM.h>


void saveMessage(String message) {

  // Save to EEPROM for persistence

}


3. Integrasi dengan Sensor

WebChat juga dapat digunakan sebagai antarmuka untuk membaca data sensor secara langsung melalui browser. Sebagai contoh:

 

// Temperature sensor

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

  float temp = analogRead(A0) * 0.1; // Example conversion

  response = "Temperature: " + String(temp) + "°C";

}


Dengan pendekatan ini, browser tidak hanya berfungsi sebagai media chat, tetapi juga sebagai dashboard sederhana untuk memantau kondisi perangkat IoT.

Kode Lengkap DIYables ESP32 WebChat

Berikut merupakan kode lengkap implementasi DIYables ESP32 WebChat. Anda dapat langsung mengunggah program berikut ke board ESP32, kemudian mengembangkannya lebih lanjut sesuai kebutuhan proyek IoT yang sedang dibuat.

 

/*

 * DIYables WebApp Library - WebChat Example

 * 

 * This example demonstrates the WebChat feature:

 * - Interactive chat interface

 * - Intelligent ESP32 responses

 * - Built-in LED control via chat commands

 * 

 * Hardware: ESP32 Boards

 * 

 * Setup:

 * 1. Update WiFi credentials below

 * 2. Upload the sketch to your Arduino

 * 3. Open Serial Monitor to see the IP address

 * 4. Navigate to http://[IP_ADDRESS]/chat

 */


#include <DIYables_ESP32_Platform.h>

#include <DIYablesWebApps.h>


// WiFi credentials - UPDATE THESE WITH YOUR NETWORK

const char WIFI_SSID[] = "YOUR_WIFI_SSID";

const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";


// Create WebApp server and page instances

ESP32ServerFactory serverFactory;

DIYablesWebAppServer webAppsServer(serverFactory, 80, 81);

DIYablesHomePage homePage;

DIYablesWebChatPage chatPage;


// Chat variables

String userName = "";

int chatCount = 0;


void setup() {

  Serial.begin(9600);

  delay(1000);


  Serial.println("DIYables ESP32 WebApp - WebChat Example");


  // Add only home and webchat pages

  webAppsServer.addApp(&homePage);

  webAppsServer.addApp(&chatPage);


  // Optional: Add 404 page for better user experience (local object)

  webAppsServer.setNotFoundPage(DIYablesNotFoundPage());


  // Initialize LED for chat commands

  pinMode(LED_BUILTIN, OUTPUT);


  // Start the WebApp server

  if (!webAppsServer.begin(WIFI_SSID, WIFI_PASSWORD)) {

    while (1) {

      Serial.println("Failed to start WebApp server!");

      delay(1000);

    }

  }


  // Set up chat callback

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

    chatCount++;

    Serial.println("Chat message #" + String(chatCount) + ": " + message);


    String response = "";

    String lowerMessage = message;

    lowerMessage.toLowerCase();


    // Process chat commands

    if (lowerMessage.indexOf("hello") >= 0 || lowerMessage.indexOf("hi") >= 0) {

      response = "Hello! I'm your ESP32 assistant. Try saying 'led on' or 'led off' to control the LED!";

      chatPage.sendToChat(response);

      return;

    }


    if (lowerMessage.indexOf("led on") >= 0 || lowerMessage.indexOf("light on") >= 0) {

      digitalWrite(LED_BUILTIN, HIGH);

      response = "LED is now ON! ✨";

      chatPage.sendToChat(response);

      return;

    }


    if (lowerMessage.indexOf("led off") >= 0 || lowerMessage.indexOf("light off") >= 0) {

      digitalWrite(LED_BUILTIN, LOW);

      response = "LED is now OFF! 💡";

      chatPage.sendToChat(response);

      return;

    }


    if (lowerMessage.indexOf("status") >= 0) {

      String ledStatus = digitalRead(LED_BUILTIN) ? "ON" : "OFF";

      response = "Arduino Status: LED is " + ledStatus + ", Uptime: " + String(millis() / 1000) + " seconds";

      chatPage.sendToChat(response);

      return;

    }


    if (lowerMessage.indexOf("help") >= 0) {

      response = "Available commands: 'led on', 'led off', 'status', 'help'. Just chat with me!";

      chatPage.sendToChat(response);

      return;

    }


    if (lowerMessage.indexOf("time") >= 0) {

      response = "Arduino has been running for " + String(millis() / 1000) + " seconds.";

      chatPage.sendToChat(response);

      return;

    }


    if (lowerMessage.indexOf("name") >= 0) {

      response = "I'm your ESP32! What's your name?";

      chatPage.sendToChat(response);

      return;

    }


    // General responses

    String responses[] = {

      "That's interesting! Tell me more.",

      "I understand! As an Arduino, I love processing your messages.",

      "Cool! I'm here and ready to help.",

      "Thanks for chatting with me! Try 'led on' to see something happen.",

      "I'm just an Arduino, but I enjoy our conversation!"

    };

    response = responses[chatCount % 5];

    chatPage.sendToChat(response);

  });


  // Send welcome message

  chatPage.sendToChat("Arduino Chat Bot is online! 🤖");

  chatPage.sendToChat("Say 'hello' or 'help' to get started!");

}


void loop() {

  // Handle WebApp server communications

  webAppsServer.loop();


  // Add your main application code here


  delay(10);

}

 

Baca juga: Library DIYables ESP32 WebApps - Membangun Aplikasi Web Interaktif untuk ESP32 dengan Mudah


 

 

 

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

Posting Komentar

0 Komentar