ESP32 & ESP8266

ESP32 Bluetooth BLE: Komunikasi Nirkabel Energi Rendah

TOKEN

Pelajari cara memanfaatkan Bluetooth Low Energy pada ESP32 untuk komunikasi nirkabel hemat daya dalam proyek IoT

1. BLE vs Classic Bluetooth

Bluetooth Low Energy (BLE) adalah protokol nirkabel yang dirancang oleh Bluetooth Special Interest Group (SIG) untuk komunikasi jarak pendek dengan konsumsi daya yang sangat rendah. Berbeda dengan Classic Bluetooth yang digunakan untuk streaming audio atau transfer file, BLE dioptimalkan untuk mengirimkan data kecil secara periodik โ€” sangat cocok untuk aplikasi IoT.

ESP32 mendukung kedua jenis Bluetooth ini: Classic Bluetooth (BR/EDR) dan Bluetooth Low Energy (BLE 4.2). Ini menjadikan ESP32 salah satu mikrokontroler paling fleksibel untuk proyek nirkabel.

Perbandingan BLE vs Classic Bluetooth

Fitur Classic Bluetooth Bluetooth Low Energy (BLE)
Konsumsi DayaTinggi (~30 mA)Sangat rendah (~15 ยตA sleep)
ThroughputHingga 3 MbpsHingga 2 Mbps
Latency~100 ms~6 ms
Jarak Efektif~100 m~100 m (tergantung TX power)
Ukuran DataStreaming kontinyuPaket kecil (hingga 512 bytes)
KoneksiPoint-to-pointPoint-to-point, Broadcast, Mesh
PenggunaanAudio, file transfer, serialSensor, beacon, wearable, IoT
Waktu Koneksi~100 ms~6 ms
๐Ÿ’ก Tips

Untuk proyek IoT yang menggunakan baterai, selalu pilih BLE dibanding Classic Bluetooth. BLE dapat berjalan bertahun-tahun dengan satu baterai koin CR2032 karena desain hemat dayanya.

๐Ÿ”ต
Classic Bluetooth
Koneksi Stabil & Cepat
  • โœ… Streaming audio (A2DP)
  • โœ… Transfer file besar (OBEX)
  • โœ… Serial Port Profile (SPP)
  • โŒ Konsumsi daya tinggi
  • โŒ Tidak cocok untuk baterai
  • โŒ Koneksi lambat
โšก
Bluetooth Low Energy
Hemat Daya & Fleksibel
  • โœ… Konsumsi daya sangat rendah
  • โœ… Koneksi cepat (6 ms)
  • โœ… Mendukung Beacon/Broadcast
  • โœ… Ideal untuk sensor IoT
  • โŒ Tidak cocok untuk streaming
  • โŒ Ukuran data terbatas

2. Arsitektur BLE: GATT Protocol

Untuk memahami BLE, kita harus memahami arsitektur protokolnya. BLE menggunakan model Client-Server dengan protokol yang disebut GATT (Generic Attribute Profile). GATT mendefinisikan bagaimana dua perangkat BLE bertukar data menggunakan konsep Services, Characteristics, dan Descriptors.

Arsitektur BLE GATT Protocol
๐Ÿ“ฑ
BLE Client
Smartphone / ESP32
๐Ÿ“ก
Advertising
Broadcast Data
๐Ÿ”ง
BLE Server
ESP32 / Sensor Node
โ†“
๐Ÿ“ฆ
Profile
Kumpulan Services
๐Ÿ”ง
Service
Kumpulan Characteristics
๐Ÿ“Š
Characteristic
Data + Properties
๐Ÿ“
Descriptor
Metadata tambahan

Komponen Utama GATT

โ„น๏ธ UUID dalam BLE

UUID standar BLE menggunakan format 16-bit (contoh: 0x180D) yang disematkan dalam base UUID Bluetooth SIG: 0000XXXX-0000-1000-8000-00805F9B34FB. Untuk custom service, gunakan UUID 128-bit unik yang Anda generate sendiri.

Contoh Struktur GATT: Weather Station
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Weather Station (Profile)              โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  ๐Ÿ“ฆ Service: Environmental Sensing      โ”‚
โ”‚     UUID: 0x181A                        โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚ ๐Ÿ“Š Characteristic: Temperature    โ”‚  โ”‚
โ”‚  โ”‚    UUID: 0x2A6E                   โ”‚  โ”‚
โ”‚  โ”‚    Properties: Read, Notify       โ”‚  โ”‚
โ”‚  โ”‚    Value: 25.5 ยฐC                 โ”‚  โ”‚
โ”‚  โ”‚    ๐Ÿ“ Descriptor: "Suhu ruangan"  โ”‚  โ”‚
โ”‚  โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค  โ”‚
โ”‚  โ”‚ ๐Ÿ“Š Characteristic: Humidity       โ”‚  โ”‚
โ”‚  โ”‚    UUID: 0x2A6F                   โ”‚  โ”‚
โ”‚  โ”‚    Properties: Read, Notify       โ”‚  โ”‚
โ”‚  โ”‚    Value: 65 %                    โ”‚  โ”‚
โ”‚  โ”‚    ๐Ÿ“ Descriptor: "Kelembaban"    โ”‚  โ”‚
โ”‚  โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค  โ”‚
โ”‚  โ”‚ ๐Ÿ“Š Characteristic: Pressure       โ”‚  โ”‚
โ”‚  โ”‚    UUID: 0x2A6D                   โ”‚  โ”‚
โ”‚  โ”‚    Properties: Read               โ”‚  โ”‚
โ”‚  โ”‚    Value: 1013 hPa               โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

3. Setup ESP32 BLE

ESP32 memiliki Bluetooth controller terintegrasi yang mendukung BR/EDR dan BLE. Untuk menggunakan BLE di Arduino IDE, kita perlu menginstal library yang tepat.

Library yang Dibutuhkan

ESP32 Arduino Core sudah termasuk library BLE bawaan, jadi Anda tidak perlu menginstal library tambahan. Cukup gunakan header berikut:

C++ โ€” Include Libraries BLE
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

Inisialisasi BLE Device

C++ โ€” Inisialisasi BLE
void setup() {
  Serial.begin(115200);

  // Inisialisasi BLE dengan nama device
  BLEDevice::init("ESP32-BLE-Server");

  // Buat BLE Server
  BLEServer *pServer = BLEDevice::createServer();

  Serial.println("BLE Device initialized!");
  Serial.print("MAC Address: ");
  Serial.println(BLEDevice::getAddress().toString().c_str());
}
โš ๏ธ Peringatan

Nama BLE device terbatas 29 karakter. Jika nama terlalu panjang, akan dipotong secara otomatis. Gunakan nama yang singkat dan deskriptif seperti "ESP32-Sensor" atau "BeebaneLabs-Node".

4. Membuat BLE Server

BLE Server adalah perangkat yang menyediakan data (biasanya sensor node). Server membuat services dan characteristics, lalu mengiklankan (advertise) keberadaannya agar client dapat menemukan dan terhubung.

Kode Lengkap BLE Server dengan DHT Sensor

C++ โ€” ble_server_dht.ino
// BLE Server - ESP32 dengan Sensor DHT22
// BeebaneLabs - https://beebanelabs.pages.dev

#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
#include <DHT.h>

// UUID untuk service dan characteristic
#define SERVICE_UUID        "12345678-1234-1234-1234-123456789abc"
#define TEMP_CHAR_UUID      "12345678-1234-1234-1234-123456789ab1"
#define HUMID_CHAR_UUID     "12345678-1234-1234-1234-123456789ab2"

// Pin dan tipe sensor
#define DHT_PIN 4
#define DHT_TYPE DHT22

DHT dht(DHT_PIN, DHT_TYPE);

BLEServer* pServer = NULL;
BLECharacteristic* pTempChar = NULL;
BLECharacteristic* pHumidChar = NULL;
bool deviceConnected = false;
bool oldDeviceConnected = false;

// Callback saat client terhubung/putus
class MyServerCallbacks: public BLEServerCallbacks {
  void onConnect(BLEServer* pServer) {
    deviceConnected = true;
    Serial.println("Client terhubung!");
  }

  void onDisconnect(BLEServer* pServer) {
    deviceConnected = false;
    Serial.println("Client terputus!");
  }
};

void setup() {
  Serial.begin(115200);
  dht.begin();

  // Inisialisasi BLE
  BLEDevice::init("ESP32-WeatherStation");

  // Buat BLE Server
  pServer = BLEDevice::createServer();
  pServer->setCallbacks(new MyServerCallbacks());

  // Buat BLE Service
  BLEService* pService = pServer->createService(SERVICE_UUID);

  // Buat Characteristic untuk Suhu
  pTempChar = pService->createCharacteristic(
    TEMP_CHAR_UUID,
    BLECharacteristic::PROPERTY_READ |
    BLECharacteristic::PROPERTY_NOTIFY
  );
  pTempChar->addDescriptor(new BLE2902());

  // Buat Characteristic untuk Kelembaban
  pHumidChar = pService->createCharacteristic(
    HUMID_CHAR_UUID,
    BLECharacteristic::PROPERTY_READ |
    BLECharacteristic::PROPERTY_NOTIFY
  );
  pHumidChar->addDescriptor(new BLE2902());

  // Mulai service
  pService->start();

  // Mulai advertising
  BLEAdvertising* pAdvertising = BLEDevice::getAdvertising();
  pAdvertising->addServiceUUID(SERVICE_UUID);
  pAdvertising->setScanResponse(true);
  pAdvertising->setMinPreferred(0x06);
  BLEDevice::startAdvertising();

  Serial.println("BLE Server aktif! Menunggu koneksi...");
}

void loop() {
  if (deviceConnected) {
    // Baca sensor DHT22
    float temperature = dht.readTemperature();
    float humidity = dht.readHumidity();

    if (!isnan(temperature) && !isnan(humidity)) {
      // Kirim data suhu
      char tempStr[8];
      dtostrf(temperature, 4, 1, tempStr);
      pTempChar->setValue(tempStr);
      pTempChar->notify();
      Serial.print("Suhu: ");
      Serial.print(tempStr);
      Serial.println(" ยฐC");

      // Kirim data kelembaban
      char humidStr[8];
      dtostrf(humidity, 4, 1, humidStr);
      pHumidChar->setValue(humidStr);
      pHumidChar->notify();
      Serial.print("Kelembaban: ");
      Serial.print(humidStr);
      Serial.println(" %");
    }
  }

  // Handle reconnection
  if (!deviceConnected && oldDeviceConnected) {
    delay(500);
    pServer->startAdvertising();
    Serial.println("Mulai advertising lagi...");
    oldDeviceConnected = deviceConnected;
  }
  if (deviceConnected && !oldDeviceConnected) {
    oldDeviceConnected = deviceConnected;
  }

  delay(2000); // Kirim data setiap 2 detik
}
๐Ÿ’ก Tips

Gunakan nRF Connect app (tersedia di Android dan iOS) untuk memindai dan menguji BLE Server Anda. Aplikasi ini sangat berguna untuk debugging dan memverifikasi bahwa service serta characteristic terbaca dengan benar.

5. Membuat BLE Client

BLE Client adalah perangkat yang mencari dan terhubung ke BLE Server untuk membaca data. Dalam contoh ini, kita akan membuat ESP32 kedua yang bertindak sebagai client dan membaca data suhu dari server.

C++ โ€” ble_client_reader.ino
// BLE Client - Membaca data dari BLE Server
// BeebaneLabs - https://beebanelabs.pages.dev

#include "BLEDevice.h"

// UUID yang sama dengan server
#define SERVICE_UUID        "12345678-1234-1234-1234-123456789abc"
#define TEMP_CHAR_UUID      "12345678-1234-1234-1234-123456789ab1"

static BLEAddress* pServerAddress;
static boolean doConnect = false;
static boolean connected = false;
static BLERemoteCharacteristic* pTempCharacteristic;

// Callback saat menemukan device
class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
  void onResult(BLEAdvertisedDevice advertisedDevice) {
    if (advertisedDevice.haveServiceUUID() &&
        advertisedDevice.isAdvertisingService(BLEUUID(SERVICE_UUID))) {
      BLEDevice::getScan().stop();
      pServerAddress = new BLEAddress(advertisedDevice.getAddress());
      doConnect = true;
      Serial.print("Server ditemukan: ");
      Serial.println(advertisedDevice.toString().c_str());
    }
  }
};

bool connectToServer() {
  Serial.print("Menghubungkan ke ");
  Serial.println(pServerAddress->toString().c_str());

  BLEClient* pClient = BLEDevice::createClient();
  pClient->connect(*pServerAddress);

  BLERemoteService* pRemoteService =
    pClient->getService(BLEUUID(SERVICE_UUID));

  if (pRemoteService == nullptr) {
    Serial.println("Service tidak ditemukan!");
    pClient->disconnect();
    return false;
  }

  pTempCharacteristic =
    pRemoteService->getCharacteristic(BLEUUID(TEMP_CHAR_UUID));

  if (pTempCharacteristic == nullptr) {
    Serial.println("Characteristic tidak ditemukan!");
    pClient->disconnect();
    return false;
  }

  // Register callback untuk notifikasi
  pTempCharacteristic->registerForNotify([](
    BLERemoteCharacteristic* pChar,
    uint8_t* pData, size_t length, bool isNotify
  ) {
    String value = String((char*)pData);
    Serial.print("Suhu dari server: ");
    Serial.print(value);
    Serial.println(" ยฐC");
  });

  connected = true;
  return true;
}

void setup() {
  Serial.begin(115200);
  Serial.println("BLE Client - Scanning...");

  BLEDevice::init("");
  BLEScan* pBLEScan = BLEDevice::getScan();
  pBLEScan->setAdvertisedDeviceCallbacks(
    new MyAdvertisedDeviceCallbacks()
  );
  pBLEScan->setActiveScan(true);
  pBLEScan->start(30); // Scan selama 30 detik
}

void loop() {
  if (doConnect) {
    if (connectToServer()) {
      Serial.println("Terhubung ke BLE Server!");
    } else {
      Serial.println("Gagal terhubung.");
    }
    doConnect = false;
  }
  delay(1000);
}

6. Transfer Data BLE

BLE memiliki batasan ukuran data per transaksi. Secara default, MTU (Maximum Transmission Unit) BLE adalah 23 bytes, di mana 3 bytes digunakan untuk header ATT, sehingga hanya 20 bytes payload yang tersedia. Namun ESP32 mendukung MTU negosiasi hingga 512 bytes.

Mode Komunikasi BLE

Mode Arah Deskripsi
ReadClient โ†’ ServerClient membaca value dari characteristic
WriteClient โ†’ ServerClient menulis value ke characteristic
NotifyServer โ†’ ClientServer mengirim data otomatis saat berubah
IndicateServer โ†’ ClientSeperti Notify tapi dengan ACK

Mengirim Data String Besar

C++ โ€” Transfer data besar via BLE
// Fungsi untuk mengirim data panjang via BLE
// Memecah data menjadi paket-paket kecil
void sendDataChunked(BLECharacteristic* pChar, String data) {
  int chunkSize = 20; // MTU default
  int dataLen = data.length();
  int offset = 0;

  while (offset < dataLen) {
    int len = min(chunkSize, dataLen - offset);
    String chunk = data.substring(offset, offset + len);

    pChar->setValue((uint8_t*)chunk.c_str(), len);
    pChar->notify();

    offset += len;
    delay(50); // Delay antar paket
  }

  // Kirim terminator
  pChar->setValue((uint8_t*)"\0", 1);
  pChar->notify();
}

// Mengirim struct sensor data
struct SensorData {
  float temperature;
  float humidity;
  float pressure;
  uint16_t battery;
};

void sendSensorStruct(BLECharacteristic* pChar, SensorData data) {
  pChar->setValue((uint8_t*)&data, sizeof(SensorData));
  pChar->notify();
}
โ„น๏ธ Mengatasi MTU Limit

Untuk meningkatkan MTU, gunakan pClient->setMTU(512) pada sisi client sebelum koneksi. Namun, perlu diingat bahwa tidak semua perangkat mendukung MTU besar. Aman menggunakan 20 bytes untuk kompatibilitas maksimal dengan smartphone.

7. BLE Beacons (iBeacon & Eddystone)

BLE Beacon adalah mode di mana perangkat BLE menyiarkan (broadcast) informasi secara terus-menerus tanpa perlu koneksi. Ini sangat berguna untuk indoor positioning, asset tracking, dan proximity marketing.

Dua Format Beacon Utama

Membuat iBeacon dengan ESP32

C++ โ€” esp32_ibeacon.ino
// iBeacon dengan ESP32
// BeebaneLabs - https://beebanelabs.pages.dev

#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLEBeacon.h>

#define BEACON_UUID "12345678-1234-1234-1234-123456789abc"

void setup() {
  Serial.begin(115200);
  Serial.println("ESP32 iBeacon Starting...");

  BLEDevice::init("BeebaneLabs-Beacon");

  // Buat iBeacon
  BLEBeacon oBeacon = BLEBeacon();
  oBeacon.setManufacturerId(0x4C00); // Apple manufacturer ID
  oBeacon.setProximityUUID(BLEUUID(BEACON_UUID));
  oBeacon.setMajor(1);  // Major number
  oBeacon.setMinor(10); // Minor number
  oBeacon.setSignalPower(-59); // RSSI pada 1 meter

  BLEAdvertisementData oAdvertisementData = BLEAdvertisementData();
  BLEAdvertisementData oScanResponseData = BLEAdvertisementData();

  oAdvertisementData.setFlags(0x04); // BR/EDR Not Supported

  std::string strServiceData = "";
  strServiceData += (char)26;     // Panjang
  strServiceData += (char)0xFF;   // Type: Manufacturer Specific
  strServiceData += oBeacon.getData();
  oAdvertisementData.addData(strServiceData);

  BLEAdvertising* pAdvertising = BLEDevice::getAdvertising();
  pAdvertising->setAdvertisementData(oAdvertisementData);
  pAdvertising->setScanResponseData(oScanResponseData);
  pAdvertising->setMinPreferred(0x06);
  pAdvertising->setMinPreferred(0x12);

  BLEDevice::startAdvertising();
  Serial.println("iBeacon aktif dan broadcasting!");
}

void loop() {
  delay(1000);
}
๐Ÿ’ก Tips Beacon

Gunakan app Beacon Simulator atau nRF Connect untuk memverifikasi beacon ESP32 Anda terdeteksi. Untuk indoor positioning, pasang minimal 3 beacon dan gunakan trilateration berdasarkan RSSI.

8. Keamanan BLE

Keamanan adalah aspek penting dalam komunikasi BLE, terutama untuk perangkat IoT yang mengirim data sensitif. BLE mendukung beberapa tingkat keamanan:

Tingkat Keamanan BLE

Level Nama Deskripsi
Level 1No SecurityTanpa enkripsi, tanpa autentikasi
Level 2Unauthenticated EncryptionEnkripsi tanpa pairing (Just Works)
Level 3Authenticated EncryptionEnkripsi dengan pairing (PIN/Passkey)
Level 4Authenticated LE SCSecure Connections dengan ECDH

Mengaktifkan Keamanan pada BLE Server

C++ โ€” BLE Security Configuration
// Konfigurasi keamanan BLE
// BeebaneLabs - https://beebanelabs.pages.dev

void setupSecurity() {
  // Set security
  BLESecurity* pSecurity = new BLESecurity();

  // Set authentication mode
  pSecurity->setAuthenticationMode(ESP_LE_AUTH_REQ_SC_BOND);

  // Set encryption key size
  pSecurity->setCapability(ESP_IO_CAP_NONE);

  // Set static PIN (untuk pairing dengan passkey)
  // pSecurity->setCapability(ESP_IO_CAP_OUT);
  // pSecurity->setInitEncryptionKey(ESP_BLE_ENC_KEY_MASK |
  //                                  ESP_BLE_ID_KEY_MASK);

  // Set key size
  BLEDevice::setEncryptionLevel(ESP_BLE_SEC_ENCRYPT);

  // Set passkey (6 digit)
  // BLEDevice::setSecurityAuth(true, true, true);
  // pSecurity->setStaticPIN(123456);

  Serial.println("BLE Security diaktifkan!");
}

// Protect characteristic dengan keamanan
void setupSecureCharacteristic(BLEService* pService) {
  BLECharacteristic* pSecureChar =
    pService->createCharacteristic(
      SECURE_CHAR_UUID,
      BLECharacteristic::PROPERTY_READ |
      BLECharacteristic::PROPERTY_WRITE
    );

  // Set characteristic hanya bisa diakses setelah pairing
  pSecureChar->setAccessPermissions(
    ESP_GATT_PERM_READ_ENCRYPTED |
    ESP_GATT_PERM_WRITE_ENCRYPTED
  );

  pSecureChar->setValue("Secret Data");
}
โš ๏ธ Peringatan Keamanan

Jangan pernah mengirim data sensitif (password, token, API key) melalui BLE tanpa enkripsi. Gunakan minimal Level 2 (unauthenticated encryption) bahkan untuk proyek sederhana. Untuk aplikasi produksi, gunakan Level 4 (LE Secure Connections).

9. Quiz: Uji Pemahamanmu!

Setelah membaca tutorial di atas, jawablah 5 pertanyaan berikut untuk menguji pemahamanmu tentang ESP32 Bluetooth BLE:

Pertanyaan 1: Apa keunggulan utama BLE dibanding Classic Bluetooth?

a) Kecepatan transfer data lebih tinggi
b) Jarak komunikasi lebih jauh
c) Konsumsi daya sangat rendah
d) Dapat terhubung ke lebih banyak perangkat

Pertanyaan 2: Dalam arsitektur GATT, apa yang dimaksud dengan "Characteristic"?

a) Kumpulan services yang membentuk profil
b) Unit data terkecil dengan value dan properties
c) Nama yang diberikan ke perangkat BLE
d) Alamat MAC perangkat BLE

Pertanyaan 3: Berapa ukuran payload default yang dapat dikirim per transaksi BLE?

a) 512 bytes
b) 256 bytes
c) 128 bytes
d) 20 bytes

Pertanyaan 4: Apa fungsi dari BLE Beacon?

a) Streaming audio ke headphone
b) Mengirim file besar antar perangkat
c) Broadcast informasi tanpa koneksi
d) Menggantikan WiFi untuk internet

Pertanyaan 5: Level keamanan BLE mana yang menggunakan ECDH untuk Secure Connections?

a) Level 1
b) Level 2
c) Level 3
d) Level 4
โ† Sebelumnya Panduan Lengkap ESP32 Selanjutnya โ†’ FreeRTOS pada ESP32