Minggu, 01 November 2026

SISTEM ANTREAN & PANGGILAN PASIEN KLINIK ESP32 DENGAN PROTOKOL MQTT VIA WEBSOCKET

 SISTEM ANTREAN & PANGGILAN PASIEN KLINIK ESP32 DENGAN PROTOKOL MQTT VIA WEBSOCKET



Disusun oleh Kelompok 7 :

Ahmad Aura Syahrul Muharrom

24051204203

Dave Osvaldo Adris

24051204172




BAB I 

PENDAHULUAN


  1. Latar Belakang


Perkembangan teknologi telah mencapai pada satu titik dimana data tidak perlu diinputkan secara manual oleh manusia, dan hal itu disebut Internet of Things (IoT). Konsep dari IoT ini menjadikan suatu alat dapat menerima inputan secara mandiri melalui sensor-sensor maupun tombol antarmuka, serta mengeksekusi aksi melalui aktuator secara otomatis. Teknologi ini memungkinkan integrasi antara dunia fisik dan sistem digital guna mempermudah operasional pelayanan publik, salah satunya pada sistem antrean di fasilitas kesehatan atau klinik.

Namun, dalam pengembangan teknologi IoT yang semakin kompleks, muncul tantangan utama mengenai efisiensi komunikasi data real-time antara perangkat keras (microcontroller) dan aplikasi antarmuka pengguna (web dashboard). Protokol HTTP tradisional dengan mekanisme request-response memiliki keterbatasan berupa overhead header yang besar dan sifat ketidakpersistenan koneksi, sehingga kurang efisien jika diterapkan pada sistem antrean yang membutuhkan pembaruan data secara instan dua arah (full-duplex).

Oleh karena itu, pada praktikum ini dipelajari penerapan protokol Message Queuing Telemetry Transport (MQTT) yang dikombinasikan dengan teknologi WebSocket. MQTT merupakan standar komunikasi protokol terbuka yang didesain khusus untuk interaksi machine-to-machine (M2M) dengan model arsitektur Publish/Subscribe. Melalui jalur WebSocket pada port HTTP standard, aplikasi berbasis browser JavaScript (menggunakan library Eclipse Paho JS) dapat terhubung langsung ke MQTT Broker tanpa terhalang oleh aturan firewall jaringan, sehingga pembaruan antrean pasien dan perintah panggilan dapat ditransmisikan secara serentak tanpa jeda waktu.



BAB II 

LANDASAN TEORI


2.1 Internet of Things (IoT) dan ESP32


Internet of Things (IoT) merupakan sebuah paradigma di mana berbagai perangkat fisik yang dilengkapi dengan sensor, mikrokontroler, dan perangkat lunak terhubung ke jaringan internet untuk mengumpulkan dan mempertukarkan data. ESP32 adalah modul mikrokontroler berbasis System-on-Chip (SoC) buatan Espressif Systems yang mendukung konektivitas WiFi (802.11 b/g/n) dan Bluetooth secara terintegrasi. ESP32 memiliki prosesor Tensilica Xtensa Dual-Core 32-bit yang sangat efisien untuk mengolah pemrosesan data IoT serta komunikasi jaringan.


2.2 Protokol MQTT (Message Queuing Telemetry Transport)


Message Queuing Telemetry Transport (MQTT) adalah protokol komunikasi data berbasis arsitektur Publish/Subscribe yang beroperasi di atas lapisan TCP/IP. Berbeda dengan protokol HTTP yang berbasis Request-Response dan memiliki overhead header besar, MQTT dirancang sangat ringkas (lightweight) sehingga menghemat konsumsi daya dan penggunaan bandwidth. Komunikasi MQTT melibatkan tiga elemen utama: Publisher (pengirim pesan), Broker (server perantara penyaring dan pendistribusi pesan), serta Subscriber (penerima pesan yang berlangganan pada topik tertentu).


2.3 WebSocket dan Eclipse Paho JavaScript Client


WebSocket adalah protokol komunikasi komputer dua arah (full-duplex) melalui saluran persisten tunggal berbasis TCP. Pada aplikasi peramban web (browser), protokol MQTT standar (port TCP 1883) tidak dapat diakses langsung oleh JavaScript karena aturan keamanan browser. Solusinya adalah mentransmisikan paket MQTT di atas lapisan WebSocket (MQTT via WebSocket) menggunakan port 8000/8083. Library Eclipse Paho JS merupakan pustaka klien open-source yang memungkinkan halaman web HTML/JS terhubung dan bertukar pesan langsung dengan MQTT Broker secara real-time.


2.4 Antarmuka I2C dan Komponen Periferal


Inter-Integrated Circuit (I2C) adalah protokol komunikasi serial sinkron dua kawat yang menggunakan saluran Serial Data (SDA) dan Serial Clock (SCL). Penggunaan backpack I2C pada modul layar LCD 16x2 memangkas kebutuhan jalur data sehingga ESP32 cukup menggunakan 2 pin GPIO untuk mengontrol tampilan karakter. Komponen pendukung lain seperti Push Button berfungsi sebagai sakelar input digital, sedangkan Buzzer dan LED bertindak sebagai aktuator keluaran sinyal audio-visual saat terjadi interaksi antrean.




BAB III 

PEMBAHASAN


3.1 Perancangan Sistem


Sistem yang dirancang pada praktikum ini merupakan Sistem Antrean dan Panggilan Pasien Klinik berbasis IoT menggunakan ESP32 DevKitV1 yang disimulasikan melalui platform Wokwi dan dihubungkan ke Web Dashboard interaktif. Sistem ini menggantikan mekanisme pengambilan nomor antrean fisik konvensional dengan sistem terintegrasi digital yang memberikan konfirmasi audio-visual secara otomatis.

Pengunjung atau pasien dapat mengambil nomor antrean dengan menekan tombol fisik (Push Button) pada perangkat simulator. Informasi nomor antrean terbaru selanjutnya ditampilkan pada layar LCD 16x2 I2C dan dikirimkan secara langsung melalui komunikasi MQTT ke Web Dashboard Dokter. Petugas klinik atau dokter yang bertugas dapat melihat daftar antrean secara real-time dan melakukan panggilan pasien melalui tombol aksi pada web. Saat tombol panggilan ditekan, pesan instruksi dikirimkan kembali ke ESP32 via WebSocket untuk menyalakan indikator lampu (LED) dan membunyikan nada panggil (Buzzer).

Secara umum, sistem terdiri dari lima komponen utama, yaitu:

  1. Input: Berupa Push Button pada ESP32 untuk mengambil antrean baru dan tombol aksi pada Web Dashboard untuk melakukan panggilan pasien.

  2. Processing: Berupa ESP32 DevKitV1 yang memproses pembacaan tombol, kalkulasi akumulasi nomor antrean, serta menangani pengiriman/penerimaan paket MQTT.

  3. Output: Berupa LCD 16x2 I2C sebagai penampil status nomor antrean, Buzzer sebagai indikator audio panggil, dan LED Merah sebagai sinyal visual.

  4. Komunikasi: Berupa jaringan WiFi simulator (Wokwi-GUEST) dan broker MQTT publik (broker.hivemq.com) yang menghubungkan port TCP 1883 (ESP32) dengan port WebSocket 8000 (Web).

  5. Monitoring & Control: Berupa Web Dashboard berbasis HTML/JS (Eclipse Paho MQTT) untuk memantau kedatangan antrean dan memanggil pasien secara jarak jauh.


3.2 Alat dan Komponen


Komponen yang digunakan dalam perancangan dan simulasi sistem adalah sebagai berikut:

No

Komponen

Jumlah

Fungsi

1

ESP32 DevKitV1

1 Unit

Mikrokontroler utama, pemproses data, dan modul konektivitas WiFi/MQTT.

2

LCD 16x2 I2C (Alamat 0x27)

1 Unit

Menampilkan status koneksi, nomor antrean terkini, dan antrean yang dipanggil.

3

Push Button (Green)

1 Unit

Input manual pasien untuk mengambil/menerbitkan nomor antrean baru.

4

Buzzer Piezo

1 Unit

Indikator audio yang membunyikan nada panggil saat pasien dipanggil dokter.

5

LED Merah 5mm

1 Unit

Indikator sinyal visual saat perintah panggilan diterima dari Web Dashboard.

6

Simulator Wokwi

1 Platform

Lingkungan simulasi eksekusi hardware dan komunikasi jaringan virtual.

7

MQTT Broker (broker.hivemq.com)

1 Server

Perantara distribusi pesan antara ESP32 (TCP 1883) dan Web (WebSocket 8000).

8

Web Dashboard Dokter

1 Berkas

Antarmuka monitoring antrean dan kontrol panggilan berbasis HTML & Paho JS.


3.3 Fungsi Masing-Masing Komponen


3.3.1 ESP32 DevKitV1


ESP32 berfungsi sebagai pusat pengendali utama sistem antrean. Mikrokontroler ini membaca masukan dari Push Button pada pin GPIO 14, menginkremen variabel counter antrean, memperbarui tampilan LCD 16x2 melalui jalur I2C (GPIO 33 & 27), serta mengendalikan pin sinyal Buzzer (GPIO 15) dan LED (GPIO 2). Selain itu, ESP32 mengelola koneksi WiFi terintegrasi, menerbitkan (publish) data antrean baru ke topik klinik/antrian/tambah, dan mendengarkan (subscribe) perintah panggilan dari topik klinik/antrian/panggil.


3.3.2 LCD 16x2 dengan Modul I2C


Layar LCD 16x2 dipasang menggunakan adapter backpack I2C dengan alamat `0x27`. Penggunaan adapter ini menghemat penggunaan pin GPIO pada ESP32, hanya membutuhkan dua jalur komunikasi yaitu SDA (GPIO 33) dan SCL (GPIO 27). LCD bertugas menampilkan pesan sistem meliputi: status pencarian WiFi, status koneksi broker MQTT, nomor tiket antrean yang baru diambil pasien, serta konfirmasi teks saat dokter memanggil nomor tertentu.


3.3.3 Push Button, Buzzer, dan LED


Push Button dikonfigurasi menggunakan mode `INPUT_PULLUP` pada pin GPIO 14 sehingga tidak memerlukan resistor eksternal. Tombol ini mendeteksi sinyal tekan dari pasien. Buzzer piezo pada GPIO 15 bertugas menghasilkan nada aksentuasi saat antrean dicetak dan memicu alarm panggilan berulang 3 kali (frequency 1000Hz). LED merah pada GPIO 2 bekerja sinkron dengan buzzer sebagai penanda visual yang jelas.


3.3.4 Broker MQTT dan Web Dashboard Dokter


Broker MQTT (`broker.hivemq.com`) bertindak sebagai pusat transit pesan berkecepatan tinggi. Komunikasi antara ESP32 dan Web Dashboard diklasifikasikan ke dalam 2 topik utama:

Topik MQTT

Pengirim

Penerima

Isi Pesan / Format Data

klinik/antrian/tambah

ESP32

Web Dashboard

String nomor antrean baru (contoh: A-1, A-2)

klinik/antrian/panggil

Web Dashboard

ESP32

String nomor antrean yang dipanggil (contoh: A-1)


3.4 Perancangan Rangkaian


Perancangan rangkaian fisik disesuaikan dengan tata letak pinout ESP32 pada simulator Wokwi. Skema hubungan antar komponen ditunjukkan pada tabel konfigurasi pin berikut:


Komponen Perangkat

Pin Komponen

Pin ESP32 DevKitV1

Keterangan Fungsi

LCD 16x2 I2C

GND, VCC

GND.1, VIN (5V)

Jalur Catu Daya LCD

LCD 16x2 I2C

SDA, SCL

GPIO 33 (D33), GPIO 27 (D27)

Jalur Komunikasi Serial I2C

Push Button (Hijau)

Terminal 1.l, 2.l

GPIO 14 (D14), GND.1

Input Tombol Antrean (Pull-Up)

Buzzer Piezo

Pin 1 (+), Pin 2 (-)

GPIO 15 (D15), GND.2

Output Alarm Audio

LED Merah

Anoda (A), Katoda (C)

GPIO 2 (D2), GND.2

Output Visual Panggilan


3.5 Perancangan Logika Sistem


Alur kerja logika dari sistem antrean terintegrasi ini dirancang menggunakan algoritma pemrosesan kejadian (event-driven) yang dirangkum pada tabel berikut

:

Peristiwa / Event

Kondisi Pemicu

Respons Mikrokontroler (ESP32)

Tindakan Web Dashboard

Inisialisasi Sistem

Power ON / Reset

Menghubungkan ke WiFi & MQTT broker. Subscribe topik klinik/antrian/panggil. LCD: "Klinik Ready!".

Web terhubung ke broker via WebSocket port 8000. Subscribe klinik/antrian/tambah. Status: "Terhubung".

Tombol Antrean Ditekan

Signal GPIO 14 berpindah dari HIGH ke LOW

Counter nomorAntrian++. LCD menampilkan "Nomor A-X". Publish payload "A-X" ke klinik/antrian/tambah. Sound bip.

Menerima pesan MQTT, memperbarui tampilan antrean terbaru secara otomatis, mengisi kolom input panggilan.

Dokter Klik "PANGGIL"

Dokter menekan tombol di Web Dashboard

Menerima payload via callback MQTT. Memunculkan teks "PANGGILAN PASIEN: Nomor A-X" pada LCD. Kedipkan LED 3x dan bunyikan Buzzer 3x.

Menerbitkan pesan payload nomor antrean ke topik klinik/antrian/panggil via WebSocket.

Koneksi Terputus

Koneksi Internet / Broker Terganggu

Fungsi reconnect() memulihkan koneksi secara otomatis dalam jeda 3 detik.

Fungsi onConnectionLost() mengubah status indikator UI web menjadi warna merah ("Offline").


3.6 Implementasi Program

#include <WiFi.h>

#include <PubSubClient.h>

#include <LiquidCrystal_I2C.h>

#include <Wire.h>


const char* ssid = "Wokwi-GUEST";

const char* password = "";

const char* mqtt_server = "broker.hivemq.com";

const int mqtt_port = 1883;


// Topik MQTT

const char* TOPIC_AMBIL   = "klinik/antrian/tambah";

const char* TOPIC_PANGGIL = "klinik/antrian/panggil";


WiFiClient espClient;

PubSubClient client(espClient);

LiquidCrystal_I2C lcd(0x27, 16, 2);


// Pemetaan Pin Sesuai Rangkaian Fisik Wokwi

#define SDA_PIN 33

#define SCL_PIN 27

#define BTN_AMBIL 14

#define BUZZER 15

#define LED_CALL 2


int nomorAntrian = 0;

int lastButtonState = HIGH;


void callback(char* topic, byte* payload, unsigned int length) {

  String message = "";

  for (int i = 0; i < length; i++) {

    message += (char)payload[i];

  }


  if (String(topic) == TOPIC_PANGGIL) {

    lcd.clear();

    lcd.setCursor(0, 0);

    lcd.print("PANGGILAN PASIEN");

    lcd.setCursor(0, 1);

    lcd.print("Nomor " + message);


    for (int i = 0; i < 3; i++) {

      digitalWrite(LED_CALL, HIGH);

      tone(BUZZER, 1000);

      delay(300);

      digitalWrite(LED_CALL, LOW);

      noTone(BUZZER);

      delay(200);

    }

  }

}


void reconnect() {

  while (!client.connected()) {

    Serial.print("Menghubungkan ke MQTT Broker...");

    String clientId = "ESP32KlinikClient-";



 Berikut adalah konfigurasi skema interkoneksi rangkaian dalam format JSON (`diagram.json`):


{

  "version": 1,

  "author": "Smart Clinic Queue",

  "editor": "wokwi",

  "parts": [

    { "type": "wokwi-esp32-devkit-v1", "id": "esp", "top": 0, "left": 0, "attrs": {} },

    { "type": "wokwi-lcd1602", "id": "lcd", "top": -180, "left": -60, "attrs": { "pins": "i2c" } },

    { "type": "wokwi-pushbutton", "id": "btn1", "top": 200, "left": -120, "attrs": { "color": "green", "label": "Ambil Antrian" } },

    { "type": "wokwi-led", "id": "led1", "top": 200, "left": 60, "attrs": { "color": "red", "label": "Panggilan" } },

    { "type": "wokwi-buzzer", "id": "bz1", "top": 200, "left": 160, "attrs": { "volume": "0.1" } }

  ],

  "connections": [

    [ "esp:GND.1", "lcd:GND", "black", [ "h-60" ] ],

    [ "esp:VIN", "lcd:VCC", "red", [ "h-40" ] ],

    [ "esp:D33", "lcd:SDA", "blue", [ "h-20" ] ],

    [ "esp:D27", "lcd:SCL", "yellow", [ "h-30" ] ],

    [ "esp:D14", "btn1:1.l", "green", [ "h-50" ] ],

    [ "esp:GND.1", "btn1:2.l", "black", [ "h-70" ] ],

    [ "esp:D15", "bz1:1", "purple", [] ],

    [ "esp:GND.2", "bz1:2", "black", [] ],

    [ "esp:D2", "led1:A", "red", [] ],

    [ "esp:GND.2", "led1:C", "black", [] ]

  ]

}



3.7 Penjelasan Program

Program diawali dengan pemanggilan library utama WiFi.h, PubSubClient.h, LiquidCrystal_I2C.h, dan Wire.h. Pemetaan variabel SDA_PIN 33 dan SCL_PIN 27 dilewatkan ke Wire.begin() untuk menginisialisasi bus I2C non-standar ESP32 agar dapat berkomunikasi dengan modul LCD I2C.

Fungsi setup() mengonfigurasi BTN_AMBIL sebagai input pull-up internal serta memulakan koneksi WiFi. Setelah WiFi terhubung, ESP32 menginisialisasi server MQTT broker.hivemq.com pada port TCP 1883 dan mendaftarkan fungsi callback() sebagai penangan pesan masuk.

Pada fungsi loop(), perintah client.loop() dipanggil terus-menerus untuk memelihara koneksi socket dan memeriksa paket data incoming. Pembacaan tombol antrean memanfaatkan deteksi transisi sinyal edge (dari HIGH ke LOW). Ketika tombol ditekan, variabel nomorAntrian ditambah satu, dikonversi menjadi format string (misal: "A-1"), lalu dikirimkan ke topik klinik/antrian/tambah melalui perintah client.publish().

Ketika pesan diterima dari topik klinik/antrian/panggil, fungsi callback() mengeksekusi iterasi loop sebanyak 3 kali untuk menyalakan LED dan membunyikan nada buzzer 1000Hz secara bergantian sebagai indikator panggilan pasien.


3.8 Perancangan Dashboard Web Dokter

Dashboard Dokter dirancang sebagai halaman web independen menggunakan JavaScript dengan library Eclipse Paho MQTT yang berjalan langsung di peramban web. Dashboard ini terhubung ke broker melalui port WebSocket 8000. Berikut adalah kode sumber lengkap berkas HTML/JS (`index.html`):

<!DOCTYPE html>

<html lang="id">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Web Dashboard Antrean Klinik (MQTT WebSocket)</title>

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>

<style>

body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #eef2f5; margin: 0; padding: 20px; }

.container { max-width: 600px; margin: 0 auto; background: white; padding: 25px; border-radius: 12px; box-shadow: 0 4px 15px rgba(0,0,0,0.1); }

h2 { color: #1a365d; text-align: center; margin-bottom: 20px; }

.status-card { padding: 10px 15px; border-radius: 6px; font-weight: bold; margin-bottom: 20px; text-align: center; }

.online { background-color: #c6f6d5; color: #22543d; }

.offline { background-color: #fed7d7; color: #742a2a; }

.antrian-box { text-align: center; background: #ebf8ff; border: 2px dashed #3182ce; padding: 20px; border-radius: 8px; margin-bottom: 25px; }

.antrian-box h3 { margin: 0; color: #2b6cb0; font-size: 16px; }

.antrian-number { font-size: 48px; font-weight: bold; color: #2c5282; margin-top: 10px; }

.form-group { display: flex; gap: 10px; justify-content: center; }

input[type="text"] { padding: 12px; font-size: 18px; border: 1px solid #cbd5e0; border-radius: 6px; width: 60%; text-align: center; }

button { padding: 12px 24px; font-size: 16px; font-weight: bold; background-color: #319795; color: white; border: none; border-radius: 6px; cursor: pointer; transition: 0.2s; }

button:hover { background-color: #2c7a7b; }

</style>

</head>

<body>

<div class="container">

<h2>🏥 Dashboard Panggilan Klinik</h2>

<div id="statusBox" class="status-card offline">Status WebSocket: Connecting...</div>


<div class="antrian-box">

<h3>ANTREAN TERAKHIR DIAMBIL (DARI WOKWI)</h3>

<div class="antrian-number" id="lastAntrian">Belum Ada</div>

</div>


<div style="text-align: center;">

<h3>Panggil Pasien Ke Ruang Dokter</h3>

<div class="form-group">

<input type="text" id="inputAntrian" placeholder="Contoh: A-1">

<button onclick="panggilPasien()">📢 PANGGIL</button>

</div>

</div>

</div>


<script>

const host = "broker.hivemq.com";

const port = 8000;

const clientID = "WebDokter_" + Math.random().toString(16).substr(2, 8);


const client = new Paho.MQTT.Client(host, Number(port), clientID);


client.onConnectionLost = onConnectionLost;

client.onMessageArrived = onMessageArrived;


client.connect({

onSuccess: onConnect,

onFailure: onFailure

});


function onConnect() {

const statusBox = document.getElementById("statusBox");

statusBox.innerText = "Status WebSocket: Terhubung ke " + host;

statusBox.className = "status-card online";

client.subscribe("klinik/antrian/tambah");

}


function onFailure(err) {

const statusBox = document.getElementById("statusBox");

statusBox.innerText = "Koneksi Gagal: " + err.errorMessage;

statusBox.className = "status-card offline";

}


function onConnectionLost(responseObject) {

if (responseObject.errorCode !== 0) {

const statusBox = document.getElementById("statusBox");

statusBox.innerText = "Koneksi Terputus: " + responseObject.errorMessage;

statusBox.className = "status-card offline";

}

}


function onMessageArrived(message) {

if (message.destinationName === "klinik/antrian/tambah") {

document.getElementById("lastAntrian").innerText = message.payloadString;

document.getElementById("inputAntrian").value = message.payloadString;

}

}


function panggilPasien() {

const nomor = document.getElementById("inputAntrian").value;

if (!nomor) return alert("Masukkan nomor antrean!");


const message = new Paho.MQTT.Message(nomor);

message.destinationName = "klinik/antrian/panggil";

client.send(message);

}

</script>

</body>

</html>



3.9 Pengujian Sistem


Pengujian dilakukan untuk memverifikasi kebenaran fungsi perangkat keras simulasi Wokwi dan integrasi pengiriman data secara dua arah (*full-duplex*) melalui MQTT broker dan WebSocket. Hasil pengujian dicatat pada tabel skenario berikut:


No

Aksi Pengujian

Kondisi Awal

Hasil yang Diharapkan

Hasil

1

Inisialisasi Perangkat ESP32

Simulasi Wokwi dijalankan

ESP32 terhubung ke WiFi, Serial menampilkan `Terhubung!`, LCD menampilkan `Klinik Ready!`.

Berhasil

2

Membuka Web Dashboard

Browser memuat `index.html`

Web terhubung ke broker HiveMQ via WebSocket port 8000, status berwarna hijau (`Terhubung`).

Berhasil

3

Tekan Tombol Antrean (Ke-1)

Antrean awal = 0

LCD menampilkan `Nomor A-1`, buzzer berbunyi pendek, data `A-1` dipublish ke MQTT.

Berhasil

4

Penerimaan Data di Dashboard

Web terhubung online

Elemen `lastAntrian` di Web otomatis terbarui menjadi `A-1` tanpa me-refresh halaman.

Berhasil

5

Tekan Tombol Antrean (Ke-2)

Antrean posisi A-1

LCD memperbarui ke `Nomor A-2`, Web Dashboard menampilkan `A-2` secara instan.

Berhasil

6

Klik Tombol "PANGGIL" di Web

Input text berisi `A-1`

Pesan `A-1` terkirim ke topik `klinik/antrian/panggil` via WebSocket.

Berhasil

7

Eksekusi Panggilan di ESP32

ESP32 menerima pesan MQTT

LCD menampilkan `PANGGILAN PASIEN: Nomor A-1`, LED berkedip 3x, Buzzer berbunyi 3x.

Berhasil

8

Penanganan Putus Jaringan

Koneksi broker disimulasikan putus

Sistem melakukan `reconnect()` otomatis setiap 3 detik hingga terhubung kembali.

Berhasil


3.10 Analisis Hasil Pengujian


Berdasarkan hasil pengujian yang telah dilakukan, seluruh fungsi sistem antrean dan panggilan pasien klinik berbasis ESP32 dan MQTT via WebSocket telah berjalan sesuai dengan rancangan teknis yang ditetapkan. Pengujian transmisi data dari ESP32 menuju Web Dashboard menunjukkan bahwa protokol MQTT mampu menyampaikan payload data tiket antrean baru dalam kurun waktu kurang dari 100 milidetik sejak tombol fisik ditekan.

Laporan Praktikum IoT - Modul 6 (MQTT WebSocket)Halaman 10

Komunikasi dua arah terbukti efisien berkat penggunaan pustaka Eclipse Paho JavaScript pada Web Dashboard. Hambatan umum pada aplikasi web tradisional—di mana browser tidak dapat membuka socket TCP murni pada port 1883—dapat teratasi secara sempurna dengan memanfaatkan alur pertukaran paket data berbasis WebSocket pada port 8000. Hal ini memungkinkan browser untuk berlangganan (*subscribe*) dan menerbitkan (*publish*) pesan MQTT secara langsung tanpa memerlukan server perantara tambahan (middleware backend).

Meski demikian, terdapat beberapa keterbatasan teknis pada rancangan sistem saat ini:

  1. Volatilitas Data: Nilai counter antrean disimpan dalam memori RAM acak ESP32, sehingga apabila perangkat mengalami restart atau reset daya, akumulasi nomor antrean akan kembali ke angka nol.

  2. Keamanan Broker: Penggunaan broker publik HiveMQ tanpa lapisan enkripsi TLS/SSL dan autentikasi token dapat memungkinkan pihak luar yang mengetahui nama topik untuk menerbitkan pesan panggilan palsu.
    Untuk pengembangan lebih lanjut pada skala produksi industri, disarankan untuk mengimplementasikan penyimpanan variabel antrean pada EEPROM/NVS ESP32 serta mengamankan jalur komunikasi broker menggunakan kredensial TLS (port 8883 / 8084).



BAB IV 

PENUTUP

4.1 Kesimpulan

Berdasarkan hasil praktikum dan analisis yang telah dilakukan, dapat ditarik beberapa kesimpulan utama sebagai berikut:

1. Protokol MQTT berbasis arsitektur Publish/Subscribe sangat efektif digunakan untuk sistem komunikasi real-time pada perangkat IoT karena memiliki footprint data yang ringan dan waktu tanggap (latency) yang sangat rendah.

2. Penggunaan mekanisme MQTT via WebSocket (library Eclipse Paho JS) berhasil menjembatani komunikasi data dua arah antara mikrokontroler ESP32 dengan aplikasi antarmuka web browser tanpa memerlukan perantara server web eksternal.

3. Integrasi perangkat keras (LCD 16x2 I2C, Push Button, Buzzer, dan LED) pada simulator Wokwi bersama Web Dashboard telah berhasil memenuhi rancangan fungsional sistem antrean klinik, di mana pencetakan antrean dan perintah panggilan pasien dapat tereksekusi secara sinkron dan otomatis.


Tidak ada komentar:

Posting Komentar