---
# System prepended metadata

title: IOT_TP_Modul6

---

---
title: TP_Modul_6_Bluetooth_&_BLE

---

# Tugas Pendahuluan Modul 6 - Bluetooth & BLE

```
Nama  : Salim
NPM   : 2306204604
```

> 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)
BR/EDR : Sebagian besar digunakan untuk melakukan streaming audio, mengirimkan file, dan menggantikan kabel
BLE : Digunakan untuk beberapa aplikasi seperti smart home applications, medical devices, industrial dan manufacturing, LE Audio, mesh solutions, personal fitness trackers, dll. Selain itu, BLE juga digunakan untuk navigasi dalam ruangan, melacak barang, dan aplikasi dengan proximity.
- Topologi Jaringan (Topology)
BR/EDR : Peer-to-peer/Point-to-point (1:1)
BLE : Peer-to-peer/Point-to-point (1:1), Star topology (many:1), Broadcast (1:many), dan Mesh (many:many)
- Konsumsi Daya (Power Consumption)
BR/EDR : 1 W (sebagai nilai referensi)
BLE : sekitar 0.01 hingga to 0.5 W sebagai referensi sesuai dengan kasus penggunaan

### Referensi:

- [1]M. Afaneh, “Bluetooth vs. Bluetooth Low Energy: What’s the Difference? [2022 Update],” Novel Bits, Apr. 18, 2022. https://novelbits.io/bluetooth-low-energy-vs-bluetooth-classic-br-edr/
- [2]“Comparison of Bluetooth BR/EDR and Bluetooth LE Specifications - MATLAB & Simulink,” www.mathworks.com. https://www.mathworks.com/help/bluetooth/gs/comparison-of-bluetooth-bredr-and-bluetooth-le.html

---

### 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.
GAP memiliki dua peran yaitu Broadcasting Roles dan Connecting Roles. Broadcasting Roles berperan untuk menampilkan data melalui advertising dan mendapatkan data yang berasal dari advertising. Connecting roles berperan untuk menghubungkan dua atau lebih perangkat agar perangkat tersebut dapat saling bertukar data.
GAP memiliki tiga tanggung jawab utama, yaitu Device Discovery, Connection Management, dan Security. Device discovery merupakan tanggung jawab untuk menampilkan perangkat melalui advertising dan mencari perangkat lain melalui scanning. Connection Management memiliki tanggung jawab mengenai terhubung dan terputusnya dua atau lebih perangkat. Security memiliki tanggung jawab terhadap keamanan dari perangkat.
- Peran dari Generic Attribute Profile (GATT) dan jelaskan hierarki data yang ditetapkannya (Service, Characteristic, Descriptor).
Terdapat dua peran pada GATT, yaitu Client dan Server. Client berperan meminta data yang berada pada server dan client juga dapat membaca dan menulis atribut. Sedangkan server memiliki peran untuk menyimpan attribut sehingga dapat diakses oleh client melalui request dari client.
Terdapat hirearki data yang ditetapkan pada GATT yaitu Service, Characteristic, dan Descriptor. Service adalah kumpulan data dan behavior yang berhubungan yang digunakan untuk menyelesaikan fungsi atau fitur tertentu. Characteristic adalah nilai yang digunakan dalam service dengan izin yang sesuai. Descriptor adalah deskripsi yang berhubungan dengan characteristic behavior.

### Referensi:

- [3]“How GAP and GATT Work,” Punch Through, Jun. 24, 2013. https://punchthrough.com/how-gap-and-gatt-work/
- [4]“Generic Access Profile (GAP) — BLE5-Stack User’s Guide 1.00.00 documentation,” Ti.com, 2016. https://software-dl.ti.com/lprf/simplelink_cc2640r2_sdk/1.35.00.33/exports/docs/ble5stack/ble_user_guide/html/ble-stack/gap.html
- [5]“VisibleBreadcrumbs,” Mathworks.com, 2021. https://www.mathworks.com/help/bluetooth/ug/bluetooth-protocol-stack.html
- [6]“6.8 The Bluetooth Prot... | Digilab UI,” Digilabdte.com, 2025. https://learn.digilabdte.com/books/internet-of-things/page/68-the-bluetooth-protocol-stack

---

### 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)
Encryption merupakan pilar LE Secure Connections dengan menggunakan Elliptic Curve Diffie-Hellman (ECDH) untuk membuat shared secrets yang dapat mengurangi risiko serangan man-in-the-middle (MITM) karena data hanya dapat dibaca oleh kedua pihak yang saling terhubung.
- Privacy (Anti-Tracking) menggunakan Resolvable Private Addresses (RPAs)
Privacy merupakan pilar LE Secure Connections dengan menggunakan MAC address randomization yang mengganti MAC address bluetooth setiap kali digunakan menyebabkan MAC address tidak bertahan lama sehingga tidak dapat ditracking. MAC address randomization umumnya menggunakan Resolvable Private Addresses (RPAs) yang dibuat menggunakan Identity Resolving Key (IRK) sehingga perangkat yang dipercaya dapat saling mengenal dengan tanpa diketahui pihak luar.
- Authentication untuk perlindungan terhadap serangan Man-in-the-Middle (MITM)
Authentication merupakan pilar LE Secure Connections dapat dengan menggunakan beberapa cara seperti Passkey Entry dan Numeric Comparison. Passkey entry bekerja dengan memasukkan passkey 6 digit pada perangkat yang terhubung. Numeric comparison bekerja dengan menampilkan angka pada masing-masing perangkat jika angka yang tampil pada kedua perangkat sama, pairing dapat dilakukan dengan aman.

### Referensi:

- [7]“Bluetooth Low Energy (BLE) Security & Privacy: A 2025 Guide,” Argenox, May 07, 2025. https://argenox.com/blog/bluetooth-low-energy-ble-security-privacy-a-2025-guide
- [8]Ti.com, 2025. https://dev.ti.com/tirex/explore/node?node=A__AZlepia.Y63S3T6v-0IjMA__SIMPLELINK-ACADEMY-CC23XX__gsUPh5j__LATEST (accessed Oct. 09, 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 : Broadcaster memiliki peran untuk membagikan informasi yang akan diterima oleh observer.
- Scanner / Observer : Observer memiliki peran untuk menerima informasi yang akan dibagikan oleh broadcaster.
- Central / Master : Central memiliki peran untuk mencari peripheral yang dapat ditemukan dengan menggunakan scanning dan mengirimkan indikasi koneksi kepada peripheral tersebut.
- Peripheral / Slave : Peripheral memiliki peran untuk menampilkan keberadaannya melalui advertising.

### Referensi:

- [9]M. Afaneh, “The Bluetooth Low Energy Protocol Stack: Understanding the layers,” Novel Bits, Jul. 18, 2022. https://novelbits.io/bluetooth-low-energy-protocol-stack-layers/
- [10]M. Afaneh, “Mastering BLE: A Guide to Peripherals and Centrals,” Novel Bits, Jun. 08, 2023. https://novelbits.io/ble-peripherals-centrals-guide/

---

## 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 <Arduino.h>
#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_Salim_2306204604"

// 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 data = pCharacteristic->getValue();
      Serial.printf("Data Received: %s\n", data);
    }
};


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);
  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/B1QV4mSTll.png) | ![image](https://hackmd.io/_uploads/Syp88mSTle.png) | 

| HP Kalian 2 | HP Kalian 3 |
| --- | --- |
| ![image](https://hackmd.io/_uploads/B1grLQSTgl.png) | ![image](https://hackmd.io/_uploads/SkHGIXH6gl.png) |

#### Analisis Kode:

Kode ini berfungsi untuk membuat BLE Server dengan satu Service dan satu Characteristic yang menerima data dari client dan menampilkannya pada serial monitor. Selain itu, pada saat client connect/disconnect juga terdapat pesan pada serial monitor.