---
# System prepended metadata

title: TP_IOT6_AzkaNabihan_2306250541

---

---
title: TP_Modul_6_Bluetooth_&_BLE

---

# Tugas Pendahuluan Modul 6 - Bluetooth & BLE

```
Nama  : Azka Nabihan
NPM   : 2306250541
```

> Note: Soal Programming tidak perlu dicantumkan referensi, hanya soal Teori saja yang perlu referensi minimal 2.

## Teori (70 Poin)

### 1. Jelaskan perbedaan arsitektur inti antara Bluetooth Classic (BR/EDR) dan Bluetooth Low Energy (BLE). Bandingkan keduanya berdasarkan: <span style="color:red;">(15 Poin)</span>
- Kasus Penggunaan Utama (Primary Use Case)
- Topologi Jaringan (Topology)
- Konsumsi Daya (Power Consumption)

---

- Kasus Penggunaan Utama (Primary Use Case)
    - Blueetooth Classic (BR/EDR) : protokol bluetooth orisina yagn dirancang untuk streaming data secara point to point. contohnya pada headphone nirkabel, speaker, sistem audio mobil dan transfer file[1].
    - Bluetooh Low Energy : Biasa digunakan untuk IoT pada pengiriman data singkat. biasanya mencakup perangkat yang dioperasikan dengan baterai seperti smartwatch[1].
- Topologi Jaringan (Topology)
    - Blueetooth Classic (BR/EDR) : Teknologi ini menggunakan topologi piconet, di mana satu perangkat master dapat terhubung hingga tujuh perangkat slave aktif. Pada dasarnya merupakan sistem point-to-point.
    - Bluetooth Low Energy (BLE) : BLE dapat melakukan koneksi point-to-point dalam topologi bintang, BLE juga mendukung mode broadcast (satu-ke-banyak) dan jaringan mesh (banyak-ke-banyak).
- Konsumsi Daya (Power Consumption)
    - Bluetooth Classic (BR/EDR) : Konsumsi dayanya tergolong sedang hingga tinggi, dengan perkiraan sekitar 1W. [2]
    -  Bluetooth Low Energy (BLE) : Konsumsi dayanya berkisar antara 0.001W hingga 0.5W. Sehingga konsumsi daya sangat rendah.
    
### Referensi:
- [1]“6.3 Core Technology Ar... | Digilab UI,” Digilabdte.com, 2025. [Online]. Available: https://learn.digilabdte.com/books/internet-of-things/page/63-core-technology-architectures. [Diakses: 8-September-2025]
- [2]Admin, “Classic Bluetooth Vs. Bluetooth Low Energy Comparison,” How To Electronics, Jan. 14, 2023. [Online]. Available: https://how2electronics.com/classic-bluetooth-vs-bluetooth-low-energy-comparison/. [Diakses: 8-September-2025]

---

### 2. Dalam pengembangan aplikasi BLE, GAP dan GATT adalah dua profil paling fundamental pada Protocol Stack. Jelaskan: <span style="color:red;">(20 Poin)</span>
- Peran dari Generic Access Profile (GAP) dan tiga tanggung jawab utamanya.
- Peran dari Generic Attribute Profile (GATT) dan jelaskan hierarki data yang ditetapkannya (Service, Characteristic, Descriptor).

---

- Peran dari Generic Access Profile (GAP) dan tiga tanggung jawab utamanya.
    Peran utama GAP adalah mendefinisikan bagaimana perangkat BLE menemukan satu sama lain, membuat koneksi, dan mengelola keamanan.
    Tiga Tanggung Jawab : 
    - Device Discovery : GAP mengatur bagaimana perangkat dapat membuat dirinya terlihat dan menemukan perangkat lain[1].
    - Connection Maanagement : GAP mendefinisikan prosedur untuk membangun koneksi antara dua perangkat. Mengadopsi peran yang berorientasi pada koneksi peripheral dan central.
    - Security Management : Memastikan komunikasi yang aman dan terlindungi antara perangkat yang terhubung[1].

- Peran dari Generic Attribute Profile (GATT) dan jelaskan hierarki data yang ditetapkannya (Service, Characteristic, Descriptor).
    Peran utama GATT adalah menentukan format dan prosedur untuk pertukaran data antara dua perangkat yang sudah terhubung. Setelah GAP berhasil membangun koneksi, GATT mengambil alih untuk mengatur bagaimana data dikirim dan diterima menggunakan model client-server.
    Hierarki data : 
    - Service : Wadah tingkat tertinggi yang mengelompokkan data yang saling terkait secara konseptual. Setiap Service terdiri dari satu atau lebih Characteristic. Seperti class pada konsep OOP.
    - Characteristic : unit data yang sebenarnya dan merupakan bagian dari sebuah Service. Ini adalah atribut yang berisi nilai data spesifik (misalnya, nilai detak jantung saat ini)[2].
    - Descriptor : atribut opsional yang memberikan informasi tambahan atau metadata tentang sebuah Characteristic. (misalnya, "pengukuran detak jantung per menit")[2].

### Referensi:
- [1]S. Stewart, “What are Bluetooth Low Energy, GAP and GATT?,” Contract Engineering, Product Design & Development Company - Cardinal Peak, Jan. 20, 2021. [Online]. Available: https://www.cardinalpeak.com/blog/what-is-ble-and-how-do-its-related-gap-and-gatt-profiles-work. . [Diakses: 8-September-2025]
- [2]“How GAP and GATT Work,” Punch Through, Jun. 24, 2013. [Online]. Available: https://punchthrough.com/how-gap-and-gatt-work/. . [Diakses: 8-September-2025]

---

### 3. Keamanan adalah pilar penting dalam komunikasi Bluetooth modern. Jelaskan tiga pilar keamanan yang dibangun pada LE Secure Connections: <span style="color:red;">(20 Poin)</span>
- Encryption (Confidentiality)
- Privacy (Anti-Tracking) menggunakan Resolvable Private Addresses (RPAs)
- Authentication untuk perlindungan terhadap serangan Man-in-the-Middle (MITM)

---

- Encryption (Confidentiality) : Memastikan bahwa hanya perangkat yang berwenang dapat membaca data yang dikirimkan sehingga melindungi dari upaya penyadapan oleh pihak ketiga[2].

- Privacy (Anti-Tracking) menggunakan Resolvable Private Addresses (RPAs) : dirancangn untuk mencegah pelacakan perangkat, sebagian besar perangkat BLE memiliki address yang unik, dan alamat ini dibawa dalam paket advertising[1]. BLE mengimplementasikan fitur privasi yagn bekerja dengan mengubah alamat perangkat secara berkala. 
    
- Authentication untuk perlindungan terhadap serangan Man-in-the-Middle (MITM) : pilar ketiga adalah autentikasi yang bertujuan untuk memverifikasi identitas perangkat dan membangung hubungan terpercaya, ini melindungi dari serangan MITM (Man In The MIddle). Untuk mencegah hal tersebut, BLKE mengimplementasikan prosedur autentikasi selama proses pairing[2].

### Referensi:

- [1]Nthatisi Hlapisi, “Bluetooth LE: Security Modes and Procedures Explained,” Allaboutcircuits.com, Sep. 24, 2023.  [Online]. Available: https://www.allaboutcircuits.com/technical-articles/bluetooth-le-security-modes-and-procedures-explained/. [Diakses: 8-September-2025]
- [2]“Bluetooth LE Security | Bluetooth LE Fundamentals | Bluetooth LE | latest | Silicon Labs,” Silabs.com, 2025.  [Online]. Available: https://docs.silabs.com/bluetooth/latest/bluetooth-le-fundamentals/08-bluetooth-smart-security. [Diakses: 8-September-2025]
‌
---

### 4. Dalam komunikasi BLE, sebuah perangkat dapat mengambil beberapa peran fundamental. Jelaskan peran dari: <span style="color:red;">(15 Poin)</span>
- Advertiser / Broadcaster  
- Scanner / Observer
- Central / Master
- Peripheral / Slave

---

- Advertiser / Broadcaster : perangkat yang mengirimkan adverstising packets ke perangkat lain di sekitarnya dan menunggu permintaan koneksi dari perangkat lain.

- Scanner / Observer : scanner akan mendengarkan advertising packets dan dapat meminta informasi tambahan dari advertiser[1]. observer mendengarkan paket iklan tetapi tidak memulai koneksi.

- Central / Master : perangkat yagn memulai dan mengelola koneksi, perangkat central akan mengirimkan permintaan koneksi, perangkat central juga mengatur waktu komunikasi dan parameter koneksi[2].

- Peripheral / Slave : perangkat yagn menerima permintaan koneksi dasri peranggkat central, sebelum konkesi terjali, peripheral bertindak sebagai advertiser untuk mengumumkan keberadaannya[2]. 

### Referensi:

- [1]“6.8 The Bluetooth Prot... | Digilab UI,” Digilabdte.com, 2025. [Online]. Available: https://learn.digilabdte.com/books/internet-of-things/page/68-the-bluetooth-protocol-stack. [Diakses: 8-September-2025]
- [2]E. John, “Understanding the Architecture of the Bluetooth Low Energy Stack - Embedded,” Embedded, Oct. 22, 2024. [Online]. Available: https://www.embedded.com/understanding-the-architecture-of-the-bluetooth-low-energy-stack/. [Diakses: 8-September-2025]
‌

---

## Programming (30 Poin)

### 5. Membuat Perangkat BLE Sederhana

Tugas kalian adalah membuat ESP32 berfungsi sebagai "remote terminal" via BLE. Perangkat ini akan:
- Melakukan advertising dengan nama unik kalian.
- Mencetak pesan ke Serial Monitor saat sebuah perangkat (misalnya, smartphone) terhubung.
- Mencetak pesan ke Serial Monitor saat perangkat tersebut terputus.
- Menerima pesan teks dari smartphone dan menampilkannya di Serial Monitor.

#### Output yang Diharapkan:
- Perangkat ESP32 kalian harus muncul di aplikasi pemindai BLE (seperti nRF Connect atau aplikasi serupa) dengan nama "ESP32_BLE_[NPM]" (ganti [NPM] dengan NPM kalian).
- Kode final
- Screenshot dari aplikasi pemindai BLE yang menunjukkan perangkat kalian terdeteksi.
- Analisis singkat tentang bagaimana kode tersebut bekerja.

#### Petunjuk:
1. Gunakan Arduino IDE atau PlatformIO untuk menulis kode.
2. Gunakan library BLE yang sesuai (seperti `BLEDevice.h` untuk Arduino).
3. Inisialisasi perangkat BLE dengan nama unik.
4. Mulai proses advertising.
5. Verifikasi dengan aplikasi pemindai BLE.

#### Kode Template
```ino
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

// TODO 1: Definisikan nama unik untuk perangkat BLE kalian.
// Format: "ESP32_{Nama}_{NPM}"
#define DEVICE_NAME "ESP32_Mai_12345"

// UUIDs untuk Service dan Characteristic (kalian bisa gunakan ini)
#define SERVICE_UUID        "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"

// --- Callback untuk Event dari Server (Connect/Disconnect) ---
class MyServerCallbacks: public BLEServerCallbacks {
    void onConnect(BLEServer* pServer) {
      // TODO 2: Tulis pesan "Device Connected" ke Serial Monitor
      // saat sebuah client terhubung.
    }

    void onDisconnect(BLEServer* pServer) {
      // TODO 3: Tulis pesan "Device Disconnected" ke Serial Monitor
      // saat client terputus.
    }
};

// --- Callback untuk Event dari Characteristic (Data Diterima) ---
class MyCharacteristicCallbacks: public BLECharacteristicCallbacks {
    void onWrite(BLECharacteristic *pCharacteristic) {
      // TODO 4: Dapatkan data yang dikirim dari client,
      // lalu cetak ke Serial Monitor.
      // Format Cetak: "Data Received: [data_kalian]"
    }
};


void setup() {
  Serial.begin(115200);
  Serial.println("Starting BLE work!");

  // Inisialisasi BLE Device
  BLEDevice::init(DEVICE_NAME);

  // TODO 5: Implementasikan logika setup untuk Server BLE.
  // 1. Buat BLE Server.
  BLEServer *pServer = /* ... */;
  
  // 2. Set callback untuk server menggunakan class MyServerCallbacks.
  
  
  // 3. Buat BLE Service.
  BLEService *pService = /* ... */;

  // 4. Buat BLE Characteristic di dalam service.
  //    Pastikan characteristic memiliki property WRITE.
  BLECharacteristic *pCharacteristic = /* ... */;
  
  // 5. Set callback untuk characteristic menggunakan class MyCharacteristicCallbacks.
  
  
  // 6. Start service.
  
  
  // 7. Mulai advertising agar perangkat bisa ditemukan.
  
  
  Serial.println("Device is now advertising! Ready to connect.");
}

void loop() {
  // Biarkan kosong. Semua pekerjaan ditangani oleh callback secara event-driven.
  delay(2000);
}
```

#### Kode Praktikan

```ino
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

// TODO 1: Definisikan nama unik untuk perangkat BLE kalian.
// Format: "ESP32_{Nama}_{NPM}"
#define DEVICE_NAME "ESP32_AzkaNabihan_2306250541"

// UUIDs untuk Service dan Characteristic (kalian bisa gunakan ini)
#define SERVICE_UUID        "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"

// --- Callback untuk Event dari Server (Connect/Disconnect) ---
class MyServerCallbacks: public BLEServerCallbacks {
    void onConnect(BLEServer* pServer) {
      // TODO 2: Tulis pesan "Device Connected" ke Serial Monitor
      // saat sebuah client terhubung.
      Serial.println("Device Connected");
    }

    void onDisconnect(BLEServer* pServer) {
      // TODO 3: Tulis pesan "Device Disconnected" ke Serial Monitor
      // saat client terputus.
      Serial.println("Device Disconnected");
    }
};

// --- Callback untuk Event dari Characteristic (Data Diterima) ---
class MyCharacteristicCallbacks: public BLECharacteristicCallbacks {
    void onWrite(BLECharacteristic *pCharacteristic) {
      // TODO 4: Dapatkan data yang dikirim dari client,
      // lalu cetak ke Serial Monitor.
      // Format Cetak: "Data Received: [data_kalian]"
      String rxValue = pCharacteristic->getValue();
      if(rxValue.length() > 0) {
        Serial.print("Data Received: ");
        Serial.println(rxValue.c_str());
      } 
    }
};


void setup() {
  Serial.begin(115200);
  Serial.println("Starting BLE work!");

  // Inisialisasi BLE Device
  BLEDevice::init(DEVICE_NAME);

  // TODO 5: Implementasikan logika setup untuk Server BLE.
  // 1. Buat BLE Server.
  BLEServer *pServer = BLEDevice::createServer();
  
  // 2. Set callback untuk server menggunakan class MyServerCallbacks.
  pServer->setCallbacks(new MyServerCallbacks());
  
  
  // 3. Buat BLE Service.
  BLEService *pService = pServer->createService(SERVICE_UUID);

  // 4. Buat BLE Characteristic di dalam service.
  //    Pastikan characteristic memiliki property WRITE.
   BLECharacteristic *pCharacteristic = pService->createCharacteristic(
    CHARACTERISTIC_UUID,
    BLECharacteristic::PROPERTY_WRITE
  );
  
  // 5. Set callback untuk characteristic menggunakan class MyCharacteristicCallbacks.
  pCharacteristic->setCallbacks(new MyCharacteristicCallbacks());
  
  
  // 6. Start service.
  pService->start();
  
  
  // 7. Mulai advertising agar perangkat bisa ditemukan.
  BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
  pAdvertising->addServiceUUID(SERVICE_UUID);
  pAdvertising->setScanResponse(true);
  pAdvertising->setMinPreferred(0x06);  // opsional, untuk kompatibilitas
  pAdvertising->setMinPreferred(0x12);
  BLEDevice::startAdvertising();
  
  Serial.println("Device is now advertising! Ready to connect.");
}

void loop() {
  // Biarkan kosong. Semua pekerjaan ditangani oleh callback secara event-driven.
  delay(2000);
}
```

#### Screenshot

<!-- GANTI WOI, INI HP GW -->
<!-- Tambahkan secukupnya, minimal screenshot print serial + HP kalian -->

! Print Serial | HP Kalian 1 | 
| --- | --- | 
| ![image](https://hackmd.io/_uploads/H180rwHage.png)| ![1175436_0](https://hackmd.io/_uploads/rk56YQBTee.jpg) | 

| HP Kalian 2 | HP Kalian 3 |
| --- | --- |
!![1175437_0](https://hackmd.io/_uploads/BysTYXrTxx.jpg) | ![1175438_0](https://hackmd.io/_uploads/HkMAtQHpge.jpg) |

#### Analisis Kode:

Kode di atas berfungsi untuk membuat ESP32 menjadi remote terminal menggunakan BLE yang mampu berkomunikasi dua arah dengan perangkat seperti smartphone. Program diawal dengan inisialisasi perangkat BLE menggunakan ESP32_AzkaNabihan_2306250541. ESP32 akan memulai advertising agar dapat ditemukan melalui aplikasi pemindai BLE seperti nRF Connect. Setelah koneksi terbentu, callback MyServerCallbacks akan mencetak pesan "Device Connected" ke serial monitor dan jika koneksi terputus akan mencetak "Device Disconnected". Seluruh proses komunikasi ditangani melalui callback.




