ESP32 Project #7 — Bluetooth

Aldi Fadlian Sunan
7 min readMar 30, 2022

--

👋 Hello welcome to my blog about Embedded System Project!

Selamat datang kembali di project ESP32! Pada project kali ini saya akan menjelaskan eksperimen pengoperasian ESP32 yang menggunakan device lain! Nah pengoperasian tersebut kita gunakan dengan Bluetooth yang tersedia di smartphone Android! Penggunaan Bluetooth ini sebagai bentuk komunikasi tanpa kabel atau wireless communication protocol yang dilakukan oleh ESP32 dengan perangkat lain! Untuk kali ini, eksperimen yang dilakukan adalah dengan Bluetooth Classic dan Bluetooth Low Energy!

Nah untuk perbedaan dari kedua bluetooth tersebut dapat dilihat pada tabel berikut:

Sumber: randomnerdtutorials.com

Langsung saja mari kita coba!

Alat yang digunakan

  1. Laptop yang sudah terinstall Arduino IDE
  2. ESP32
  3. Breadboard
  4. Kabel USB type A
  5. Jumper Wire Male to Male
  6. LED
  7. Resistor 330 ohm
  8. BMP280 (pastikan sudah disolder)
  9. Smartphone Android

Project 6.0 Bluetooth Classic

Sebelum memulai eksperimen, ada beberapa hal yang perlu dipersiapkan yaitu Library sebagai media komunikasi. Karena menggunakan BMP280, maka jangan lupa untuk tetap menginstall library Adafruit BMP280. Selain itu, kita juga harus menginstall aplikasi di Android bernama Serial Bluetooth Terminal untuk Android sebagai penyambung ESP32 dengan smartphone menggunakan Bluetooth.

Aplikasi Serial Bluetooth Terminal

Jika sudah menginstall, buatlah rangkaian seperti pada gambar berikut!

Skema project 7.0
Rangkaian Project 7.0

Secara singkat, LED memakai GPIO 5, sedangkan BMP280 memakai GPIO21, GPIO22, serta terhubung ke 3v3 dan GND. Jika rangkaian sudah sesuai, silakan ketikkan kode berikut pada Arduino IDE.

/*********
Rui Santos
Complete project details at http://randomnerdtutorials.com
*********/
// Load libraries
#include "BluetoothSerial.h"
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.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;
// GPIO where LED is connected to
const int ledPin = 5;
Adafruit_BMP280 bmp; // I2C
// Handle received and sent messages
String message = "";
char incomingChar;
// 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() {
pinMode(ledPin, OUTPUT);
Serial.begin(115200);
if (!bmp.begin(0x76)) {
Serial.println("Could not find a valid BMP280 sensor, check wiring!");
while (1);
}
// Bluetooth device name
SerialBT.begin("ESP32");
Serial.println("The device started, now you can pair it with bluetooth!");
}
void loop() {
unsigned long currentMillis = millis();

// 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
// turned on LED
if (message =="LED ON"){
digitalWrite(ledPin, HIGH);
}
// turned off LED
else if (message =="LED OFF"){
digitalWrite(ledPin, LOW);
}
// Send temperature readings
else if (message =="TEMPERATURE"){
SerialBT.print("Temperature = ");
SerialBT.print(bmp.readTemperature());
SerialBT.println(" *C");
}
// Send pressure readings
else if (message =="PRESSURE"){
SerialBT.print("Pressure = ");
SerialBT.print(bmp.readPressure());
SerialBT.println(" Pa");
}
// Send altitude readings
else if (message =="ALTITUDE"){
SerialBT.print("Altitude = ");
SerialBT.print(bmp.readAltitude(768.25)); // this should be adjusted to your local forcase
SerialBT.println(" m");
}
delay(20);
}

Nah jika kode tersebut sudah diupload, silakan ke serial monitor untuk melihat apakah Bluetooth sudah siap disambungkan atau belum. Jika tampilan muncul seperti ini, tandanya Bluetooth siap disambungkan ke perangkat. (Tip! : jangan lupa untuk menekan Boot dan EN pada ESP32)

Tampilan Serial Monitor

Jika, sudah sekarang kita sambungkan Bluetooth ke smartphone!

Silakan buka aplikasi Serial Bluetooth Terminal dan buka Devices

Tampilan Aplikasi Serial Bluetooth Terminal

Lalu, klik icon setting pada kanan atas untuk menyambungkan Bluetooth. Kemudian pilih Bluetooth yang ingin disambungkan, untuk kali ini, Bluetooth kuberi nama ESP32

Menyambungkan Bluetooth

Jika sudah terhubung, kalian bisa memasukkan command pada terminal seperti yang dituliskan pada code!

💡Tip: Kalian bisa menggunakan shortcut yang tersedia untuk memudahkan dengan mengatur valuenya terlebih dahulu dengan cara menekan lama untuk setiap shortcut macro.

Penetapan Value Command ke Shortcut Macro

Jika sudah, klik tombol connect di kanan atas, dan kalian tinggal menekan tombol shortcut pada terminal dan amati yang terjadi!

Tampilan Terminal Serial Bluetooth Terminal

Untuk lebih jelasnya silakan lihat pada video demo berikut!

Project 6.1 Bluetooth Low Energy

Sebelum memulai eksperimen, ada beberapa hal yang perlu dipersiapkan yaitu kita harus menginstall aplikasi di Android bernama nRF Connect to Mobile untuk Android sebagai penyambung ESP32 dengan smartphone menggunakan Bluetooth Low Energy.

Aplikasi nRF Connect for Mobile

Untuk percobaan Bluetooth Low Energy ini tidak memerlukan skema rangkaian khusus. Jadi, kita tinggal masukkan kode berikut yang diambil dari randomnerdtutorials.com dengan modifikasi:

/*
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("BLE ESP32");
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 good morning Aldi Fadlian Sunan!");
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);
}

Jika kode sudah dijalankan, silakan cek Serial monitor untuk memastikan koneksi Bluetooth. Untuk kali ini saya namakan BLE ESP32, dan jika tampilan serial monitor seperti ini, maka koneksi Bluetooth siap untuk digunakan:

Lalu, sekarang mari kita beralih ke aplikasi nRF Connect to Mobile untuk menyambungkan koneksi Bluetooth. Caranya, kita klik Scan untuk mencari Bluetooth yang akan disambungkan.

Jika sudah terhubung, kita beralih ke bagian Client dan terlihat pesan “Hello good morning Aldi Fadlian Sunan” dapat ditampilkan! Selain itu, kita juga dapat melihat address yang digunakan!.

Dengan begitu, ESP32 telah terhubung ke device Android secara Bluetooth Low Energy!

Analisis dan Kendala

Bluetooth pada proyek ini menjadi sebuah media untuk mengendalikan sistem melalui perangkat lain. Dalam pemrogramannya, satu hal penting yang harus diperhatikan yaitu dengan menuliskan
#include “BluetoothSerial.h” sebagai deklarasi awal. Selain itu, Bluetooth juga perlu di inisialisasi menggunakan kode SerialBT.begin(“ESP32”)

Dalam pengaplikasiannya, khususnya pada Bluetooth Low Energy, ada hal penting yang menjadi perhatian, yaitu UUID (Universaly Unique Identifier) yang berfungsi untuk menampilkan 16 nomor bytes untuk setiap komponen layanan. Selain itu, penggunaan aplikasi Serial Bluetooth Terminal dan nRF Connect to Mobile menjadi satu hal penting yang mendukung keberjalanan proyek ini.

Untuk project kali ini, kendala yang saya hadapi adalah tidak dapat mendownload aplikasi, dan terkadang aplikasi mengalami crash karena minimnya ruang penyimpanan. Sekadar tips juga untuk kalian agar mengosongkan sebagian ruang agar ketika dijalankan, aplikasi dapat berjalan normal.

Nah jadi itu beberapa eksperimen yang dilakukan di proyek kali ini. So, that’s all for my project about Bluetooth ! Semoga bermanfaat dan sampai jumpa di proyek berikutnya! See you! 👋

--

--