Modul 9 Wireless Communication : Bluetooth
Percobaan 1 : BLUETOOTH CLASSIC
Modul 9 Wireless Communication : Bluetooth
Percobaan 1 : BLUETOOTH CLASSIC
Pendahuluan Percobaan ini bertujuan untuk mempraktikkan komunikasi Bluetooth Classic pada ESP32 menggunakan Arduino IDE. Dengan memanfaatkan Bluetooth, ESP32 dapat menerima perintah atau data dari perangkat lain (misalnya smartphone) tanpa kabel, yang membuka banyak peluang untuk proyek kendali jarak jauh, pengiriman data sensor, atau komunikasi sederhana antarperangkat.
Peralatan
- 1 buah ESP32 Dev Module
- Kabel USB
- Laptop dengan Arduino IDE
- Smartphone dengan aplikasi Bluetooth Serial (misalnya Serial Bluetooth Terminal di Android)

Rangkaian Tidak diperlukan rangkaian tambahan karena komunikasi dilakukan nirkabel (Bluetooth). Cukup hubungkan ESP32 ke laptop melalui kabel USB untuk pemrograman.
Kode Program
#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
#endif
BluetoothSerial SerialBT;
void setup() {
Serial.begin(115200);
SerialBT.begin("18223138"); //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);
}
Langkah-langkah Percobaan
- Upload kode di atas ke ESP32 melalui Arduino IDE
Kode berhasil dijalankan dan siap dihubungkan
- Buka aplikasi Bluetooth Serial Terminal di smartphone.
- Cari perangkat bernama “18223138” sesuai dengan kode yang dibuat di menu devices dan lakukan pairing.

Menghubungkan perangkat di aplikasi
- Setelah terhubung, kirimkan teks dari aplikasi di smartphone.

Pesan berhasil terkirim dari aplikasi di smartphone
- Buka Serial Monitor di Arduino IDE untuk melihat pesan yang diterima.

Pesan berhasil diterima
Hasil Percobaan
Pesan yang dikirim dari smartphone berhasil diterima oleh ESP32 dan ditampilkan di Serial Monitor. Ini membuktikan bahwa komunikasi melalui Bluetooth berjalan dengan baik.
Kesimpulan
ESP32 berhasil digunakan untuk komunikasi Bluetooth Classic dengan perangkat eksternal (misalnya smartphone), memungkinkan pengiriman dan penerimaan data dua arah secara sederhana menggunakan aplikasi terminal Bluetooth. Ini menunjukkan bahwa ESP32 siap dipakai untuk proyek kendali jarak jauh atau pertukaran data nirkabel antarperangkat dengan bandwidth sedang.
Percobaan 2 : BLE Communication (Server & Scanner)
Pendahuluan Percobaan ini bertujuan menguji komunikasi Bluetooth Low Energy (BLE) menggunakan dua laptop:
- Satu laptop digunakan untuk memprogram ESP32 sebagai BLE server (penyedia layanan).
- Satu lagi untuk memprogram ESP32 lain sebagai BLE scanner (pencari perangkat).
Dengan percobaan ini, kita bisa memastikan bahwa sinyal BLE dari server dapat dideteksi oleh perangkat lain, termasuk ESP32 yang di-set sebagai pemindai BLE.
Peralatan
- 2 buah ESP32 Dev Module
- 2 laptop dengan Arduino IDE
- Kabel USB untuk masing-masing ESP32
Rangkaian Tidak ada rangkaian kabel tambahan; masing-masing ESP32 hanya dihubungkan ke laptop melalui kabel USB.
Langkah-Langkah Percobaan
- Laptop 1 (Server) : Upload kode BLE server ke ESP32. ESP32 akan mengumumkan nama perangkat (misalnya “MyESP32”) dan karakteristik BLE.
- Laptop 2 (Scanner) : Upload kode BLE scan ke ESP32 untuk mendeteksi perangkat BLE di sekitar.
- Pastikan kedua laptop menjalankan Serial Monitor pada baud rate yang sesuai (115200).
- Amati apakah nama BLE server (misalnya “MyESP32”) terdeteksi oleh scanner.
Kode Server
/*
Complete Getting Started Guide: https://RandomNerdTutorials.com/esp32-bluetooth-low-energy-ble-arduino-ide/
Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLE%20Tests/SampleServer.cpp
Ported to Arduino ESP32 by Evandro Copercini
*/
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
// See the following for generating UUIDs:
// https://www.uuidgenerator.net/
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
void setup() {
Serial.begin(115200);
Serial.println("Starting BLE work!");
BLEDevice::init("MyESP32");
BLEServer *pServer = BLEDevice::createServer();
BLEService *pService = pServer->createService(SERVICE_UUID);
BLECharacteristic *pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE
);
pCharacteristic->setValue("Hello World says Neil");
pService->start();
// BLEAdvertising *pAdvertising = pServer->getAdvertising(); // this still is working for backward compatibility
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID(SERVICE_UUID);
pAdvertising->setScanResponse(true);
pAdvertising->setMinPreferred(0x06); // functions that help with iPhone connections issue
pAdvertising->setMinPreferred(0x12);
BLEDevice::startAdvertising();
Serial.println("Characteristic defined! Now you can read it in your phone!");
}
void loop() {
// put your main code here, to run repeatedly:
delay(2000);
}
Kode Scanner
/*
Complete Getting Started Guide: https://RandomNerdTutorials.com/esp32-bluetooth-low-energy-ble-arduino-ide/
Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLE%20Tests/SampleScan.cpp
Ported to Arduino ESP32 by Evandro Copercini
*/
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEScan.h>
#include <BLEAdvertisedDevice.h>
int scanTime = 5; // in seconds
BLEScan* pBLEScan;
class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
void onResult(BLEAdvertisedDevice advertisedDevice) {
Serial.printf("Advertised Device: %s \n", advertisedDevice.toString().c_str());
}
};
void setup() {
Serial.begin(115200);
Serial.println("Scanning...");
BLEDevice::init("");
pBLEScan = BLEDevice::getScan(); //create new scan
pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
pBLEScan->setActiveScan(true); //active scan uses more power, but get results faster
pBLEScan->setInterval(100);
pBLEScan->setWindow(99); // less or equal setInterval value
}
void loop() {
// put your main code here, to run repeatedly:
BLEScanResults *foundDevices = pBLEScan->start(scanTime, false);
Serial.print("Devices found: ");
Serial.println(foundDevices->getCount());
Serial.println("Scan done!");
pBLEScan->clearResults(); // delete results fromBLEScan buffer to release memory
delay(2000);
}
Hasil Percobaan
- Laptop dengan BLE server ESP32 menunjukkan bahwa karakteristik sudah aktif dan siap dibaca.
- Laptop dengan scanner berhasil mendeteksi perangkat BLE “MyESP32” dari server. Data detail seperti alamat MAC, service UUID, dan RSSI ditampilkan di Serial Monitor scanner.

Kesimpulan
SP32 berhasil dikonfigurasi sebagai BLE server yang dapat dideteksi oleh ESP32 lain yang berperan sebagai scanner, membuktikan kemampuan komunikasi hemat daya antar-ESP32. BLE sangat cocok untuk aplikasi yang memerlukan koneksi ringan dan efisien, seperti sensor IoT atau perangkat wearable yang hanya sesekali mengirim data.
메타데이터
- post_id
- 320df03a6d9d
- slug
- modul-9-wireless-communication-bluetooth-320df03a6d9d
- url
- https://medium.com/@18223138/modul-9-wireless-communication-bluetooth-320df03a6d9d
- canonical_url
- https://medium.com/@18223138/modul-9-wireless-communication-bluetooth-320df03a6d9d
- author_url
- https://medium.com/@18223138
- status
- ok
- fetched_at
- 2026-07-20 01:41:37