Disusun Oleh Kelompok 1:
| Muhammad Naufal Aziz | (24051204001) |
| Muhammad Rifqi Al Hafidh | (24051204009) |
| Ig. Krisna Wijaya Prihandono | (24051204032) |
| Ahmad Syihan Arijuddin | (24051204035) |
BAB I
PENDAHULUAN
1.1 Latar Belakang
Perkembangan teknologi Internet of Things (IoT) telah mengubah paradigma sistem pemantauan tersemat (embedded monitoring system) dari yang semula bersifat lokal menjadi sistem nirkabel yang terhubung langsung ke platform cloud real-time. Pada sistem pemantauan konvensional berbasis mikrokontroler standar tanpa modul nirkabel, pengiriman data sensor sering kali membutuhkan perantara komputer/laptop sebagai backend server untuk mengolah dan memvisualisasikan data. Keterbatasan ini berhasil diatasi oleh mikrokontroler modern ESP32 yang telah terintegrasi dengan modul Wi-Fi 2.4 GHz dan protokol jaringan TCP/IP internal.
Dalam konteks keamanan dan keselamatan lingkungan, pengukuran jarak objek secara akurat menggunakan sensor ultrasonik HC-SR04 menjadi komponen vital untuk mendeteksi bahaya seperti obstruksi jalur atau intrusi jarak dekat. Ketika objek mendekati ambang batas aman (threshold), sistem memerlukan mekanisme peringatan dini berupa indikator alarm lokal (buzzer) serta pengiriman data telemetri secara nirkabel ke platform cloud agar dapat dipantau oleh pengembang atau pengguna dari jarak jauh.
ThingsBoard Cloud merupakan salah satu platform IoT opensource andal yang memanfaatkan protokol messaging ringan MQTT (Message Queuing Telemetry Transport). Menggunakan protokol MQTT berbasis model publish/subscribe dan payload terstruktur JSON (JavaScript Object Notation), ESP32 dapat mempublikasikan data telemetri berupa nilai jarak dan status alarm secara periodik ke broker ThingsBoard tanpa membebani konsumsi daya dan memori perangkat. Laporan ini mendokumentasikan secara rinci implementasi teknis, pengujian, serta konfigurasi dashboard ThingsBoard pada proyek demo UTS 1.
1.2 Rumusan Masalah
1.Bagaimana merancang dan merangkai sistem pemantauan jarak berbasis ESP32, sensor ultrasonik HC-SR04, dan indikator alarm buzzer?
2.Bagaimana mengimplementasikan algoritma pengukuran jarak dan logika penentuan alarm berdasarkan ambang batas (threshold) 15 cm pada ESP32?
3.Bagaimana mengonfigurasi konektivitas Wi-Fi dan protokol MQTT pada ESP32 untuk mempublikasikan data telemetri berformat JSON ke ThingsBoard Cloud?
4.Bagaimana melakukan setup device, kredensial MQTT, dan pembuatan dashboard visualisasi (Radial Gauge dan LED Indicator) pada ThingsBoard Cloud?
1.3 Tujuan Laporan
1.Menganalisis arsitektur keras dan lunak sistem pemantauan jarak nirkabel berbasis ESP32 dan sensor HC-SR04.
2.Menjelaskan eksekusi algoritma pengukuran jarak ultrasonik serta mekanisme aktivasi buzzer saat jarak objek <= 15 cm.
3.Mendokumentasikan langkah-langkah konfigurasi platform ThingsBoard Cloud mulai dari registrasi akun, pembuatan device, hingga pembuatan dashboard telemetri.
4.Menyajikan dokumentasi teknis source code, skenario pengujian, serta analisis debug koneksi jaringan TCP dan MQTT secara terstruktur.
1.4 Manfaat Penulisan
Penulisan laporan ini diharapkan memberikan manfaat teoritis dan praktis dalam bidang arsitektur sistem IoT. Secara teoritis, laporan ini memperjelas integrasi protokol MQTT dan format JSON pada jaringan sensor nirkabel. Secara praktis, laporan ini menjadi panduan teknis bagi mahasiswa dan praktisi dalam mengintegrasikan perangkat ESP32 dengan platform cloud ThingsBoard secara stabil dan efisien.
BAB II
TINJAUAN PUSTAKA
2.1 Dasar Teori
2.1.1 Mikrokontroler ESP32
ESP32 adalah System on Chip (SoC) buatan Espressif Systems yang dilengkapi dengan prosesor dual-core Tensilica Xtensa LX6 32-bit. ESP32 memiliki memori Flash eksternal 4MB, SRAM 520KB, serta dukungan konektivitas nirkabel Wi-Fi 802.11 b/g/n dan Bluetooth 4.2/BLE. ESP32 beroperasi pada tegangan logika 3.3V dan menyediakan berbagai periferal I/O digital, ADC 12-bit, DAC, SPI, I2C, UART, dan PWM, menjadikannya pilihan utama untuk simpul sensor (sensor node) IoT.
2.1.2 Sensor Ultrasonik HC-SR04
Sensor HC-SR04 mengukur jarak objek menggunakan gelombang suara ultrasonik pada frekuensi 40 kHz. Sensor memiliki dua komponen utama: transmitter (TRIG) dan receiver (ECHO). Proses pengukuran diawali dengan memberikan pulsa logika HIGH selama 10 mikrodetik pada pin TRIG. Sensor kemudian memancarkan 8 siklus gelombang ultrasonik dan mengaktifkan pin ECHO menjadi HIGH. Waktu lamanya pin ECHO bernilai HIGH (duration) sebanding dengan waktu tempuh gelombang bolak-balik dari sensor ke objek dan kembali lagi. Jarak dihitung menggunakan rumus fisika berdasarkan kecepatan suara di udara (0.0343 cm/us):
Persamaan 1: Jarak (cm) = (Duration x 0.0343) / 2
2.1.3 Protokol Komunikasi MQTT dan Platform ThingsBoard Cloud
MQTT (Message Queuing Telemetry Transport) adalah protokol komunikasi publish/subscribe yang sangat ringan (lightweight) dan dirancang untuk perangkat berdaya rendah serta jaringan terbatas. MQTT berjalan di atas lapisan transport TCP/IP (port standar 1883). Perangkat ESP32 bertindak sebagai MQTT client yang mengirimkan data telemetri ke MQTT broker di ThingsBoard Cloud (eu.thingsboard.cloud) melalui topik standar 'v1/devices/me/telemetry'. Data dikemas dalam format JSON sederhana seperti {"distance": 12.34, "alarm": true}.\
2.2 Komponen
Berikut adalah daftar perangkat keras dan perangkat lunak yang digunakan dalam pembangunan dan pengujian sistem pemantauan jarak berbasis ESP32 dan ThingsBoard Cloud:
| No. | Komponen / Software | Jumlah / Spesifikasi | Fungsi Utama |
|---|---|---|---|
| 1 | ESP32 Development Board | 1 Unit (30 Pin, Wi-Fi 2.4GHz) | Mikrokontroler utama, pengolah data sensor, dan MQTT client nirkabel. |
| 2 | HC-SR04 Ultrasonic Sensor | 1 Unit (TRIG: GPIO 12, ECHO: GPIO 13) | Mengukur jarak objek menggunakan pulsa gelombang ultrasonik. |
| 3 | Buzzer Pasif/Aktif | 1 Unit (Signal: GPIO 14) | Indikator alarm lokal saat jarak objek <= 15 cm. |
| 4 | Kabel Jumper & Breadboard | Secukupnya (Male-to-Female / Male-to-Male) | Penghubung sirkuit antar komponen secara rinci. |
| 5 | Kabel USB Data | 1 Unit (Micro-USB / Type-C) | Catu daya 5V dan interface serial program dari PC ke ESP32. |
| 6 | Jaringan Wi-Fi | Wi-Fi 2.4 GHz (SSID: KAMMARI) | Jalur komunikasi nirkabel dari ESP32 ke internet. |
| 7 | Arduino IDE & Core ESP32 | Versi 2.x / Core 2.0.x | Lingkungan pengembangan kode C++ dan kompilasi program. |
| 8 | Library PubSubClient & ArduinoJson | PubSubClient v2.8, ArduinoJson v6.x | Pengelolaan koneksi MQTT broker dan pembentukan payload JSON. |
| 9 | ThingsBoard Cloud Platform | eu.thingsboard.cloud (Port 1883) | Platform IoT cloud penerima data telemetri dan penyedia dashboard. |
BAB III
PEMBAHASAN
3.1 Penjelasan simulasi
Subbab ini menjelaskan arsitektur simulasi sirkuit keras, mekanisme kerja program ESP32, serta panduan langkah demi langkah dalam melakukan set up akun, device, kredensial MQTT, dan pembuatan dashboard pada ThingsBoard Cloud berdasarkan acuan praktikum.
3.1.1 Skema Wiring dan Alur Kerja Sistem
Sistem pemantauan jarak dihubungkan dengan konfigurasi pinout sebagai berikut:
•Pin TRIG HC-SR04 dihubungkan ke GPIO 12 ESP32 (Output Trigger Pulsa).
•Pin ECHO HC-SR04 dihubungkan ke GPIO 13 ESP32 (Input Durasi Pulsa Echo). Catatan keselamatan hardware: Sinyal ECHO dari HC-SR04 standar beroperasi pada 5V, disarankan menggunakan voltage divider atau modul aman 3.3V untuk melindungi pin GPIO 13 ESP32.
•Pin Signal Buzzer dihubungkan ke GPIO 14 ESP32 (Output Alarm Digital).
•Pin VCC sensor/buzzer dihubungkan ke Pin 5V/VIN ESP32, dan seluruh GND terhubung pada Common Ground.

Alur kerja sistem berjalan dalam loop kontinu sebagai berikut:
1.ESP32 terhubung ke Wi-Fi local (KAMMARI) dan melakukan otentikasi TCP ke server ThingsBoard (eu.thingsboard.cloud:1883).
2.Setiap 2000 ms (2 detik), fungsi measureDistance() memicu pulsa TRIG 10 us dan membaca durasi ECHO melalui pulseIn() dengan timeout 30 ms.
3.Nilai durasi dikonversi menjadi jarak (cm). Jika jarak <= 15.0 cm, GPIO 14 diatur HIGH (Buzzer menyala) dan variabel alarm bernilai true. Jika jarak > 15.0 cm, Buzzer mati dan alarm bernilai false.
4.ArduinoJson menyusun dokumen JSON {"distance": distance, "alarm": boolean} dan dipublikasikan ke topik 'v1/devices/me/telemetry' melalui MQTT client.
3.1.2 Langkah-Langkah Set Up ThingsBoard dan Pembuatan Dashboard
Berdasarkan panduan praktikum ThingsBoard, berikut adalah prosedur lengkap penyiapan platform cloud dari registrasi hingga pembuatan visualisasi widget telemetri:
A. Set Up ThingsBoard dan Device
1.Mengakses website ThingsBoard: Buka peramban web dan akses url 'eu.thingsboard.cloud' atau website resmi ThingsBoard, lalu klik tombol 'Try it for free'.

2.Memilih Data Region: Pilih region server yang paling dekat dengan lokasi pengguna (misalnya Europe / Frankfurt) agar latency koneksi stabil.

3.Melakukan registrasi: Daftar akun baru dengan mengisi formulir pendaftaran (Email, Nama, Password) atau menautkan akun Google secara langsung.

4.Masuk ke beranda: Setelah verifikasi dan registrasi berhasil, pengguna diarahkan ke halaman beranda (Home Dashboard) ThingsBoard Cloud.

5.Membuka menu Devices: Navigasikan kursor ke sidebar kiri, pilih menu 'Entities' -> 'Devices' untuk mengelola perangkat IoT.

6.Menambah device baru: Klik tombol '+' atau 'Add new device' pada sudut kanan atas tabel perangkat.

7.Mengisi nama device: Ketik nama device sesuai nama proyek (misal: 'ESP32_Distance_Alarm' atau 'kelompok1'), lalu klik 'Next: Credentials'.

8.Mengatur credentials: Pilih jenis otentikasi 'MQTT Basic', masukkan Client ID, User Name, dan Password sesuai konfigurasi program, lalu klik 'Add'.

9.Device berhasil dibuat: Device baru akan muncul pada daftar perangkat dan siap menerima data telemetri MQTT dari ESP32.

B. Langkah Membuat Dashboard dan Widget Telemetri
1.Membuka menu Dashboards: Masuk ke menu 'Dashboards' pada sidebar kiri, lalu klik tombol 'Add new dashboard'.

2.Memilih jenis penambahan: Pilih opsi 'Create new dashboard' untuk membuat papan pemantauan baru dari awal.

3.Mengisi nama dashboard: Beri nama dashboard (misal: 'Dashboard Monitoring Jarak & Alarm ESP32'), lalu klik 'Add'.

4.Menambah widget baru: Buka dashboard yang telah dibuat, lalu klik tombol 'Add widget' pada area tengah atau kanan atas layar.

5.Memilih jenis widget: Pilih kategori widget yang sesuai. Untuk data variabel kontinu jarak digunakan 'Radial Gauge', sedangkan untuk status alarm buzzer digunakan 'LED Indicator'.



6.Konfigurasi Radial Gauge (Device & Data Key): Pada bagian Datasource, pilih type Device, pilih nama device yang dibuat, lalu set data key ke 'distance' atau 'jarak'.

7.Konfigurasi Radial Gauge (Satuan & Judul): Ubah Units Title menjadi 'Jarak Jangkauan' dan atur unit satuan ke 'centimeter' (cm).

8.Menyelesaikan widget Radial Gauge: Atur nilai minimum 0 dan maksimum 100 cm, kemudian klik 'Add' untuk memasang widget pada dashboard.

9.Setup LED Indicator untuk Buzzer: Tambahkan widget LED Indicator, atur Datasource ke device yang sama, dan masukkan data key 'alarm'.

10.Mengubah Appearance: Ubah judul tampilan widget pada tab Appearance menjadi 'Status Alarm Buzzer' (opsional).

11.Mengatur Value Setting: Scroll ke bawah pada tab Card Config, nonaktifkan 'Perform RPC Device', lalu ubah LED Retrieve status menjadi 'Subscribe for timeseries'.

12.Menyimpan Dashboard: Dashboard pemantauan telemetri real-time berhasil dibuat. Klik tombol 'Save' di kanan bawah agar seluruh konfigurasi tersimpan.

3.2 Program
Berikut adalah source code C++ lengkap yang diunggah ke mikrokontroler ESP32 untuk membaca sensor HC-SR04, mengendalikan buzzer, terhubung ke Wi-Fi, serta mempublikasikan data telemetri JSON ke ThingsBoard Cloud via MQTT:
#include <PubSubClient.h>
#include <ArduinoJson.h>
// --- KONFIGURASI WIFI & THINGSBOARD ---
const char* WIFI_SSID = "KAMMARI";
const char* WIFI_PASS = "surabaya";
const char* TB_SERVER = "eu.thingsboard.cloud";
const int TB_PORT = 1883;
const char* TOKEN = "THINGSBOARD_ACCESS_TOKEN";
// --- KONFIGURASI PIN ---
#define TRIG_PIN 12
#define ECHO_PIN 13
#define BUZZER_PIN 14
// Jarak ambang batas untuk peringatan buzzer (dalam cm)
const float DISTANCE_THRESHOLD = 15.0;
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
void setupWiFi() {
delay(10);
Serial.println();
Serial.print("Menghubungkan ke WiFi: ");
Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi Terhubung!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!client.connected()) {
Serial.println("\n=================[ DEBUG KONEKSI ]=================");
Serial.print("Menghubungkan ke IP Server: ");
Serial.print(TB_SERVER);
Serial.print(" pada Port: ");
Serial.println(TB_PORT);
// 1. DEBUG TAHAP 1: Tes Koneksi Jaringan Dasar (TCP Ping)
Serial.print("Tahap 1: Mengetuk pintu server (TCP Connect)... ");
if (espClient.connect(TB_SERVER, TB_PORT)) {
Serial.println("SUKSES!");
Serial.print("-> Hasil: ESP32 BISA melihat server dan Port ");
Serial.print(TB_PORT);
Serial.println(" terbuka.");
espClient.stop();
delay(500);
// 2. DEBUG TAHAP 2: Tes Otentikasi MQTT ThingsBoard
Serial.print("Tahap 2: Mencoba Login ke MQTT ThingsBoard... ");
if (client.connect("kelompok1", "kelompok1", "123456789")) {
Serial.println("TERHUBUNG TOTAL!");
Serial.println("===================================================\n");
} else {
Serial.print("GAGAL! rc = ");
Serial.println(client.state());
if (client.state() == -4) {
Serial.println("-> Analisis: Server menolak koneksi. Kemungkinan besar TOKEN / Username salah.");
} else if (client.state() == -2) {
Serial.println("-> Analisis: Koneksi mendadak putus saat proses handshake MQTT.");
} else if (client.state() == 5) {
Serial.println("-> Analisis: Username/Password salah atau tidak diizinkan oleh ThingsBoard.");
}
Serial.println("Mencoba lagi dalam 5 detik...");
Serial.println("===================================================\n");
delay(5000);
}
} else {
Serial.println("GAGAL TOTAL!");
Serial.println("-> Analisis Gagal di Tahap 1:");
Serial.print(" [A] IP '");
Serial.print(TB_SERVER);
Serial.println("' salah/berubah, ATAU");
Serial.println(" [B] Server ThingsBoard belum menyala/service MQTT mati, ATAU");
Serial.print(" [C] Firewall memblokir Port ");
Serial.print(TB_PORT);
Serial.println(".");
Serial.println("===================================================\n");
delay(5000);
}
}
}
float measureDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH, 30000); // Timeout 30ms
if (duration == 0) return -1.0;
float distanceCm = duration * 0.0343 / 2.0;
return distanceCm;
}
void setup() {
Serial.begin(115200);
while(!Serial) { ; }
Serial.println("\n--- Sistem Monitoring Jarak ESP32 Dimulai ---");
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(BUZZER_PIN, LOW);
setupWiFi();
client.setServer(TB_SERVER, TB_PORT);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
long now = millis();
if (now - lastMsg > 2000) {
lastMsg = now;
float distance = measureDistance();
Serial.println("----------------------------------------");
if (distance > 0) {
Serial.print("Jarak Terdeteksi: ");
Serial.print(distance);
Serial.println(" cm");
if (distance <= DISTANCE_THRESHOLD) {
digitalWrite(BUZZER_PIN, HIGH);
Serial.println("Status Alarm: AKTIF (Buzzer Menyala!)");
} else {
digitalWrite(BUZZER_PIN, LOW);
Serial.println("Status Alarm: AMAN");
}
StaticJsonDocument<200> doc;
doc["distance"] = distance;
doc["alarm"] = (distance <= DISTANCE_THRESHOLD);
char payload[200];
serializeJson(doc, payload);
Serial.print("Mengirim data JSON ke ThingsBoard: ");
Serial.println(payload);
if (client.publish("v1/devices/me/telemetry", payload)) {
Serial.println("Data Berhasil Dikirim!");
} else {
Serial.println("Data Gagal Dikirim ke MQTT Broker.");
}
} else {
Serial.println("Error: Sensor Ultrasonik di luar jangkauan atau tidak terbaca.");
}
}
}
BAB IV
PENUTUP
4.1 Kesimpulan
Berdasarkan hasil perancangan, implementasi, dan pengujian sistem pemantauan jarak berbasis ESP32 dan ThingsBoard Cloud pada demo UTS 1, dapat ditarik beberapa kesimpulan utama sebagai berikut:
1.Sistem pemantauan jarak nirkabel berhasil dibangun menggunakan ESP32, sensor ultrasonik HC-SR04, dan buzzer. Sistem mampu beroperasi secara mandiri terhubung ke Wi-Fi tanpa memerlukan laptop perantara.
2.Algoritma pengukuran jarak menggunakan fungsi pulseIn() dengan pembatas waktu (timeout 30 ms) dan konversi gelombang (0.0343/2) berjalan presisi. Logika ambang batas 15.0 cm terbukti efektif dalam memicu buzzer lokal secara real-time.
3.Protokol MQTT dan pembentukan data JSON menggunakan library ArduinoJson berhasil dipublikasikan ke topik 'v1/devices/me/telemetry' ThingsBoard Cloud secara stabil pada selang waktu 2000 ms.
4.Dashboard pemantauan pada ThingsBoard Cloud dengan widget Radial Gauge (jarak) dan LED Indicator (status alarm buzzer) berhasil dikonfigurasi dan menampilkan pembaruan data secara dinamis.
4.2 Saran
Untuk pengembangan dan peningkatan keandalan sistem di masa mendatang, disarankan beberapa poin perbaikan sebagai berikut:
1.Mengimplementasikan penyaringan data (seperti median filter atau moving average) pada hasil pembacaan HC-SR04 untuk meminimalisir lonjakan data noise.
2.Menyeragamkan otentikasi MQTT pada fungsi client.connect() dengan variabel TOKEN Access Token ThingsBoard yang dikonfigurasi pada bagian atas kode.
3.Menambahkan fitur auto-reconnect Wi-Fi jika koneksi nirkabel terputus di tengah jalan agar sistem lebih tangguh (robust).
DAFTAR PUSTAKA
Espressif Systems. (2023). ESP32 Series Datasheet v4.1. Espressif Systems Documentation.
ThingsBoard Authors. (2024). ThingsBoard Community Edition Documentation: MQTT Device API. ThingsBoard Cloud Services.
Oasis Open. (2019). MQTT Version 5.0 Specification. OASIS Standard.
KESIMPULAN
Link Youtube: https://www.youtube.com/watch?v=daZ_XoFWhf8
Tidak ada komentar:
Posting Komentar