ESP32 with Bluetooth Connection

Paul Marturia
7 min readMar 20, 2021

Heyyoo whatsupp guys! Welcome back with me. Mungkin kalian bertanya-tanya ya “kemana si paul ini kok ga pernah lagi ngupload medium? padahal ada yang nungguin juga” biasalah…

Setelah sekian lama kita ga jumpa, aku balik lagi nih. Jadi di kesempatan kali ini kita akan nge-operate ESP32 pakai smartphone kita masing-masing dengan menggunakan Bluetooth Connection. “Hah, emang bisa?” Bisa dong. Mau tau caranya? Yuk ikutin keseruannya!

For your information, Bluetooth adalah salah satu teknologi nirkabel yang digunakan untuk menukar data antar perangkat di jarak yang dekat. Doi bekerja di sekitar ~ 2.4 GHz. Doi ini mirip sama teknologi yang kita kenal dengan sebutan Wi-FI, tapi dia tidak perlu tuh yang namanya router. Bluetooth bisa menjangkau kira-kira sejauh 50 meter.

Disini kita akan membahas dua jenis Bluetooth, yaitu Bluetooth Classic dan Bluetooth Low Energy (BLE). Seperti namanya, BLE sama seperti Bluetooth pada umumnya, namun BLE mengonsumsi daya yang cenderung lebih rendah dan lebih murah. Nanti akan kita bahas.

Sekarang kita siapin dulu ya alat dan bahannya.

  1. Breadboard
  2. ESP32
  3. Kabel USB
  4. Smartphone Android. Nah kalau untuk selain Android aku kurang tahu ya, karena aku makenya android hehehe.

Kalau semuanya udah siap, skuyy kita mulai.

Bluetooth Classic

Mula-mula kita akan rakit rangkaian kita menjadi seperti ini.

Sumber : randomnerdtutorials.com

Pertama letakkan ESP32 diatas breadboard dan sambungkan ke laptop.

Lalu, ambil smartphone kalian, terus buka Playstore dan download aplikasi Serial Bluetooth Terminal

Setelah selesai download, kita buka laptop, buka aplikasi Arduino, dan pergi ke File > Examples > BluetoothSerial > SerialtoSerialBT.

Kalau kalian malas :D, kalian bisa copy paste kode punyaku.

//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(“ESP32_PaulSihombing”); //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);
}

Lalu akan muncul code nya dan coba langsung kalian verify dan upload.

Setelah itu coba buka Serial Monitor, dan klik tombol EN (Enable) yang ada di ESP32.

Lalu kita balik ke smartphone, dan nyalakan Bluetooth Connection.

Habis itu, kamu pair perangkat smartphone mu dengan ESP32.

Jika sudah, buka lagi smartphone kalian, buka aplikasi Serial Bluetooth Terminal yang sudah di download, klik garis 3 di pojok kanan atas dan pencet Devices.

Garis 3
Klik Devices

Nanti akan muncul pilihan-pilihan devices, kamu pilih devices dari ESP32 sesuai nama yang tadi kamu inisialisasikan di source code kamu. Kalau aku tadi bikin menggunakan nama “ESP32_PaulSihombing”.

Sekarang kita akan coba melakukan komunikasi antar 2 devices. Kamu bisa langsung mulai ‘chat’ dari smartphone kamu. Misalnya begini.

Lihat! Pesan yang kamu ketik di smartphone akan muncul di serial monitor. Keren bukan?!!

Setelah ini, kita akan mencoba untuk menyalakan lampu dengan koneksi Bluetooth. Yuk disimak!

Coba perhatikan sejenak rangkaian berikut ini.

Sumber : randomnerdtutorials.com

Disini kita akan merangkai seperti ini. Oh iya, ada tambahan alat lagi ya, yaitu Lampu LED dan Resistor 330ohm. Langsung disiapin yaa biar ga ketinggalan, karena ini bakal seru bangettz.

Pertama, seperti biasa letakkan terlebih dahulu ESP32 diatas breadboard.

Kedua, letakkan kabel jumper di pin 3v3 serta di kutub positif pada breadboard.

Ketiga, letakkan kabel jumper di pin GND serta di kutub negatif pada breadboard.

Letakkan LED pada breadboard. Disini aku memakai 2 lampu LED.

Lalu letakkan kaki LED pada pin di ESP32. Aku sendiri menggunakan pin GPIO5 dan GPIO22.

Jangan lupa letakkan resistor, hubungkan pada kutub negatif di breadboard.

Kalau punyaku rangkaiannya akan menjadi seperti ini teman-teman.

Dan kode nya seperti ini ya guyz.

/*********
Rui Santos
Complete project details at https://randomnerdtutorials.com
*********/
// Load libraries
#include "BluetoothSerial.h"
// 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;
const int ledPin1 = 5;
const int ledPin2 = 22;
String message = "";
char incomingChar;
String temperatureString = "";
void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
Serial.begin(115200);
// Bluetooth device name
SerialBT.begin("ESP32");
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 =="nyalain dong lampunya"){
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
SerialBT.println("lampunya udah nyala bos");
}
else if (message =="matiin dong lampunya"){
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
SerialBT.println("lampunya udah mati ya bos");
}
delay(20);
}

Lalu, kamu bisa langsung memasukkan command untuk menyalakan serta mematikan lampu di dalam box. Seperti pada code yang aku tulis diatas, jika aku memasukkan pesan “nyalain dong lampunya”, maka lampu akan menyala. Begitu juga sebaliknya, jika aku memasukkan pesan “matiin dong lampunya”, maka lampu akan mati.

Jika kalian malas, ada trik lain, yaitu membuat shortcut dengan cara klik dan tahan pada tools M1, M2, lalu ganti namanya beserta valuenya. Lihat gambar dibawah ini.

Untuk video dibawah ini, saat user akan memasukkan command LED ON”, maka lampu akan menyala.

Turn ON LED

Lalu, untuk video dibawah ini, saat user akan memasukkan command LED OFF”, maka lampu akan mati.

Bluetooth Low Energy

Untuk bluetooth low enery kalian bisa copy-paste kodingan berikut.

/*
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("Long name 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 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);
}

Nah, untuk hasilnya akan aku share nanti ya, aku juga masih belajar lagi untuk kasus ini :D

Okeiii, mungkin itu dulu yang bisa aku sharing pada kesempatan ini. Jangan lupa buat dicoba masing-masing ya. See u next week!

Referensi :

--

--