ESP32 Bluetooth Classic dengan Arduino IDE

Tujuan
- Memahami cara mengatur dan menggunakan ESP32 untuk komunikasi Bluetooth Classic.
- Mampu mengirim dan menerima data menggunakan Bluetooth.
Alat dan Bahan
- Modul ESP32
- Kabel USB untuk koneksi ke komputer
- Arduino IDE (pastikan sudah terinstal)
- Smartphone atau perangkat lain yang mendukung Bluetooth

Langkah-langkah
- Persiapan Lingkungan
- Install Arduino IDE jika belum terpasang.
- Tambahkan dukungan untuk ESP32 di Arduino IDE:
- Buka Arduino IDE, pergi ke File > Preferences.
- Tambahkan URL berikut di bagian “Additional Board Manager URLs”:
https://espressif.github.io/arduino-esp32/package_esp32_index.json - Pergi ke Tools > Board > Board Manager, cari “ESP32” dan instal.
- Pilih Board ESP32
- Pilih board yang sesuai dengan ESP32 Anda:
Tools > Board > ESP32 Dev Module (atau board lain yang sesuai).
- Pilih board yang sesuai dengan ESP32 Anda:
- Koneksi ESP32
- Hubungkan ESP32 ke komputer menggunakan kabel USB.
- Contoh Kode
- Salin dan tempel kode berikut ke dalam Arduino IDE:
#include "BluetoothSerial.h"
BluetoothSerial SerialBT;
void setup() {
Serial.begin(115200);
SerialBT.begin("ESP32_BT"); // Nama perangkat Bluetooth
Serial.println("Perangkat Bluetooth siap untuk dipasangkan");
}
void loop() {
if (SerialBT.available()) {
//Serial.write(SerialBT.read());
char incomingChar = SerialBT.read();
Serial.print("Diterima: ");
Serial.println(incomingChar);
}
if (Serial.available()) {
char outgoingChar = Serial.read();
SerialBT.print(outgoingChar);
Serial.print("Terkirim: ");
Serial.println(outgoingChar);
}
delay(20);
}- Contoh Code Aplikasi
#include "BluetoothSerial.h"
#include "DHT.h"
#define DHTPIN 2 // Pin data DHT11
#define DHTTYPE DHT11 // DHT11 digunakan
DHT dht(DHTPIN, DHTTYPE);
// Check if Bluetooth configs are enabled
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
// Bluetooth Serial object
BluetoothSerial SerialBT;
// GPIO where LED is connected to
const int ledPin = 25;
// Handle received and sent messages
String message = "";
char incomingChar;
String temperatureString = "";
// Timer: auxiliar variables
unsigned long previousMillis = 0; // Stores last time temperature was published
const long interval = 10000; // interval at which to publish sensor readings
void setup() {
dht.begin();
pinMode(ledPin, OUTPUT);
Serial.begin(115200);
// Bluetooth device name
SerialBT.begin("ESP32");
Serial.println("The device started, now you can pair it with bluetooth!");
}
void loop() {
unsigned long currentMillis = millis();
// Send temperature & humadity readings
if (currentMillis - previousMillis >= interval){
previousMillis = currentMillis;
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
temperatureString = String(temperature) + "C " + String(humidity) + "%";
SerialBT.println(temperatureString);
}
// Read received messages (LED control command)
if (SerialBT.available()){
char incomingChar = SerialBT.read();
if (incomingChar != '\n'){
message += String(incomingChar);
}
else{
message = "";
}
Serial.write(incomingChar);
}
// Check received message and control output accordingly
if (message =="led_on"){
digitalWrite(ledPin, HIGH);
}
else if (message =="led_off"){
digitalWrite(ledPin, LOW);
}
delay(20);
}- Upload Kode
- Klik tombol Upload di Arduino IDE untuk mengunggah kode ke ESP32.
- Uji Koneksi Bluetooth
- Setelah pengunggahan selesai, buka aplikasi Bluetooth di smartphone.
- Cari perangkat dengan nama “ESP32_BT” dan lakukan pairing.
- Gunakan aplikasi terminal Bluetooth (seperti “Bluetooth Terminal”) untuk mengirim dan menerima data.
- Verifikasi
- Kirim karakter dari aplikasi terminal ke ESP32.
- Periksa Serial Monitor di Arduino IDE untuk melihat data yang diterima.
Catatan
- Pastikan baud rate di Serial Monitor disesuaikan dengan pengaturan di kode (115200).
- Jika ada masalah dalam koneksi, pastikan perangkat Bluetooth di smartphone aktif dan dalam jangkauan.
Penutup
Dengan mengikuti langkah-langkah di atas, Anda seharusnya dapat berhasil mengatur dan menggunakan ESP32 untuk komunikasi Bluetooth Classic. Jika ada pertanyaan atau kesulitan, jangan ragu untuk bertanya!
Penting: Tidak Semua ESP32 Mendukung Bluetooth Classic
| Chip | Bluetooth Classic (BluetoothSerial) | BLE |
|---|---|---|
| ESP32 (original, mis. DevKit V1/WROOM-32) | Ya | Ya |
| ESP32-S3, ESP32-C3, ESP32-C6 | Tidak | Ya |
| ESP32-S2 | Tidak | Tidak |
Jika muncul error “Bluetooth is not enabled” atau BluetoothSerial.h tidak ditemukan saat memilih board S3/C3, penyebabnya adalah chip tersebut tidak memiliki Bluetooth Classic. Gunakan BLE sebagai gantinya.
Catatan untuk pengguna iPhone: iOS tidak mendukung profil Serial Port (SPP) Bluetooth Classic untuk aplikasi umum, sehingga ESP32 dengan BluetoothSerial tidak bisa dihubungkan dari iPhone. Gunakan HP Android (mis. aplikasi Serial Bluetooth Terminal) atau beralih ke BLE.
Bluetooth Classic vs BLE
| Aspek | Bluetooth Classic (SPP) | Bluetooth Low Energy (BLE) |
|---|---|---|
| Pola komunikasi | Seperti kabel serial (aliran data) | Layanan dan karakteristik (GATT) |
| Konsumsi daya | Lebih besar | Sangat rendah |
| Kemudahan untuk pemula | Sangat mudah (mirip Serial) | Perlu memahami UUID dan karakteristik |
| Dukungan HP | Android | Android dan iPhone |
Kode Aplikasi yang Lebih Andal
Banyak aplikasi terminal mengirim akhiran \r\n. Pada kode aplikasi di atas, karakter \r ikut masuk ke variabel message sehingga perintah “led_on” tidak pernah cocok. Versi berikut mengabaikan \r, memproses perintah hanya setelah Enter, dan membalas status ke HP:
#include "BluetoothSerial.h"
BluetoothSerial SerialBT;
const int ledPin = 25;
String pesan = "";
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
SerialBT.begin("ESP32_BT");
}
void prosesPerintah(String cmd) {
cmd.trim();
if (cmd == "led_on") { digitalWrite(ledPin, HIGH); SerialBT.println("LED ON"); }
else if (cmd == "led_off") { digitalWrite(ledPin, LOW); SerialBT.println("LED OFF"); }
else { SerialBT.println("Perintah tidak dikenal: " + cmd); }
}
void loop() {
while (SerialBT.available()) {
char c = SerialBT.read();
if (c == '\r') continue;
if (c == '\n') { prosesPerintah(pesan); pesan = ""; }
else pesan += c;
}
}Pada contoh aplikasi DHT11, pin data GPIO 2 adalah strapping pin dan terhubung ke LED onboard di banyak board. Jika board gagal boot atau upload, pindahkan DHT11 ke pin aman seperti GPIO 4.
Troubleshooting
| Gejala | Penyebab | Solusi |
|---|---|---|
| Nama ESP32_BT tidak muncul di HP | Board bukan ESP32 original, atau program belum berjalan | Cek chip, buka Serial Monitor untuk memastikan program jalan |
| Sudah pairing tetapi terminal tidak terhubung | Pairing saja tidak cukup | Di aplikasi terminal, pilih perangkat lalu tekan Connect |
| Perintah LED tidak berpengaruh | Akhiran baris berbeda (\r\n) | Gunakan kode yang diperbarui di atas |
| Sketch terlalu besar | Library Bluetooth memakan banyak flash | Tools → Partition Scheme → “Huge APP” |
Baca juga: ESP32: Panduan Komprehensif untuk Pemula hingga Ahli (IoT, Pemrograman, & Proyek) untuk memahami roadmap lengkap belajar ESP32 dari dasar hingga proyek IoT.




