Project 7: ESP32 Bluetooth Communication Protocol
Halo, teman-teman semua! Balik lagi bersama aku, Ima, dan kali ini aku bakalan nunjukkin kalian pengalamanku dalam mengeksplorasi ESP32 Bluetooth Communication Protocol. Sebelumnya, apa itu Bluetooth?
Bluetooth adalah protokol komunikasi yang bisa melakukan transfer data secara wireless atau tanpa kabel. Terdapat 2 jenis Bluetooth pada ESP32, yaitu Bluetooth Classic dan Bluetooth Low Energy (BLE). Daya yang digunakan BLE lebih rendah daripada Bluetooth Classic karena sebagian besar waktu koneksinya adalah dalam kondisi sleep.
Bluetooth Classic
Pada project kali ini, kita akan mencoba menyambungkan smartphone dan ESP32 menggunakan Bluetooth Classic. Namun, sebelumnya kita perlu untuk menyiapkan beberapa alat, seperti :
- ESP32
- Micro-USB cable
- Aplikasi Serial Bluetooth Terminal yang terpasang pada android
Setelah itu, sambungkan ESP32 dengan laptop melalui kabel USB.
Berikutnya, buka File -> Example -> BluetoothSerial -> SerialToSerialBT untuk memasukkan kode program berikut pada Arduino IDE.
#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
#endifBluetoothSerial 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);
}
Selanjutnya, verifikasi dan upload kode pada Arduino IDE. Setelah kode berhasil di-upload, buka serial monitor dan atur 115200 baud. Setelah itu, klik tombol EN pada ESP32.
Setelah menge-klik tombol tersebut, serial monitor akan terlihat seperti pada gambar berikut.
Hal ini menunjukkan bahwa Bluetooth pada ESP32 sudah siap untuk digunakan. Selanjutnya, buka aplikasi Serial Bluetooth Terminal yang telah terinstall pada smartphone. Lalu, sambungkan smartphone dengan bluetooth pada ESP32. Setelah berhasil terkoneksi, tulislah sesuatu pada terminal, dan bukalah serial monitor untuk melihat apakah transfer data dapat terjadi dengan baik.
Pada gambar di atas, aku memasukkan “Hello” pada terminal di aplikasi smartphone tersebut, dan aku pun dapat melihat tulisan “Hello” tertulis secara otomatis pada monitor.
Mengoperasikan komponen yang lebih banyak (sensor DHT 11 dan LCD) untuk mengirim data melalui Bluetooth ESP
Berikutnya, aku akan menunjukkan percobaanku melakukan transfer data suhu yang didapatkan dari sensor DHT11 ke interface aplikasi Serial Bluetooth Terminal.
Pertama-tama, aku merangkai skema sebagai berikut.
Berikut adalah tampilan rangkaian-ku setelah disambungkan dengan laptop melalui kabel USB.
Setelah itu, aku mencoba untuk menge-run program untuk mengoperasikan sensor DHT11 dan display LCD.
#include "DHT.h"
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);#include <LiquidCrystal_I2C.h>
#include <Wire.h>#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
#endifBluetoothSerial SerialBT;unsigned long delayTime;// set the LCD number of columns and rows
int lcdColumns = 16;
int lcdRows = 2;LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);
String message;void setup() {
// put your setup code here, to run once:
lcd.init();
lcd.backlight();
dht.begin();Serial.begin(115200);
SerialBT.begin("ESP32test"); //Bluetooth device name
Serial.println("The device started, now you can pair it with bluetooth!");
}void loop() {
// put your main code here, to run repeatedly:delay(1000);
// Check if any reads failed and exit early (to try again).
SerialBT.print("Hum: ");
SerialBT.print(dht.readHumidity());
SerialBT.println(" %");
SerialBT.print("Temp: ");
SerialBT.print(dht.readTemperature());
SerialBT.println(" C ");
delay(2000);if (SerialBT.available()){
lcd.clear();
message = "";
while(SerialBT.available()){
char inCome = SerialBT.read();
message += String(inCome);
}Serial.println(message);
lcd.setCursor(0, 0);
lcd.print(message);
}
}
Karena sebelumnya aku telah mengoneksikan bluetooth pada ESP32 dengan aplikasi Serial Bluetooth Terminal, suhu dan kelembaban yang diukur oleh sensor DHT11 akan langsung terlihat pada terminal.
Yep, percobaan Bluetooth Classic yang aku lakukan telah selesai! Saatnya kita mencoba mengoperasikan bluetooth low energy.
BLE SERVER
Pada percobaan kali ini, aku akan mencoba membuat BLE Server dengan ESP32.
Pada project ini, dibutuhkan alat-alat yang sama pada project sebelumnya, tetapi kita perlu untuk menginstall nRF Connect for Mobile pada smartphone kita.
Kita tidak memerlukan rangkaian apa-apa, kita hanya perlu memasangkan ESP32 pada laptop dengan menggunakan kabel USB. Setelah itu,kita memasukkan program BLE SERVER yang tersedia pada sketchbook Arduino IDE. Berikut adalah tampilan programnya.
/*
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("ESP32 BLE SERVER_IMA");
BLEServer *pServer = BLEDevice::createServer();
BLEService *pService = pServer->createService(SERVICE_UUID);
BLECharacteristic *pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE
);
pCharacteristic->setValue("Halo Ima, ini BLE server!!");
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);
}
Setelah membuka aplikasi, pencet “SCAN’ pada sebelah kanan atas, lalu kalian akan menemukan BLE SERVER ESP32 kalian. Pada percobaan ini, aku menamai bluetooth ku dengan “ESP32 BLE SERVER_IMA”. Setelah tersambung dengan bluetooth tersebut, kita dapat melihat tulisan yang kita masukkan pada program tertulis pada value yang dibawah oleh Unknown Characteristic. Untuk gambaran lebih jelasnya, kalian dapat melihat gambar di bawah.
Di sini-lah akhir dari project Bluetooth Communication Protocol yang aku lakukan dengan menggunakan ESP32 :D Terima kasih telah membaca, semoga bermanfaat!