Project 7: ESP32 Bluetooth Communication
Bismillaahirrahmaanirrahiim..
Hello sobat setia medium-ers semua!! Gimana kabarnya?? Semoga sehat selalu yaa..
Menurut pepatah, tak kenal maka?? ya kenalan dongg.. Sebelumnya kita kenalan dulu ya guys. Kenalin namaku Muhammad Raflie Dwi Putra yang bisa dipanggil Raflie dengan NIM 18219035. Aku sedang berkuliah semester 4 di prodi Sistem dan Teknologi Informasi (STI) Institut Teknologi Bandung.
Espressif, menghadirkan ESP32 dengan dilengkapi konektivitas beragam, tidak hanya Wi-Fi, namun juga Bluetooth (klasik) dan juga Bluetooth Low Energy (BLE). Dalam tulisan kali ini, kita akan mengulas bagaimana menggunakan Bluetooth (klasik) dan menghubungkannya dengan smartphone Android.
Data serial dari smartphone (yang sebelumnya telah di-pairing dengan bluetooth dengan ESP32), dikirim menggunakan aplikasi terminal. Begitu data diterima, ESP32 akan memproses data tersebut dan memutuskan apakah GPIO yang terhubung pada LED berada di logika 1 atau 0.
KOMPONEN DAN ALAT YANG DIBUTUHKAN
Tentunya, untuk menjalankan program eksperimen Bluetooth (klasik) in ESP32 with Smartphone yang telah disebutkan sebelumnya, membutuhkan beberapa komponen atau alat yang perlu disiapkan, yaitu:
- ESP32 DEVKIT V1 DOIT Board, sebagai komponen utama untuk dimasukkan program dari Arduino IDE.

- Kabel Micro USB (type A), sebagai kabel penghubung ESP32 Board dengan PC/Laptop untuk memasukkan program.

- Perangkat PC (Laptop / Komputer), tentunya yang sudah terinstall aplikasi Arduino IDE dan paket board ESP-32 di dalamnya.
(Catatan: Jika belum disiapkan, bisa diikuti langkah-langkah pada link ini.)

- Breadboard 830 points, sebagai tempat meletakkan ESP32 Board dan menghubungkan berbagai komponen dengan bantuan kabel jumper wires, baik secara seri maupun parallel.

- Jumper Wires Male to Female and Jumper Wires Male to Male, sebagai penghubung antar komponen melalui breadboard.

- 3x Lampu LED 5 mm, sebagai penerima output dari program Bluetooth ESP32 yang dengan respon menyala atau mati.

- 3x Resistor 330 Ohm, sebagai pembagi tegangan pada rangkaian.

- Smartphone with Bluetooth, dengan sebuah aplikasi terminal misal bernama “Serial Bluetooth Terminal”. Dapat di-install melalui Play Store atau dari link berikut.
https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal

DIAGRAM SKEMA RANGKAIAN

- Lakukan pairing GPIO 5, GPIO 17, dan GPIO 16 pada ESP32 dengan 3 buah LED
- Jangan lupa masing-masing kutub negatif (kaki pendek) LED dihubungkan dengan resistor 330k ke arah kutub negatif dari Breadboard (dekat garis biru)
- Hubungkan kutub negatif Breadboard dengan pin GND pada ESP32.

KODE PROGRAM dan PENJELASANNYA
1. Pairing Bluetooth Test
/* Untuk program ini, hanya diperlukan wiring dengan kabel micro USB type A antara ESP32 dengan Laptop/PC (Catu daya) */
#include "BluetoothSerial.h"#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endifBluetoothSerial SerialBT;void setup() {
Serial.begin(115200);
SerialBT.begin("ESP32test"); //Bluetooth device name
Serial.println("The device started, now you can pair it with bluetooth!");
}void loop() {
if (Serial.available()) {
SerialBT.write(Serial.read());
}
if (SerialBT.available()) {
Serial.write(SerialBT.read());
}
delay(20);
}
2. Control 3 LED with Smartphone via Bluetooth
/* Rangkaian wiring sesuai gambar bagian Diagram Skema */
#include "BluetoothSerial.h"BluetoothSerial ESP_BT; //Object for Bluetoothint incoming;
const int GREENledPin = 16; // 16 sebagai to GPIO16
const int YELLOWledPin = 17; // 17 sebagai to GPIO17
const int REDledPin = 5; // 5 sebagai to GPIO5void setup() {
Serial.begin(9600); // Start Serial monitor in 9600
ESP_BT.begin("ESP32_LED_Control"); // Name of your Bluetooth Signal
Serial.println("Bluetooth Device is Ready to Pair");// Specify that LED pin is output
pinMode (GREENledPin, OUTPUT);
pinMode (YELLOWledPin, OUTPUT);
pinMode (REDledPin, OUTPUT);
}void loop() {
if (ESP_BT.available()) // Check if we receive anything from Bluetooth
{
incoming = ESP_BT.read(); // Read what we receive
Serial.print("Received:"); Serial.println(incoming); if (incoming == 82)
{
digitalWrite(REDledPin, HIGH);
ESP_BT.println("Red LED turned ON");
}
if (incoming == 89)
{
digitalWrite(YELLOWledPin, HIGH);
ESP_BT.println("Yellow LED turned ON");
}
if (incoming == 71)
{
digitalWrite(GREENledPin, HIGH);
ESP_BT.println("Green LED turned ON");
}
if (incoming == 49)
{
digitalWrite(REDledPin, LOW);
ESP_BT.println("Red LED turned OFF");
}
if (incoming == 50)
{
digitalWrite(YELLOWledPin, LOW);
ESP_BT.println("Yellow LED turned OFF");
}
if (incoming == 51)
{
digitalWrite(GREENledPin, LOW);
ESP_BT.println("Green LED turned OFF");
}
}
delay(20);
}
Penjelasan Kode Program
Pada baris pertama,
#include "BluetoothSerial.h"
adalah deklarasi untuk memasukan library bluetooth yang nanti dapat dipergunakan dalam mengakses ESP32. Berikutnya di baris ke -3 dibuat object dari class BluetoothSerial
yang bernama ESP_BT
BluetoothSerial ESP_BT;
Kemudian pada baris 5–8, untuk integer incoming
digunakan sebagai variabel yang menyimpan nilai masukan dari terminal bluetooth Smartphone. Sedangkan untuk const int GREENledPin; YELLOWledPin; REDledPin
digunakan sebagai konstanta untuk mendeklarasikan wiring yang sesuai antara GPIO pada ESP32 dengan LED merah, kuning, dan hijau.
int incoming;
const int GREENledPin = 16; // 16 sebagai to GPIO16
const int YELLOWledPin = 17; // 17 sebagai to GPIO17
const int REDledPin = 5; // 5 sebagai to GPIO5
Setelah itu pada blok fungsi setup
. Dilakukan inisialisasi fungsi komunikasi serial dengan baud rate 9600, dan memberi nama sinyal Bluetooth dengan nama ESP32_LED_Control
. Nama ini yang nantinya ditemukan oleh smartphone saat perangkat pertama kali melakukan pairing.
Serial.begin(9600); // Start Serial monitor in 9600
ESP_BT.begin("ESP32_LED_Control"); // Name of your Bluetooth Signal
Serial.println("Bluetooth Device is Ready to Pair");
Pada baris selanjutnya, GPIO 5, GPIO 16, dan GPIO 17 pada ESP32 tersebut, dideklarasikan sebagai output.
// Specify that LED pin is output
pinMode (GREENledPin, OUTPUT);
pinMode (YELLOWledPin, OUTPUT);
pinMode (REDledPin, OUTPUT);
Didalam fungsi loop
tak terhingga, program akan memeriksa terlebih dahulu data yang masuk ke modul bluetooth. Jika ya, maka data dibaca dan disimpan pada variabel incoming. Nilai ini juga dikeluarkan pada Serial Monitor, sekadar untuk memastikan bahwa data yang dikirim sama dengan data yang diterima.
if (ESP_BT.available()) // Check if we receive anything from Bluetooth
{
incoming = ESP_BT.read(); // Read what we receive
Serial.print("Received:"); Serial.println(incoming);
Sampai sini, data yang diterima telah disimpan pada variabel incoming
. Sehingga kemudian dapat dibandingkan dengan nilai yang diinginkan agar melakukan action tertentu. Namun yang perlu diperhatikan adalah data yang dikirim dari bluetooth akan menjadi bentuk char
. Maka program arduino akan membaca nilai desimal dari karakter tersebut.
Dalam kasus ini misalnya, karakter R
memiliki nilai desimal 82 (untuk action turned ON Red LED), sedangkan karakter 1
memiliki nilai desimal 49 (untuk action turned OFF Red LED), dan seterusnya, sesuai keinginan kita.
Sobat bisa merujuk tabel ASCII seperti pada gambar berikut.

Di dalam program, nilai karakter ini dibandingkan, jika data yang diterima adalah karakter R
(desimal 82) maka program akan menyalakan Red LED dan juga mengirim pesan serial ke bluetooth. Begitupun jika data yang diterima adalah karakter 1
(desimal 49) maka program akan mematikan Red LED (memberikan logika 0) sembari mengirim pesan acknowledge ke bluetooth.
if (incoming == 82)
{
digitalWrite(REDledPin, HIGH);
ESP_BT.println("Red LED turned ON");
}
if (incoming == 89)
{
digitalWrite(YELLOWledPin, HIGH);
ESP_BT.println("Yellow LED turned ON");
}
if (incoming == 71)
{
digitalWrite(GREENledPin, HIGH);
ESP_BT.println("Green LED turned ON");
}
if (incoming == 49)
{
digitalWrite(REDledPin, LOW);
ESP_BT.println("Red LED turned OFF");
}
if (incoming == 50)
{
digitalWrite(YELLOWledPin, LOW);
ESP_BT.println("Yellow LED turned OFF");
}
if (incoming == 51)
{
digitalWrite(GREENledPin, LOW);
ESP_BT.println("Green LED turned OFF");
}
PROSES DAN HASIL PERCOBAAN
- Untuk langkah pertama, kita bisa melakukan proses wiring sesuai diagram skema di atas
- Kemudian masukkan kode program seperti contoh di atas ke dalam aplikasi Arduino IDE, namun bagian GPIO dan variabel masukan dari smartphone harus sesuai dengan wiring dan setting-an button di serial bluetooth terminal smartphone.
- Lalu, klik Verify, dan Upload kode program tersebut hingga selesai.
- Install dan Setting aplikasi bluetooth yang sudah disediakan di Play Store pada smartphone, contoh aplikasinya “Serial Bluetooth Terminal”. Kemudian lakukan pairing dengan ESP32, dengan cara:
- Nyalakan bluetooth pada Smartphone.
- (Jika ingin mudah) Bagian terbawah pada aplikasi ini dapat di-setting menjadi tombol-tombol pintasan untuk mempersingkat memasukan input, sesuai dengan kode program yang kita buat sebelumnya (di bagian incoming). Dengan cara hold tombol tersebut, kemudian atur nama tombol dan value-nya.

- Kemudian, untuk proses pairing device ESP32, klik Menu (Garis Tiga) → pilih Devices
- Lalu klik ikon settings, lalu pilih Pair new devices. Di sini akan muncul daftar Bluetooth devices available, termasuk devices ESP32test (untuk Program Bluetooth Test) atau ESP32_LED_Control (untuk Program Control LED). Kemudian pasangkan dengan devices tersebut.
- Kemudian, kembali ke aplikasi Serial Bluetooth Terminal. Jika icon ‘connected’ di bagian atas belum terhubung, maka klik icon tersebut. Akan tertulis status ‘Connected’.
- Pada program Bluetooth Test, kita dapat menguji dengan mencoba mengetik suatu pesan dan mengirimkannya. Jika berhasil terkirimkan, maka akan keluar pesan tersebut pada Serial Monitor baud rate 115200. Selanjutnya, dari Serial Monitor tersebut juga dapat kita kirim pesan kembali ke terminal bluetooth smartphone dan akan tampil juga pesannya di layar Serial Terminal Bluetooth kita.

Video Demo Program Bluetooth Test:
- Sedangkan pada program Control LED, kita dapat menguji dengan menekan beberapa tombol pintasan yang kita buat sebelumnya untuk menyalakan dan mematikan Red LED, Yellow LED, atau Green LED. Maka perintah tersebut akan direspon oleh ketiga LED tersebut sesuai instruksi perintah dari Serial Terminal Bluetooth pada smartphone dan akan muncul status perubahan LED tersebut di layar.

Video Demo Program Control LED with Bluetooth:
KESIMPULAN
Dari eksperimen yang telah dilakukan, ESP32 berhasil untuk menjalankan program Bluetooth Test dan Control LED Bluetooth dengan baik via aplikasi Serial Bluetooth Terminal pada smartphone sesuai dengan kode program yang dibuat pada aplikasi Arduino IDE. Harapannya, berbagai pengalaman dalam project ESP32 ini dapat dikembangkan lebih jauh lagi.
Walaupun pada beberapa eksperimen tertentu tidak langsung berhasil karena menemukan berbagai kendala. Namun, dengan adanya banyak kegagalan tersebut akan membuat kita mempunyai pengalaman lebih banyak pada project ini sehingga akan lebih lancar mengatasi problem-problem tersebut di masa yang akan datang.
Alhamdulillaah..
Sekian, terima kasih atas perhatiannya..
SELAMAT MENCOBA!!!