[Embedded System, Project 7] ESP32 Sensor: Bluetooth
Halo! Kembali lagi di seri [Embedded System] blogku yang sudah menyentuh seri ke 7! Waw, tidak terasa sekali yaa! sudah terlalu banyak project yang dikerjakan dan tingkat keseruannya semakin bertambah. Nah, di project kali ini kita mencoba sedikit yang lebih menantang lagi karena akan mencoba menggunakan bluetooth. Seperti biasa, di perangkat biasa bluetooth sering mengalami kendala dalam koneksi jadi aku bisa menebak kalau di project ini pasti akan banyak kendala dan memang benar. Penasaran? baca terus ya~
Sedikit trivia tentang bluetooth, bluetooth merupakan perangkat yang dikembangkan untuk transfer data tanpa kabel (wireless) dan termasuk Wireless Personal Area Network (W-PAN). PAN adalah jaringan yang menghubungkan perangkat perangkat dalam area terbatas, nah berarti W-PAN adalah jaringan yang menghubungkan perangkat perangkat dalam area terbatas melalui koneksi nirkabel. Jangkauan koneksinya umumnya terbatas puluhan hingga ratusan meter saja. Bluetooth umumnya beroperasi di jaringan dengan frekuensi 2.4 GHz.
Bluetooth sendiri terbagi dua lagi, yaitu Bluetooth Classic dan Bluetooth Low Energy. Kedua jenis bluetooth ini pada dasarnya sama, perbedaannya hanya pada BLE memiliki mode “tidur” ketika sedang tidak mendapatkan connection sehingga menjadi lebih hemat energi. Selain itu, pada BLE data ratesnya berkisar 1 Mb/s sedangkan pada bluetooth ~100ms.
Dari segi penggunaan, Bluetooth umumnya digunakan untuk transfer data yang banyak dan memiliki batrai yang kuat seperti headset. Sedangkan, BLE digunakan untuk aplikasi yang hanya memerlukan transfer data singkat seperti mobile payment, healtcare, ticket dan access control.
— Introduction
Seperti yang sudha dibilang diawal tadi, pada project kali ini kita akan mencoba menghubungkan ESP32 dengan perangkat lain via bluetooth.
— Tools, Steps, Illustration
Disesuaikan dengan kreasi masing-masing saja namun di project kali ini aku menggunakan tools dan ilustrasi yang sama dengan Project #6!
— Program details
Bluetooth Classic — Default
//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);
}— Analysis
Mengikuti tutorial dari randomnerdtutorials, step pertama adalah meng-run program yang terdapat pada program details dan ketika berhasil maka akan keluar tampilan seperti ini di serial monitor. Dan beruntungnya, tidak ada kendala sama sekali karena langsung berhasil.
Nah, masalahnya terdapat pada step setelah ini. Tutorial yang tersedia pada randomnerdtutorial menggunakan aplikasi Serial Bluetooth Terminal pada android dan saya kebetulan pengguna iOS dan tidak memiliki aplikasi itu, setelah bertanya dengan beberapa orang, ada beberapa alternatif yang bisa digunakan di iOS seperti HomeKit, BluTerm, BLE-Serial Adapter dan BluetoothLE.
Aku sudah mencoba semuanya tapi ternyata~~ zonk. Tidak ada satupun aplikasi yang bisa menghubungkan bluetoothku dengan ESP32. Bahkan, pakai bluetooth default juga ngga bisa connect. Karena bingung banget dan sudah berlarut larut cukup lama, akhirnya aku memutuskan untuk mencoba menghubungkannya dengan perangkat laptopku saja. Dan berhasil! Mungkin ada kendala di SmartPhone ku tapi karena itu satu satunya smartphone yang aku miliki jadi aku melanjutkannya menggunakan laptop saja.
Setelah berhasil dengan Bluetooth, aku lanjut mencoba BLE_Server. Kode yang aku gunakan pure mengambil dari Examples > ESP32 BLE Arduino > BLE_Server. Namun, ada beberapa kendala yang aku temukan seperti pada gambar :
Setelah surfing di google dan bertanya ke beberapa orang, aku masih belum menemukan cara menyelesaikannya. Bahkan, di salah satu forum menyarankanku untuk membuat header sendiri huhu. Aku bahkan belum menemukan file error_constants.h perlu diakses dimana jadi akhirnya aku memutuskan untuk pending BLE dan kembali eksplor Bluetooth Classic.
— Bluetooth Classic pt. 2
Pada pt.2 bluetooth classic ini, aku ingin membuat ESP32 berkomunikasi dengan perangkat bluetooth. Ketika perangkat bluetooth meminta inputan informasi suhu berupa string “get_info”, maka ESP32 akan memberikan hasil perhitungan suhu, selain itu sebagai pengganti serial monitor. Inputan dari perangkat bluetooth akan ditampilkan pada OLED.
//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// Include library yang diperlukan
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
// Deklarasi variabel OLED
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Deklarasi variabel BME
#define BME_ADDRESS 0x76
Adafruit_BME280 bme;BluetoothSerial SerialBT;
String message = "";
char incomingChar;void setup() {
Serial.begin(115200);
SerialBT.begin("ESP32test"); //Bluetooth device name
Serial.println("The device started, now you can pair it with bluetooth!");if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
bool status = bme.begin(BME_ADDRESS);
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
delay(2000);
display.clearDisplay();
display.setTextColor(WHITE);
}void loop() {
if (Serial.available()) {
char incomingChar = SerialBT.read();
if (incomingChar != '\n'){
message += String(incomingChar);
}
else{
message = "";
}
Serial.println(incomingChar);
if (message == "get_info") {
SerialBT.println("Suhu sekarang" + String(bme.readTemperature()));
} else {
SerialBT.println(Serial.read());
}
}if (SerialBT.available()) {
char incomingChar = Serial.read();
if (incomingChar != '\n'){
message += String(incomingChar);
}
else{
message = "";
}
Serial.write(incomingChar);
Serial.write(SerialBT.read());
display.setTextSize(2);
display.setCursor(0,10);
if (message == "get_info") {
display.println(String(bme.readTemperature()));
} else {
display.println(message);
}
display.display();
}
delay(20);
}
Lagi lagi, tidak membuahkan hasil yang begitu bagus. Sejauh ini, semuanya berjalan sesuai yg aku inginkan, OLED sudah menampilkan sebuah tulisan dan terminal bluetooth dan serial monitor telah berkomunikasi dengan baik. Akan tetapi, mungkin ada beberapa kesalahan pada kode yang aku buat ataupun ada syntax yang seharusnya tidak boleh aku gunakan jadi outputnya lumayan aneh gini.
Setelah beberapa kali memperbaiki kode, akhirnya berhasil mengeluarkan tulisan yang sedikit lebih baik
Akan tetapi, lagi lagi setelah mengolah-olah kode, aku mendapatkan error lagi di akhir. Hal ini mungkin disebabkan karna ada masalah koneksi antara ESP32 dan bluetoothnya. Setelah beberapa kali refresh, akhirnya aku memutuskan untuk mengakhirinya disini dulu dan sepertinya harus banyak membaca dokumentasi lagi.
— Closing
Sejujurnya aku cukup kecewa karena ini percobaan pertamaku yang lumayan gagal karena tidak berhasil menerima output yang benar-benar aku harapkan padahal effort yang aku keluarkan jauh lebih banyak di project ini. Tapi, disisi lain aku juga cukup senang karena berhasil mengeksplor lebih banyak daripada project sebelumnya~ Sampai jumpa di project selanjutnya. Semoga masalah ini cepat solved kemudian aku bisa update lagi hehe
