ESP32 — BLUETOOTH

241 - agnes tamara
6 min readMar 30, 2022

--

Pada projek kali ini, kita akan melakukan percobaan dengan fitur bluetooth pada ESP32, yaitu bluetooth classic dan bluetooth low energy.

Bluetooth Classic

Alat dan bahan yang akan digunakan untuk percobaan pertama adalah:

1. ESP32

2. Breadboard

3. Kabel USB

Untuk melakukan percobaan ini, pertama kita harus men-download aplikasi “Serial Bluetooth Terminal”. Kedua, letakkan ESP32 di atas breadboard. Lalu, sambungkan ESP32 ke laptop hingga lampu pada ESP32 menyala.

Program yang digunakan untuk percobaan ini adalah:

//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);
}

Ketiga, tekan icon verify untuk mengcompile program. Saat proses compiling selesai, selanjutnya tekan icon upload untuk menguploadnya ke board ESP32.

Setelah program berhasil diupload ke board ESP32, kita dapat langsung mencoba menekan EN pada ESP32 dan membuka serial monitor dengan cara menuju Tools > Serial Monitor, lalu ubah menjadi 115200 baud, dengan begitu tampilan pada serial monitor akan menunjukkan hasil sebagai berikut:

Setelah serial monitor menunjukkan hasil seperti gambar di atas, kita dapat langsung mencobanya dengan menggunakan aplikasi “Serial Bluetooth Terminal” yang sudah terdownload pada smartphone kita. Untuk menyambungkan ESP32 ke aplikasi tersebut, kita harus menekan Devices > ESP32test, setelah itu menuju ke terminal sampai terminal menampilkan tulisan “Connecting to ESP32test…” dan “Connected”. Setelah itu, ketik suatu kalimat/kata pada terminal aplikasi, maka kalimat/kata tersebut akan muncul pada serial monitor, begitu juga sebaliknya.

Setelah program dapat dijalankan seperti pada video di atas, maka percobaan pertama telah berhasil dan kita dapat melanjutkan ke percobaan kedua.

Alat dan bahan yang akan digunakan untuk percobaan kedua adalah:

1. ESP32

2. Breadboard

3. Kabel jumper

percobaan kali ini akan menggunakan 4 buah kabel jumper male to female dan 2 buah kabel jumper male to male

4. Resistor

percobaan kedua menggunakan resistor 10k ohm dan 330 ohm masing-masing satu buah

5. DS18B20 Temperature Sensor

Pertama, kita harus menginstall beberapa library, yaitu One Wire dan Dallas Temperature library, lalu letakkan ESP32 di atas breadboard dengan rangkaian seperti pada gambar di bawah dan sambungkan ke laptop dengan menggunakan kabel USB.

Program yang akan digunakan untuk percobaan kedua adalah:

/*********
Rui Santos
Complete project details at https://randomnerdtutorials.com
*********/
// Load libraries
#include "BluetoothSerial.h"
#include <OneWire.h>
#include <DallasTemperature.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 = 25;
// GPIO where the DS18B20 is connected to
const int oneWireBus = 32;
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(oneWireBus);
// Pass our oneWire reference to Dallas Temperature sensor
DallasTemperature sensors(&oneWire);
// Handle received and sent messages
String message = "";
char incomingChar;
String temperatureString = "";
// 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);
// Bluetooth device name
SerialBT.begin("ESP32");
Serial.println("The device started, now you can pair it with bluetooth!");
}
void loop() {
unsigned long currentMillis = millis();
// Send temperature readings
if (currentMillis - previousMillis >= interval){
previousMillis = currentMillis;
sensors.requestTemperatures();
temperatureString = String(sensors.getTempCByIndex(0)) + "C " + String(sensors.getTempFByIndex(0)) + "F";
SerialBT.println(temperatureString);
}
// 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(ledPin, HIGH);
}
else if (message =="led_off"){
digitalWrite(ledPin, LOW);
}
delay(20);
}

Kedua, tekan icon verify untuk mengcompile program. Saat proses compiling selesai, selanjutnya tekan icon upload untuk menguploadnya ke board ESP32.

Setelah program berhasil diupload ke board ESP32, kita dapat langsung mencoba menekan EN pada ESP32 dan membuka serial monitor dengan cara menuju Tools > Serial Monitor, lalu ubah menjadi 115200 baud, dengan begitu tampilan pada serial monitor akan menunjukkan hasil sebagai berikut:

Setelah serial monitor menunjukkan hasil seperti gambar di atas, kita juga dapat langsung mencobanya dengan menggunakan aplikasi “Serial Bluetooth Terminal” yang sudah terdownload pada smartphone kita. Karena sudah pernah menyambungkan ESP32, kita dapat langsung menunggu hingga terminal menampilkan tulisan “Connecting to ESP32test…” dan “Connected”. Setelah itu, edit macro dengan menekan M1 atau M2 dan memasukkan value yang diinginkan, misalnya M1 dengan value led_on dan M2 dengan value led_off sehingga jika ditekan akan menunjukkan tampilan seperti di bawah ini.

Setelah program dapat dijalankan seperti pada video di atas, maka percobaan kedua telah berhasil dan kita dapat melanjutkan ke percobaan ketiga.

Bluetooth Low Energy

Untuk percobaan ketiga ini, kita hanya akan membutuhkan ESP32, breadboard, dan kabel USB untuk menyambungkan ESP32 ke laptop. Sebelum memulai percobaan, pastikan kita sudah menginstall aplikasi ‘nRF Connect for Mobile’ pada smartphone kita.

Pertama, letakkan ESP32 pada breadboard dan sambungkan ke laptop dengan menggunakan kabel USB.

Program yang kita gunakan untuk percobaan ini adalah:

/*
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 my name is Agnes");
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);
}

Kedua, tekan icon verify untuk mengcompile program dan saat proses compiling selesai, selanjutnya tekan icon upload untuk menguploadnya ke board ESP32.

Setelah program berhasil diupload ke board ESP32, langkah ketiga adalah menekan Tools > Serial Monitor, lalu ubah menjadi 115200 baud, maka tampilan pada serial monitor akan menjadi seperti di bawah ini yang menandakan server sedang bekerja.

Keempat, buka aplikasi yang telah kita install tadi, dan sambungkan dengan ‘Long name works now’.

Setelah itu, tekan bagian client pada ‘Long name works now’ dan tekan tanda panah ke bawah untuk mendownload dan membaca package.

Setelah menekan tanda tersebut, akan muncul kalimat yang kita masukkan di program, untuk program saya adalah “Hello my name is Agnes”, seperti pada gambar di bawah ini.

Jika tampilan pada aplikasi sudah seperti gambar di atas, hal itu berarti kita sudah berhasil menyelesaikan projek kali ini.

--

--

No responses yet