#7 ESP32, Bluetooth Classic, Bluetooth Low Energy

Reswara Trista Aulia Candrakanti
5 min readMar 26, 2023

--

Hi! Hello! Selamat datang kembali di #SEJourney!

Hari ini, mari kita bermain dengan Bluetooth!

Apa itu Bluetooth Classic dan Bluetooth Low Energy?

Bluetooth adalah standar teknologi nirkabel jarak pendek yang digunakan untuk bertukar data antara perangkat tetap dan seluler dalam jarak pendek menggunakan gelombang radio UHF dalam pita ISM, dari 2,402 hingga 2,48 GHz, dan membangun jaringan area pribadi (PAN). Ini terutama digunakan sebagai alternatif koneksi kabel, untuk bertukar file antara perangkat portabel terdekat dan menghubungkan ponsel dan pemutar musik dengan headphone nirkabel.

Bluetooth Low Energy adalah varian hemat daya dari Bluetooth. Aplikasi utama BLE adalah transmisi jarak pendek dari sejumlah kecil data (bandwidth rendah). Tidak seperti Bluetooth yang selalu aktif, BLE tetap dalam mode tidur secara konstan kecuali saat koneksi dimulai. Ini membuatnya mengkonsumsi daya yang sangat rendah. BLE mengkonsumsi daya sekitar 100x lebih sedikit daripada Bluetooth.

Playing with Classic Bluetooth!

Pertama, install aplikasi pada Smartphone Android dengan nama “Serial Bluetooth Terminal”. Nah, aplikasi ini sayangnya hanya bisa diinstall pada smartphone Android!

Sudah? Selanjutnya, siapkan alat-alat berikut:

  1. Laptop/PC
  2. ESP32
  3. USB Cable
  4. Smartphone Android

Agar bisa disambungkan dengan Bluetooth, kalian harus membuat code yang bisa kalian dapatkan di File > Example > BluetoothSerial > SerialToSerialBT. Atau kalian bisa copy code di bawah

//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"

#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("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);
}

Jika berhasil diupload, akan muncul output seperti gambar di bawah ini pada serial monitor program.

Selanjutnya, hubungkan dengan Smartphone kalian!

Buka pengaturan bluetooth pada smartphone, dan lakukan pairing dengan nama bluetooth yang tertera pada Serial Monitor, pada kasus saya, namanya adalah “ESP32-BT-Slave”.

Lalu buka Devices pada aplikasi Serial Bluetooth Terminal, dan pastikan sudah terhubung dengan ESP32. Jika sudah berhasil terhubung, akan muncul output seperti gambar di bawah pada terminal aplikasi Serial Bluetooth Terminal

Berhasil! Selanjutnya mari kita coba untuk mengirimkan pesan dari Smartphone ke Arduino IDE.

Disini, saya mencoba mengirim pesan seperti gambar di bawah

Lalu, di serial monitor Arduino IDE akan muncul seperti gambar berikut

Bagaimana jika, kita mengirim pesan secara terbalik?

Mari kita coba kirim pesan dari Arduino IDE dengan mengetikkannya pada “Message” Serial Monitor seperti gambar di bawah

Hasilnya, pada serial monitor aplikasi akan muncul output seperti gambar di bawah

Controlling an LED with Bluetooth!

Selanjutnya kita akan mencoba untuk menyalakan dan mematikan lampu LED menggunakan Smartphone kita yang dihubungkan dengan ESP32 menggunakan Bluetooth!

Siapkan alat-alat berikut!

  1. Laptop/PC
  2. ESP32
  3. USB Cable
  4. Smartphone Android
  5. Breadboard
  6. Kabel jumper male-to-male
  7. Resistor 330 Ohm
  8. 5mm LED

Selanjutnya, merangkai! rangkai alat-alat tadi seperti gambar di bawah!

Setelah selesai merangkai, lanjut code!

#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;
const int led = 21;
String message = "";
void setup() {
pinMode(led, OUTPUT);
Serial.begin(115200);
SerialBT.begin("ESP32test"); //Bluetooth device name
Serial.println("The device started, now you can pair it with bluetooth!");
}
void loop() {
// 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(led, HIGH);
}
else if (message =="led_off"){
digitalWrite(led, LOW);
}
delay(20);
}

Saat upload code, bluetooth akan ter-disconnect. Jadi, jangan lupa untuk connect ulang ya! kalian tinggal menekan tombol ini pada kanan atas terminal aplikasi.

Atur M1 pada terminal dengan value: led_on dan Name: Turn On LED, dan M2 dengan value: led_off dan Name: Turn Off LED.

Hasilnya, kalian bisa mengontrol LED menggunakan Smartphone kalian!

Bluetooth Low Energy

Projek selanjutnya adalah mencoba Bluetooth Low Energy.

Langkah pertama, install aplikasi nRF Connect for Mobile

Langkah kedua, code!

Kalian bisa menggunakan code di bawah ini ya

/*
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
*/

#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("Trust me it works now");
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");
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);
}

Pastikan location dan bluetooth pada Smartphone telah menyala, dan lakukan:

  1. Tekan “scan” pada kanan atas aplikasi
  2. Kalian akan menemukan perangkat seperti gambar di bawah yang memiliki nama “Trust me it works now”
  3. Connect dengan perangkat tersebut

Jika sudah connect, buka tab “Client” dan kalian akan menemukan detail Unknown Service dan Unknown Characteristic yang memiliki UUID sesuai code yang kita upload.

Review Time

Project kali ini relatif mudah dan membuat saya ingin lebih mengulik penggunaan Bluetooth untuk sistem embedded yang lebih kompleks

Terima kasih dan sampai jumpa di #SEJourney berikutnya! 👋👋👋

--

--

Reswara Trista Aulia Candrakanti
Reswara Trista Aulia Candrakanti

Written by Reswara Trista Aulia Candrakanti

0 Followers

Hi! Trista here, welcome to my medium page!

No responses yet