ESP32 WITH BLUETOOTH COMMUNICATION

    Pada percobaan kali ini, dijelaskan mengenai ESP32 yang menggunakan  fitur komunikasi bluetooth.  ESP32 terdapat fitur komunikasi Bluetooth, baik Bluetooth Classic maupun Bluetooth Low Energy (BLE) yang tertanam di dalamnya. Bluetooth Classic dan BLE digunakan untuk tujuan yang sangat berbeda. Bluetooth Classic dapat menangani banyak data, tetapi menghabiskan masa pakai baterai dengan cepat dan menghabiskan lebih banyak biaya. BLE digunakan untuk aplikasi yang tidak perlu menukar data dalam jumlah besar maka dapat berjalan dengan daya baterai selama bertahun-tahun dengan biaya yang lebih murah.

Pada percobaan ini, komponen dan perangkat yang dibutuhkan sebagai berikut.

1. ESP32 DEVKIT V1 Board (yang saya gunakan 30 pin)





4. PC / Laptop

6. Jumper wires (yang saya gunakan female to male) sebanyak 3 buah
    


7. Lampu LED sebanyak 1 buah


8. Resistor 330Ω


9. Breadboard





Langkah-langkah pengerjaan :

Pada percobaan ini, langkah awal adalah menginstal aplikasi "Serial Bluetooth Terminal" pada smartphone yang dapat didownload di Play Store.


1. Serial to Serial Bluetooth

    Buka Arduino IDE pada PC, kemudian pilih File > Examples > BluetoothSerial > SerialtoSerialBT. Maka akan mendapatkan code berikut.

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


Keterangan code :

Code dimulai dengan memasukkan library BluetoothSerial.
#include "BluetoothSerial.h"
Pada baris selanjutnya, melakukan pengecekan apakah bluetooth sudah terhubung.
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
Kemudian, membuat instance BluetoothSerial dengan nama SerialBT.
BluetoothSerial SerialBT;
Pada setup (), serial communication diinisiasi pada baud rate 115200.
Serial.begin(115200);
Selanjutnya, melakukan inisialisasi perangkat serial Bluetooth dan memberikan nama pada Bluetooth Device sebagai argumen. Secara default pada code ini deiberi nama "ESP32test".
Pada loop (), mengirim dan menerima data melalui Bluetooth Serial.
SerialBT.begin("ESP32test"); //Bluetooth device name
Pada if statement pertama, memeriksa apakah ada byte yang diterima di port serial. Jika ada, informasi itu dikirim melalui Bluetooth ke perangkat yang terhubung.
if (Serial.available()) {
  SerialBT.write(Serial.read());
}
If statement berikutnya, memeriksa apakah ada byte yang tersedia untuk dibaca di Bluetooth Serial Port. Jika ada, byte tersebut akan tertulis di Serial Monitor.
if (SerialBT.available()) {
  Serial.write(SerialBT.read());
}
Setelah verify dan upload code, buka serial monitor dan pastikan berada pada baud rate 115200. Tekan tombol EN pada ESP32.


Kemudian buka aplikasi "Serial Bluetooth Terminal" di smartphone. Nyalakan bluetooth pada smartphone. Untuk menyambungkan ke ESP32 untuk pertama kalinya, maka perlu memasangkan perangkat baru. Pada aplikasi "Serial Bluetooth Terminal" buka Devices.


Kemudian pilih ikon Settings dan pilih Pair new device. Selanjutnya terdapat perangkat Bluetooth yang tersedia, termasuk ESP32test. Sambungkan dengan ESP32test.

  

Kembali ke Serial Bluetooth Terminal dan pilih ikon di atas untuk menghubungkan ke ESP32. Pada tampilan Serial Bluetooth Terminal terdapat pesan "Connected".


Setelah itu, ketik pesan apapun dari Serial Bluetooth Terminal lalu pilih ikon send.


Maka, pada serial monitor pesan tersebut akan langsung diterima.


Sebaliknya, apabila ingin mengirim pesan melalui serial monitor, ketik pesan pada bagian atas serial monitor dan pilih "send" untuk mengirimnya. 


Maka, pada Serial Bluetooth Terminal pesan tersebut akan langsung diterima.



Berikut video hasil percobaan :



2. Exchange Data using Bluetooth Serial

        Pada percobaan ini, menggunakan sensor internal pada ESP32 untuk mengukur temperatur mengirim pesan ke smartphone untuk memonitor output.

Berikut skema yang digunakan pada percobaan ini. 


Keterangan : 
1. GPIO 3V3 menuju + breadboard
2. GPIO GND menuju - breadboard
3. GPIO D19 menuju LED
4. Resistor 330Ω dipasangkan pada LED dan - breadboard

Code yang digunakan adalah sebagai berikut.

#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
#ifdef __cplusplus
  extern "C" {
#endif
uint8_t temprature_sens_read();
#ifdef __cplusplus
}
#endif
uint8_t temprature_sens_read();
// Bluetooth Serial object
BluetoothSerial SerialBT;
// GPIO where LED is connected to
const int ledPin =  19;
// 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);
  // 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;
    SerialBT.print((temprature_sens_read() - 32) / 1.8);
    SerialBT.println(" C");
    delay(1000); 
  }
  // 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);
}

Keterangan code :

Code dimulai dengan memasukkan library BluetoothSerial.
#include "BluetoothSerial.h"
Pada baris selanjutnya, melakukan pengecekan apakah bluetooth sudah terhubung.
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
Pada baris selanjutnya, melakukan pengecekan sensor internal.
#ifdef __cplusplus
  extern "C" {
#endif
uint8_t temprature_sens_read();
#ifdef __cplusplus
}
#endif
uint8_t temprature_sens_read();
Kemudian, membuat instance BluetoothSerial dengan nama SerialBT.
BluetoothSerial SerialBT;
Selanjutnya, membuat variabel ledPin yang digunakan GPIO untuk menghubungkan LED.

const int ledPin =  19;
Baris berikutnya, membuat string kosong berupa 'message' untuk menyimpan pesan yang diterima dan variabel char berupa 'incomingChar' untuk menyimpan karakter yang diterima dari Bluetooth Serial.
String message = "";
char incomingChar;
Kemudian, membuat variabel waktu untuk pembacaan sensor setiap 10 sekon.
unsigned long previousMillis = 0;    // Stores last time temperature was published
const long interval = 10000;         // interval at which to publish sensor readings
Pada setup(), atur output sebagai ledPin dan inisialisasi device Bluetooth dengan ESP32.
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!");
}
Pada loop(), pemeriksaan apakah pembacaan terakhir sudah 10 detik. Apabila sudah, pembacaan sensor akan diubah ke Celcius untuk ditampilkan di Bluetooth Serial Port.
void loop() {
  unsigned long currentMillis = millis();
  // Send temperature readings
  if (currentMillis - previousMillis >= interval){
    previousMillis = currentMillis;
    SerialBT.print((temprature_sens_read() - 32) / 1.8);
    SerialBT.println(" C");
    delay(1000); 
  }
Selanjutnya, jika terdapat informasi di Bluetooth Serial Port maka karakter akan dibaca dan disimpan pada variabel incomingChar. Setelah karakter selesai dibaca, 'message' menjadi kosong.
if (SerialBT.available()){
    char incomingChar = SerialBT.read();
    if (incomingChar != '\n'){
      message += String(incomingChar);
    }
    else{
      message = "";
    }
    Serial.write(incomingChar);  
  }
Terakhir, jika 'message' berisi led_on dan terbaca dengan sukses, maka lampu LED akan menyala. Namun, jika 'message' berisi led_off dan terbaca dengan sukses, maka lampu LED akan padam.
if (message =="led_on"){
    digitalWrite(ledPin, HIGH);
  }
  else if (message =="led_off"){
    digitalWrite(ledPin, LOW);
  }
  delay(20);
Berikut hasil percobaan yang dilakukan : 

 



Mengenai percobaan BLE, pada kesempatan ini belum dilakukan karena terdapat kendala pada perangkat yang dibutuhkan. Pada kali ini, penulis hanya memiliki 1 PC. Sekian dan Terimakasih.




Komentar

Postingan populer dari blog ini

LED Blinking ESP32

ESP32 WITH DATA VISUALIZATION

ESP32 WITH WI-FI COMMUNICATION