Project 7 : ESP32 Bluetooth

Gavriel Benny
6 min readMar 20, 2021

--

Haloo, balik lagi di project Embedded System kali ini, perkenalkan lagi nama aku Gavriel Benny dengan NIM 18219078 dari Sistem dan Teknologi Informasi ITB. Pada project kali ini, aku akan bereksperimen dengan ESP32 Bluetooth.

Apa si itu Bluetooth? Bluetooth merupakan suatu teknologi wireless yang berstandard PAN dan digunakan untuk pertukaran data antara perangkat mobile/fixed di jarak yang cukup dekat. Bluetooth beroperasi dalam 2,4 GHz band.

Nah, Bluetooth ini ada 2 macam, Bluetooth Classic dan Bluetooth Low Energy

Bluetooth Classic merupakan teknologi yang berorientasi koneksi. Koneksi perlu diadakan terlebih dahulu diantara perangkat yang terdapat Bluetooth sebelum pengiriman data dilakukan. Bluetooth menggunakan low-energy gelombang radio untuk mengirim data secara wireless tanpa memerlukan alat lain seperti router atau modem

Bluetooth Low Energy atau dikenal dengan Bluetooth 4.0 merupakan variasi dengan power lebih rendah dibanding Bluetooth Classic. Bluetooth LE mempunyai konsumsi power rendah dan Sleep-mode power juga rendah. BLE akan “tertidur” jika tidak ada koneksi. Waktu koneksinya jauh lebih cepat dari Bluetooth biasa

Berikut tabel perbedaan Bluetooth Classic dan Bluetooth Low Energy :

Gausa berlama-lama lagi, langsung aja kuy kita bereksperimen. Nah kali ini aku mau bereksperimen dengan Bluetooth yang ada di ESP32. ESP32 ini bisa memiliki kedua macam Bluetooth tersebut. Aku mau periksa nih apakah ESP32 ini benar-benar mempunyai Bluetooth dan dapat berfungsi dengan baik, kuy kita langsung aja

Pertama, komponen apa sih yang dibutuhkan,

  • ESP32
  • Breadboard
  • Kabel Mikro USB
  • Gadget

Nah, berikut aku jelasin step by step untuk eksperimen kali ini. Tapi sebelum itu, kita bagi 2 terlebih dahulu

  1. Bluetooth Classic

Step 1 :

Download “Serial Bluetooth Terminal” di Playstore

Step 2 :

Rakit ESP32 ke breadboard dan sambungkan ke PC dengan kabel Mikro USB

Step 3 :

Setelah merakitnya kita upload code untuk memeriksa apakah Bluetooth di ESP32 bisa berjalan dengan baik

Kode dapat dicari di Arduino IDE, pergi ke File > Examples > BluetoothSerial > SerialtoSerialBT.

Berikut Kode untuk memeriksa Bluetooth Classic di ESP32 (Penjelasan di dalam kode)

//This example code is in the Public Domain (or CC0 licensed, at your option.)
//By Evandro Copercini - 2018
//
//This example creates a bridge between Serial and Classical Bluetooth (SPP)
//and also demonstrate that SerialBT have the same functionalities of a normal Serial
#include "BluetoothSerial.h" // memasukkan library BluetoothSerial// memeriksa apakah bluetooth sudah enable
#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; // membuat instance dari BluetoothSerial bernama SerialBTvoid setup() {
Serial.begin(115200);
SerialBT.begin("ESP32test"); //menginisialisasi Bluetooth Serial dengan nama Bluetooth Devicenya "ESP32test"
Serial.println("The device started, now you can pair it with bluetooth!");
}
// dalam loop terjadi pengiriman dan penerimaan data melalui bluetooth serial
void loop() {
if (Serial.available()) {
SerialBT.write(Serial.read()); // "write" untuk mengirim data dan "read" untuk membaca data
}
if (SerialBT.available()) {
Serial.write(SerialBT.read());
}
delay(20);
}

Setelah diupload, pencet tombol EN di ESP32, maka akan keluar hasilnya di Serial Monitor dengan baut 115200 sebagai berikut,

Terdapat tulisan “The device started, now you can pair it with bluetooth!”. Itu berarti ESP32 punyaku sudah siap untuk dipakai

Step 4 :

Nah sekarang aku mau mencoba untuk koneksi bluetooth yang ada di ESP32 ke smartphone menggunakan Serial Bluetooth Terminal yang sudah aku download sebelumnya

Untuk konek ke ESP32, pertama aku pair new devices dari smartphone ke ESP32 menggunakan bluetooth

Setelah di pair, balik ke Terminal lalu connect dengan ESP32 di Aplikasi Serial Bluetooth Terminal sampai tulisan menjadi Connected

Nah, sekarang ESP32 kita sudah berhasil untuk disambungkan dengan smartphone menggunakan koneksi bluetooth. Berikut hasil komunikasinya dalam bentuk foto dan video

Ketika aku mengirim “Hello” dari smartphone, maka pesan tersebut langsung terkirim ke Serial Monitor Arduino IDE

Lalu, setelah itu aku mencoba mengirim “Hello, too” dari Serial Monitor ke smartphone, dan hasilnya di smartphone keluar tulisan tersebut

Jika ingin lebih jelas, aku membuat video demo untuk proses tersebut.

2. Bluetooth Low Energy

Bluetooth Low Energy pada ESP32 ini bisa berperan sebagai BLE Server maupun BLE Client. Nah untuk project kali ini aku ingin menggunakan ESP32 sebagai BLE Server.

Step 1 :

Mengupload kode BLE Server dari Arduino IDE, dengan cara File > Examples > ESP32 BLE Arduino, lalu pilih BLE_server .

Berikut kodenya beserta penjelasannya

/*
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
updates by chegewara
*/
// memasukkan beberapa library yang dibutuhkan untuk BLE
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
// See the following for generating UUIDs:
// https://www.uuidgenerator.net/
// mendefinisikan UUID untuk service dan characteristic
#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!");
// Membuat BLE Device dengan nama "Long name works now"
BLEDevice::init("Long name works now");
BLEServer *pServer = BLEDevice::createServer(); // menetapkan BLE sebagai server
BLEService *pService = pServer->createService(SERVICE_UUID); // menciptakan sebuah service untuk BLE server dengan UUID yang telah di definisikan
BLECharacteristic *pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE
); // menetapkan karakteristik dari service yang telah dibuat sebelumnya, memasukkan UUID, serta mendefinisikan read dan write untuk memindahkan informasi
pCharacteristic->setValue("Hello World says Neil"); // set sebuah nilai yang berisi "Hello World says Neil" untuk dikirim nantinya
pService->start();
// BLEAdvertising *pAdvertising = pServer->getAdvertising(); // memulai service dan advertising, agar BLE device bisa membaca BLE server
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);
}

Step 2 :

Setelah mengupload kode, kita download nRF Connect for Mobile di Playstore

Step 3 :

Connect ESP32 dengan Smartphone dengan koneksi Bluetooth Low Energy

Sebelum kita connect, pastikan Bluetooth dan Location di device sudah dinyalakan. Setelah kita klik “connect” , maka akan ditampilkan hasilnya sebagai berikut

Dapat kita perhatikan bahwa informasi terkirim dengan baik dari ESP32 ke Smartphone. Dilihat bahwa service UUID sama seperti kode, yaitu “4fafc201–1fb5–459e-8fcc-c5c9c331914b”, lalu characteristics UUID pun sama dengan yang ada di kode kita upload, yaitu “beb5483e-36e1–4688-b7f5-ea07361b26a8”. Untuk properties Read and Write, sama juga seperti yang diupload di kode terdapat kata “Hello World says Neil” yang sudah berhasil dikirim ke smartphone menggunakan koneksi Bluetooth Low Energy.

Untuk kesimpulannya, jadi dengan menggunakan ESP32, aku bisa memanfaatkan bluetooth untuk berkomunikasi dengan device lain. Nah bluetoothnya juga ada 2 macam, yaitu Bluetooth Classic dan Bluetooth Low Energy. Aku belajar bahwa dengan menggunaka Bluetooth Classic bahwa proses serial komunikasi menjadi lebih mudah. Aku juga belajar mengeksplor Bluetooth Low Energy yang bisa digunakan secara efektif baik sebagai server maupun scanner.

Sekian project 7 kali ini, sampai ketemu di project-project berikutnya. Thankyou!

--

--