Senin, 05 Oktober 2026

IMPLEMENTASI SMART DOOR LOCK BERBASIS ESP32 ACCESS POINT, WEB SERVER, DAN MICROSD DENGAN PEMBATASAN PERCOBAAN LOGIN MENGGUNAKAN WOKWI

 LAPORAN PRAKTIKUM

IMPLEMENTASI SMART DOOR LOCK BERBASIS ESP32 ACCESS POINT, WEB SERVER, DAN MICROSD DENGAN PEMBATASAN PERCOBAAN LOGIN MENGGUNAKAN WOKWI

Disusun oleh:

Ahmad Aura Syahrul Muharrom

24051204203

Jeehan Kamila Muzaky

24051204122

Yudhi D Bakkara

24051204174

Miuvanida Klandistin

24051204208





BAB I

PENDAHULUAN

1.1 Latar Belakang

Internet of Things (IoT) membuat perangkat elektronik tidak hanya menjalankan program secara mandiri, tetapi juga dapat diakses dan dikendalikan dari perangkat lain melalui jaringan nirkabel. ESP32 adalah salah satu mikrokontroler yang banyak digunakan untuk keperluan tersebut karena telah dilengkapi Wi-Fi dan Bluetooth, memiliki prosesor dual-core, serta menyediakan banyak pin GPIO untuk menghubungkan sensor dan aktuator.

Pada Wi-Fi, ESP32 dapat bekerja sebagai Station (terhubung ke router yang sudah ada) maupun sebagai Access Point (membuat jaringan sendiri). Mode Access Point cocok untuk sistem lokal yang tidak memerlukan internet, misalnya kunci pintu yang dikendalikan dari ponsel yang terhubung langsung ke perangkat. Pada mode ini ESP32 juga dapat menjalankan Web Server sehingga pengguna cukup membuka browser untuk berinteraksi dengan sistem.

Modul 4 membahas praktik WebServer–Passkey, yaitu ESP32 pada mode Access Point yang membaca pasangan key dan password dari file pada SD Card, kemudian mencocokkannya dengan input pengguna melalui halaman web. Berdasarkan konsep tersebut, pada tugas ini dikembangkan sebuah simulasi Smart Door Lock. Pasangan kode dan sandi disimpan pada MicroSD, pintu digambarkan oleh motor servo, LED hijau dan merah menjadi indikator status, dan buzzer memberi isyarat suara. Sebagai pengembangan, sistem membatasi percobaan login: setelah tiga kali salah berturut-turut, sistem diblokir sementara agar tidak dapat ditebak dengan cara mencoba berulang kali. Simulasi dijalankan pada platform Wokwi.

1.2 Rumusan Masalah

•  Bagaimana membuat ESP32 bekerja sebagai Access Point dan Web Server?

•  Bagaimana membaca data kode dan sandi dari file pada MicroSD?

•  Bagaimana memvalidasi input pengguna dan menggerakkan servo sebagai simulasi kunci pintu?

•  Bagaimana membuat penguncian ulang otomatis dan pembatasan percobaan login tanpa menghentikan kerja Web Server?

•  Bagaimana menampilkan status sistem menggunakan LED dan buzzer?

1.3 Tujuan

•  Memahami penggunaan ESP32 sebagai Access Point dan Web Server.

•  Menerapkan MicroSD sebagai penyimpan data kode dan sandi dalam format CSV.

•  Membuat sistem autentikasi yang menggerakkan servo ketika data cocok.

•  Menerapkan pembatasan percobaan login dan penguncian ulang otomatis menggunakan fungsi millis().

•  Melakukan simulasi dan pengujian sistem menggunakan Wokwi.

1.4 Manfaat

•  Menambah pemahaman tentang mode Wi-Fi dan Web Server pada ESP32.

•  Mengetahui cara membaca dan mencocokkan data dari file pada MicroSD.

•  Melatih penggunaan pewaktuan non-blocking agar program tetap responsif.

•  Memberi gambaran penerapan IoT sederhana pada sistem keamanan.

•  Memberi pengalaman membuat dan menguji rangkaian secara virtual di Wokwi.





BAB II

TINJAUAN PUSTAKA

2.1 Dasar Teori

2.1.1 ESP32

ESP32 adalah mikrokontroler dengan Wi-Fi dan Bluetooth terintegrasi, prosesor dual-core, mode hemat daya, serta banyak pin GPIO dengan fungsi seperti ADC dan PWM. Pada sistem ini ESP32 menjadi pengendali utama yang membuat jaringan Wi-Fi, menjalankan Web Server, membaca MicroSD, dan mengendalikan servo, LED, serta buzzer.

2.1.2 Mode Wi-Fi Access Point

ESP32 mendukung mode Station, Access Point, serta gabungan keduanya. Pada mode Access Point, ESP32 berperan seperti router sehingga perangkat lain dapat terhubung langsung dan membentuk jaringan lokal. Pada program, mode ini diaktifkan dengan fungsi WiFi.softAP() dengan SSID SmartLock-ESP32. Alamat IP bawaan Access Point ESP32 adalah 192.168.4.1.

2.1.3 Web Server

Web Server pada ESP32 menerima permintaan HTTP dari browser dan membalasnya dengan halaman HTML. Program menggunakan library WebServer pada port 80. Halaman utama (/) menampilkan formulir, sedangkan data formulir dikirim ke alamat /buka dengan metode POST. Metode POST dipilih agar sandi tidak tampil pada alamat URL seperti halnya pada metode GET.

2.1.4 MicroSD dan Komunikasi SPI

MicroSD dihubungkan ke ESP32 melalui bus SPI yang menggunakan jalur SCK, MISO, MOSI, dan CS. Data akses disimpan pada file akses.csv, satu pasangan per baris dengan format kode,sandi. Program membaca file baris demi baris, kemudian memisahkan kode dan sandi berdasarkan tanda koma.

2.1.5 Servo sebagai Simulasi Kunci Pintu

Servo adalah motor yang sudut putarnya dapat diatur melalui sinyal PWM. Pada sistem ini servo pada sudut 0° menggambarkan pintu terkunci dan sudut 90° menggambarkan pintu terbuka. Servo dikendalikan menggunakan library ESP32Servo.

2.1.6 LED dan Buzzer sebagai Indikator

LED hijau menandakan pintu terbuka, sedangkan LED merah menandakan pintu terkunci. Masing-masing LED diberi resistor 220 Ω untuk membatasi arus. Buzzer menghasilkan nada tinggi singkat ketika akses diterima, nada rendah singkat ketika akses ditolak, dan nada rendah panjang ketika sistem mulai diblokir.

2.1.7 Pewaktuan Non-Blocking dengan millis()

Fungsi delay() menghentikan seluruh program selama waktu tertentu sehingga Web Server tidak dapat melayani permintaan. Fungsi millis() mengembalikan waktu sejak ESP32 menyala, sehingga program cukup membandingkan selisih waktu untuk mengetahui kapan suatu aksi perlu dilakukan. Teknik ini digunakan untuk mengunci pintu otomatis setelah 5 detik dan mengakhiri blokir setelah 15 detik tanpa menghentikan loop().

2.1.8 Wokwi

Wokwi adalah simulator online untuk ESP32 dan komponen elektronik lain. Rangkaian dan program dapat diuji secara virtual tanpa perangkat fisik, termasuk MicroSD, servo, LED, buzzer, dan Serial Monitor.

2.2 Komponen yang Digunakan

No

Komponen

Jumlah

Fungsi

1

ESP32 DevKit V1

1

Pengendali utama, Access Point, dan Web Server

2

Modul MicroSD

1

Menyimpan file akses.csv sebagai data autentikasi

3

Servo

1

Simulasi kunci pintu (0° terkunci, 90° terbuka)

4

LED hijau

1

Indikator pintu terbuka

5

LED merah

1

Indikator pintu terkunci / akses ditolak

6

Resistor 220 Ω

2

Pembatas arus untuk masing-masing LED

7

Buzzer

1

Indikator suara

8

Wokwi

1

Simulator rangkaian dan program






BAB III

PEMBAHASAN

3.1 Deskripsi Simulasi

ESP32 membuat jaringan Wi-Fi bernama SmartLock-ESP32 dan menjalankan Web Server pada port 80. Pengguna membuka halaman web, mengisi kode akses dan sandi, lalu menekan tombol BUKA PINTU. ESP32 mencari pasangan tersebut pada file akses.csv di MicroSD.

Jika pasangan ditemukan, servo bergerak ke 90°, LED hijau menyala, buzzer berbunyi singkat, dan pintu terkunci kembali secara otomatis setelah 5 detik. Jika tidak ditemukan, buzzer berbunyi dengan nada rendah dan jumlah kegagalan bertambah. Setelah tiga kali gagal berturut-turut, sistem diblokir selama 15 detik dan semua percobaan selama waktu itu ditolak. Keberhasilan login mengembalikan hitungan kegagalan menjadi nol.

Alur kerja sistem ditunjukkan pada Gambar 3.1.

Gambar 3.1 Diagram alur kerja sistem

3.2 Konfigurasi Rangkaian

Komponen

Pin ESP32

Keterangan

MicroSD – CS

GPIO 5

Chip select SPI

MicroSD – SCK

GPIO 18

Clock SPI

MicroSD – DO (MISO)

GPIO 19

Data dari MicroSD ke ESP32

MicroSD – DI (MOSI)

GPIO 23

Data dari ESP32 ke MicroSD

MicroSD – VCC / GND

3V3 / GND

Catu daya modul

Servo – PWM

GPIO 13

Sinyal kendali sudut

Servo – V+ / GND

VIN / GND

Catu daya servo

LED hijau (anoda)

GPIO 26

Indikator pintu terbuka

LED merah (anoda)

GPIO 27

Indikator terkunci / ditolak

Buzzer (+)

GPIO 25

Output suara

Access Point

SSID SmartLock-ESP32

Password kunci1234, IP 192.168.4.1

Web Server

Port 80

Halaman / dan proses /buka


Skema sambungan antarkomponen diringkas pada Gambar 3.2. Katoda kedua LED dihubungkan ke GND melalui resistor 220 Ω.

Gambar 3.2 Skema sambungan komponen

3.3 Program

Program lengkap yang digunakan pada simulasi adalah sebagai berikut.

#include <WiFi.h>

#include <WebServer.h>

#include <SPI.h>

#include <SD.h>

#include <ESP32Servo.h>

 

// ---------- Konfigurasi Access Point ----------

const char* AP_SSID = "SmartLock-ESP32";

const char* AP_PASS = "kunci1234";

 

// ---------- Konfigurasi pin ----------

#define PIN_SERVO     13

#define PIN_LED_HIJAU 26

#define PIN_LED_MERAH 27

#define PIN_BUZZER    25

#define PIN_SD_CS      5

 

// ---------- Konfigurasi sistem ----------

const int SUDUT_TERKUNCI = 0;

const int SUDUT_TERBUKA  = 90;

const int MAKS_GAGAL     = 3;

const unsigned long DURASI_BUKA   = 5000;   // pintu terbuka 5 detik

const unsigned long DURASI_BLOKIR = 15000;  // blokir 15 detik

 

WebServer server(80);

Servo servoPintu;

 

int jumlahGagal = 0;

bool pintuTerbuka = false;

bool terblokir = false;

unsigned long waktuBuka = 0;

unsigned long waktuBlokir = 0;

bool sdSiap = false;

 

// Data cadangan bila MicroSD tidak dapat dipakai

const char* DATA_AWAL[] = { "admin,Rahasia01", "tamu1,abc123", "tamu2,xyz789" };

const int JUMLAH_DATA_AWAL = 3;

 

// ---------- Fungsi output ----------

void bunyi(int frekuensi, int durasi) {

  tone(PIN_BUZZER, frekuensi);

  delay(durasi);

  noTone(PIN_BUZZER);

}

 

void kunciPintu() {

  servoPintu.write(SUDUT_TERKUNCI);

  digitalWrite(PIN_LED_HIJAU, LOW);

  digitalWrite(PIN_LED_MERAH, HIGH);

  pintuTerbuka = false;

}

 

void bukaPintu() {

  servoPintu.write(SUDUT_TERBUKA);

  digitalWrite(PIN_LED_HIJAU, HIGH);

  digitalWrite(PIN_LED_MERAH, LOW);

  pintuTerbuka = true;

  waktuBuka = millis();

  bunyi(1500, 200);

}

 

// ---------- Pencarian data pada MicroSD ----------

// Membuat akses.csv bila belum ada (Wokwi gratis tidak bisa unggah file SD)

void siapkanFileAkses() {

  if (SD.exists("/akses.csv")) return;

  File f = SD.open("/akses.csv", FILE_WRITE);

  if (!f) return;

  for (int i = 0; i < JUMLAH_DATA_AWAL; i++) f.println(DATA_AWAL[i]);

  f.close();

  Serial.println("akses.csv dibuat otomatis di MicroSD");

}

 

bool cocokBaris(String baris, String key, String pass) {

  baris.trim();

  int pemisah = baris.indexOf(',');

  if (pemisah <= 0) return false;

 

  String k = baris.substring(0, pemisah);

  String p = baris.substring(pemisah + 1);

  k.trim();

  p.trim();

  return (k == key && p == pass);

}

 

bool cariAkses(String key, String pass) {

  if (sdSiap) {

    File f = SD.open("/akses.csv");

    if (f) {

      bool ketemu = false;

      while (f.available()) {

        if (cocokBaris(f.readStringUntil('\n'), key, pass)) {

          ketemu = true;

          break;

        }

      }

      f.close();

      return ketemu;

    }

  }

  // cadangan: data di memori

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

    if (cocokBaris(String(DATA_AWAL[i]), key, pass)) return true;

  }

  return false;

}

 

// ---------- Logika login ----------

// 0 = diterima, 1 = ditolak, 2 = sedang diblokir

int prosesLogin(String key, String pass) {

  if (terblokir) return 2;

 

  if (cariAkses(key, pass)) {

    jumlahGagal = 0;

    bukaPintu();

    return 0;

  }

 

  jumlahGagal++;

  bunyi(300, 400);

  if (jumlahGagal >= MAKS_GAGAL) {

    terblokir = true;

    waktuBlokir = millis();

    bunyi(300, 800);

  }

  return 1;

}

 

int sisaBlokirDetik() {

  unsigned long lewat = millis() - waktuBlokir;

  if (lewat >= DURASI_BLOKIR) return 0;

  return (DURASI_BLOKIR - lewat) / 1000 + 1;

}

 

// ---------- Halaman web ----------

String halamanHasil(String judul, String pesan, String warna) {

  String h = "<html><head><meta name='viewport' content='width=device-width,initial-scale=1'></head>";

  h += "<body style='font-family:Arial;text-align:center;margin-top:60px'>";

  h += "<h2 style='color:" + warna + "'>" + judul + "</h2>";

  h += "<p>" + pesan + "</p>";

  h += "<a href='/'>Kembali</a></body></html>";

  return h;

}

 

void handleRoot() {

  String html = R"rawliteral(

<!DOCTYPE html>

<html>

<head>

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

<title>Smart Lock ESP32</title>

<style>

body { font-family: Arial; background: #eef1f5; text-align: center; margin-top: 40px; }

.kartu { width: 300px; margin: auto; padding: 24px; background: #fff; border-radius: 12px; }

input { width: 90%; padding: 10px; margin: 6px 0; box-sizing: border-box; }

button { width: 90%; padding: 10px; margin-top: 10px; }

</style>

</head>

<body>

<div class="kartu">

<h2>SMART DOOR LOCK</h2>

<form action="/buka" method="POST">

<input type="text" name="kode" placeholder="Kode akses" required>

<input type="password" name="sandi" placeholder="Sandi" required>

<button type="submit">BUKA PINTU</button>

</form>

</div>

</body>

</html>

)rawliteral";

  server.send(200, "text/html", html);

}

 

void handleBuka() {

  String key  = server.arg("kode");

  String pass = server.arg("sandi");

  int hasil = prosesLogin(key, pass);

 

  if (hasil == 0) {

    server.send(200, "text/html",

      halamanHasil("PINTU TERBUKA", "Pintu akan terkunci otomatis dalam 5 detik.", "green"));

  } else if (hasil == 1) {

    int sisa = MAKS_GAGAL - jumlahGagal;

    String pesan = (sisa > 0) ? "Kode atau sandi salah. Sisa percobaan: " + String(sisa)

                              : "Terlalu banyak percobaan. Sistem diblokir sementara.";

    server.send(200, "text/html", halamanHasil("AKSES DITOLAK", pesan, "red"));

  } else {

    server.send(200, "text/html",

      halamanHasil("DIBLOKIR", "Coba lagi dalam " + String(sisaBlokirDetik()) + " detik.", "orange"));

  }

}

 

// ---------- Pengujian lewat Serial Monitor ----------

// Format input: kode,sandi   (contoh: tamu1,abc123)

void cekSerial() {

  if (!Serial.available()) return;

 

  String masuk = Serial.readStringUntil('\n');

  masuk.trim();

  int pemisah = masuk.indexOf(',');

  if (pemisah <= 0) {

    Serial.println("Format salah. Gunakan: kode,sandi");

    return;

  }

 

  String key  = masuk.substring(0, pemisah);

  String pass = masuk.substring(pemisah + 1);

  key.trim();

  pass.trim();

 

  int hasil = prosesLogin(key, pass);

  Serial.print("[LOGIN] kode=");

  Serial.print(key);

  Serial.print(" -> ");

  if (hasil == 0)      Serial.println("DITERIMA, pintu terbuka");

  else if (hasil == 1) Serial.println("DITOLAK, gagal ke-" + String(jumlahGagal));

  else                 Serial.println("DIBLOKIR, sisa " + String(sisaBlokirDetik()) + " detik");

}

 

// ---------- Pembaruan status berkala (tanpa delay) ----------

void perbaruiStatus() {

  if (pintuTerbuka && millis() - waktuBuka >= DURASI_BUKA) {

    kunciPintu();

    Serial.println("[INFO] Pintu terkunci otomatis");

  }

  if (terblokir && millis() - waktuBlokir >= DURASI_BLOKIR) {

    terblokir = false;

    jumlahGagal = 0;

    Serial.println("[INFO] Blokir berakhir");

  }

}

 

void setup() {

  Serial.begin(115200);

 

  pinMode(PIN_LED_HIJAU, OUTPUT);

  pinMode(PIN_LED_MERAH, OUTPUT);

  pinMode(PIN_BUZZER, OUTPUT);

  servoPintu.attach(PIN_SERVO);

  kunciPintu();

 

  sdSiap = SD.begin(PIN_SD_CS);

  if (sdSiap) {

    Serial.println("MicroSD siap");

    siapkanFileAkses();

    File f = SD.open("/akses.csv");

    if (f) {

      Serial.println("Data akses ditemukan:");

      while (f.available()) Serial.write(f.read());

      f.close();

      Serial.println();

    } else {

      Serial.println("File akses.csv tidak ditemukan, pakai data cadangan");

    }

  } else {

    Serial.println("MicroSD gagal diinisialisasi, pakai data cadangan");

  }

 

  WiFi.softAP(AP_SSID, AP_PASS);

  Serial.print("Access Point aktif, IP: ");

  Serial.println(WiFi.softAPIP());

 

  server.on("/", HTTP_GET, handleRoot);

  server.on("/buka", HTTP_POST, handleBuka);

  server.begin();

  Serial.println("Web Server aktif. Uji lewat Serial: kode,sandi");

}

 

void loop() {

  server.handleClient();

  cekSerial();

  perbaruiStatus();

}


3.4 Penjelasan Program

Bagian awal program memanggil library WiFi dan WebServer untuk jaringan, SPI dan SD untuk MicroSD, serta ESP32Servo untuk motor servo. Setelah itu didefinisikan SSID dan password Access Point, nomor pin, sudut servo, batas kegagalan (MAKS_GAGAL = 3), lama pintu terbuka (5000 ms), dan lama blokir (15000 ms).

Fungsi bunyi() membunyikan buzzer dengan frekuensi dan durasi tertentu. Fungsi kunciPintu() menggerakkan servo ke 0°, menyalakan LED merah, dan mematikan LED hijau. Fungsi bukaPintu() melakukan kebalikannya, mencatat waktu pintu dibuka dengan millis(), lalu membunyikan beep singkat.

Fungsi siapkanFileAkses() membuat akses.csv di MicroSD secara otomatis jika file tersebut belum ada. Fungsi cocokBaris() memisahkan satu baris pada tanda koma dan membandingkannya dengan input. Fungsi cariAkses() membuka akses.csv, membaca setiap baris dengan cocokBaris(), dan mengembalikan true jika ada baris yang cocok. Jika MicroSD tidak dapat dipakai, pencarian dilakukan pada data cadangan di dalam program. Fungsi prosesLogin() adalah pusat logika: jika sistem sedang diblokir, fungsi mengembalikan nilai 2; jika data cocok, hitungan gagal direset, pintu dibuka, dan fungsi mengembalikan nilai 0; jika tidak cocok, hitungan gagal bertambah dan fungsi mengembalikan nilai 1. Ketika hitungan gagal mencapai tiga, variabel terblokir diaktifkan dan waktunya dicatat.

Fungsi handleRoot() mengirim halaman HTML berisi formulir kode dan sandi. Fungsi handleBuka() mengambil data formulir, memanggil prosesLogin(), lalu menampilkan salah satu dari tiga halaman hasil: pintu terbuka, akses ditolak beserta sisa percobaan, atau diblokir beserta sisa waktu. Fungsi cekSerial() memungkinkan pengujian yang sama melalui Serial Monitor dengan format kode,sandi.

Fungsi perbaruiStatus() dipanggil terus-menerus pada loop(). Fungsi ini mengunci pintu setelah 5 detik dan mengakhiri blokir setelah 15 detik dengan membandingkan millis() terhadap waktu yang tercatat, sehingga tidak ada delay panjang yang menghambat Web Server. Pada setup(), program menyiapkan pin, servo, MicroSD, membaca isi akses.csv untuk ditampilkan di Serial Monitor, mengaktifkan Access Point, dan menjalankan Web Server.

3.5 Data pada MicroSD

Data autentikasi disimpan pada file akses.csv dengan format kode,sandi pada setiap baris. Data yang digunakan pada simulasi ini adalah sebagai berikut.

No

Kode

Sandi

1

admin

Rahasia01

2

tamu1

abc123

3

tamu2

xyz789


Data tersebut hanya contoh untuk keperluan simulasi dan dapat diganti sesuai kebutuhan. Karena Wokwi versi gratis tidak menyediakan unggah file ke kartu MicroSD virtual, program membuat file akses.csv secara otomatis saat pertama kali dijalankan apabila file belum ada, sehingga data tetap dibaca dari MicroSD. Apabila MicroSD tidak dapat diinisialisasi, program memakai data cadangan yang sama di dalam kode.

3.6 Hasil Pengujian

Pengujian dilakukan berdasarkan fungsi yang tersedia pada proyek Wokwi dengan skenario berikut. Karena halaman web pada Access Point memerlukan perangkat yang terhubung langsung, pengujian pada simulasi dilakukan melalui Serial Monitor dengan format kode,sandi. Perilaku yang diprogramkan pada setiap skenario dapat diamati langsung pada link simulasi di subbab 3.8.

No

Pengujian

Hasil yang diprogramkan

1

Inisialisasi sistem

Servo 0°, LED merah menyala, Serial Monitor menampilkan MicroSD siap dan isi akses.csv

2

Access Point aktif

Serial Monitor menampilkan IP 192.168.4.1

3

Login benar (admin,Rahasia01)

Servo 90°, LED hijau menyala, beep tinggi, DITERIMA

4

Penguncian otomatis

Setelah 5 detik servo kembali 0° dan LED merah menyala

5

Login salah satu kali

Beep rendah, DITOLAK, gagal ke-1

6

Tiga kali login salah berturut-turut

Beep panjang, sistem DIBLOKIR

7

Login benar saat diblokir

Tetap DIBLOKIR dan menampilkan sisa waktu

8

Setelah 15 detik

Muncul pesan Blokir berakhir, login benar kembali diterima

9

Format input salah

Muncul pesan Format salah


3.7 Kaitan dengan Modul 4

Proyek ini menerapkan praktik WebServer–Passkey pada Modul 4. ESP32 bekerja pada mode Access Point, menyediakan halaman web sebagai antarmuka, dan membaca pasangan key dan password dari file pada SD Card untuk validasi. Pengembangan yang ditambahkan adalah pengendalian aktuator berupa servo dan LED, penguncian ulang otomatis, serta pembatasan percobaan login yang dikerjakan dengan pewaktuan millis() sehingga tetap sejalan dengan prinsip modul bahwa server harus tetap responsif.

3.8 Link Simulasi Wokwi

https://wokwi.com/projects/476961201123244033





BAB IV

PENUTUP

4.1 Kesimpulan

Simulasi Smart Door Lock berhasil dirancang dengan ESP32 sebagai Access Point dan Web Server. Data kode dan sandi dibaca dari file akses.csv pada MicroSD, kemudian dicocokkan dengan input pengguna dari halaman web maupun Serial Monitor. Hasil validasi menentukan kondisi servo, LED, dan buzzer.

Pembatasan tiga kali percobaan dan penguncian ulang otomatis dapat dijalankan menggunakan millis() tanpa menghentikan Web Server. Dengan demikian, sistem tetap dapat melayani permintaan sementara pewaktuan berjalan di latar belakang.

4.2 Saran

•  Sandi pada MicroSD sebaiknya disimpan dalam bentuk hash agar tidak terbaca langsung jika kartu dicabut.

•  Sistem dapat ditambah pencatatan waktu dan riwayat login pada file log di MicroSD.

•  Pengujian berikutnya dapat dilakukan pada perangkat ESP32 fisik dengan akses dari ponsel.

•  Antarmuka web dapat ditambah tampilan sisa percobaan dan hitung mundur blokir secara langsung.





DAFTAR PUSTAKA


Kurniawan, Nyoman Yudi. Modul 04: Mengenal ESP32 dan Mode Wifi – Bluetooth (Praktek WebServer – Passkey). Materi Mata Kuliah Internet of Things.

Espressif Systems. ESP32 Series Datasheet. https://www.espressif.com

Wokwi. “Wokwi Documentation.” https://docs.wokwi.com

Wokwi. “Implementasi Smart Door Lock Berbasis ESP32 Access Point, Web Server, dan MicroSD.” https://wokwi.com/projects/476961201123244033


Tidak ada komentar:

Posting Komentar