Berikut contoh script .ino untuk ESP32 sebagai BLE Client, yang akan terhubung ke BLE Server dan membaca data dari karakteristik tertentu.
๐ Script BLE Client ESP32
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEScan.h>
#include <BLEAdvertisedDevice.h>
BLEScan* pBLEScan;
BLEAdvertisedDevice* myDevice;
bool deviceFound = false;
class MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks {
void onResult(BLEAdvertisedDevice advertisedDevice) {
Serial.println("Perangkat ditemukan: " + advertisedDevice.toString().c_str());
// Ganti dengan nama atau UUID perangkat BLE Server yang ingin dihubungkan
if (advertisedDevice.getName() == "ESP32_BLE") {
Serial.println("Target BLE ditemukan!");
myDevice = new BLEAdvertisedDevice(advertisedDevice);
deviceFound = true;
pBLEScan->stop();
}
}
};
void setup() {
Serial.begin(115200);
BLEDevice::init("");
pBLEScan = BLEDevice::getScan();
pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
pBLEScan->setActiveScan(true);
pBLEScan->start(5); // Scan selama 5 detik
if (deviceFound) {
BLEClient* pClient = BLEDevice::createClient();
pClient->connect(myDevice); // Koneksi ke server
BLERemoteService* pRemoteService = pClient->getService("12345678-1234-1234-1234-123456789abc");
if (pRemoteService == nullptr) {
Serial.println("Service tidak ditemukan.");
return;
}
BLERemoteCharacteristic* pRemoteCharacteristic = pRemoteService->getCharacteristic("abcd1234-ab12-cd34-ef56-abcdef123456");
if (pRemoteCharacteristic == nullptr) {
Serial.println("Karakteristik tidak ditemukan.");
return;
}
std::string value = pRemoteCharacteristic->readValue();
Serial.print("Data dari server: ");
Serial.println(value.c_str());
} else {
Serial.println("Perangkat BLE target tidak ditemukan.");
}
}
void loop() {
// Tidak ada loop aktif, bisa ditambahkan logika polling atau reconnect
}
#include <BLEUtils.h>
#include <BLEScan.h>
#include <BLEAdvertisedDevice.h>
BLEScan* pBLEScan;
BLEAdvertisedDevice* myDevice;
bool deviceFound = false;
class MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks {
void onResult(BLEAdvertisedDevice advertisedDevice) {
Serial.println("Perangkat ditemukan: " + advertisedDevice.toString().c_str());
// Ganti dengan nama atau UUID perangkat BLE Server yang ingin dihubungkan
if (advertisedDevice.getName() == "ESP32_BLE") {
Serial.println("Target BLE ditemukan!");
myDevice = new BLEAdvertisedDevice(advertisedDevice);
deviceFound = true;
pBLEScan->stop();
}
}
};
void setup() {
Serial.begin(115200);
BLEDevice::init("");
pBLEScan = BLEDevice::getScan();
pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
pBLEScan->setActiveScan(true);
pBLEScan->start(5); // Scan selama 5 detik
if (deviceFound) {
BLEClient* pClient = BLEDevice::createClient();
pClient->connect(myDevice); // Koneksi ke server
BLERemoteService* pRemoteService = pClient->getService("12345678-1234-1234-1234-123456789abc");
if (pRemoteService == nullptr) {
Serial.println("Service tidak ditemukan.");
return;
}
BLERemoteCharacteristic* pRemoteCharacteristic = pRemoteService->getCharacteristic("abcd1234-ab12-cd34-ef56-abcdef123456");
if (pRemoteCharacteristic == nullptr) {
Serial.println("Karakteristik tidak ditemukan.");
return;
}
std::string value = pRemoteCharacteristic->readValue();
Serial.print("Data dari server: ");
Serial.println(value.c_str());
} else {
Serial.println("Perangkat BLE target tidak ditemukan.");
}
}
void loop() {
// Tidak ada loop aktif, bisa ditambahkan logika polling atau reconnect
}
๐งช Catatan
Pastikan UUID service dan karakteristik sesuai dengan BLE Server yang kamu gunakan.
Nama perangkat BLE (
ESP32_BLE) harus cocok dengan yang disiarkan oleh server.Gunakan aplikasi seperti nRF Connect untuk memverifikasi UUID dan karakteristik.