# Mesin Absensi RFID SIMAP

## Daftar komponen

| Komponen | Catatan |
|---|---|
| ESP32 DevKit v1 | 30 pin, pastikan yang punya USB-serial CP2102/CH340 |
| RC522 RFID reader | 13,56 MHz, kartu Mifare Classic 1K |
| LCD 16x2 + modul I2C | alamat umum 0x27, sebagian 0x3F |
| RTC DS3231 | + baterai CR2032, agar jam tetap benar saat listrik mati |
| Buzzer aktif 5V | |
| LED hijau + merah + resistor 220Ω | |
| Adaptor 5V 2A | |

## Peta kabel

| ESP32 | Tujuan |
|---|---|
| 3V3 | RC522 VCC, DS3231 VCC |
| 5V | LCD VCC, buzzer + |
| GND | seluruh GND |
| GPIO 5 | RC522 SDA/SS |
| GPIO 27 | RC522 RST |
| GPIO 18 | RC522 SCK |
| GPIO 19 | RC522 MISO |
| GPIO 23 | RC522 MOSI |
| GPIO 21 | LCD SDA, DS3231 SDA |
| GPIO 22 | LCD SCL, DS3231 SCL |
| GPIO 4 | Buzzer sinyal |
| GPIO 2 | LED hijau |
| GPIO 15 | LED merah |

RC522 **wajib 3,3V**. Memberi 5V akan merusaknya.

## Menyiapkan firmware

1. Arduino IDE → Board Manager → pasang `esp32 by Espressif Systems`
2. Library Manager → pasang `MFRC522`, `LiquidCrystal_I2C`, `RTClib`, `ArduinoJson` (v7)
3. Buka `simap_rfid.ino`, isi bagian KONFIGURASI:
   - `WIFI_SSID`, `WIFI_PASS`
   - `SERVER_URL` — tanpa garis miring di akhir
   - `DEVICE_KODE` dan `DEVICE_KEY` — ambil dari menu **Absensi → Mesin RFID** di web
4. Board: *ESP32 Dev Module*, Upload Speed 921600
5. Unggah, lalu buka Serial Monitor 115200 untuk memantau

## Perilaku saat jaringan putus

Tap tetap dibaca dan disimpan di flash ESP32 (maksimal 60 tap) lengkap dengan
waktu dari RTC. LCD menampilkan `Tersimpan / Kirim nanti ~n`. Saat jaringan
pulih, antrean dikirim satu per siklus ping (tiap menit) agar tidak memblokir
pembacaan kartu. Server menerima kolom `waktu` sehingga jam tap tetap akurat,
bukan jam saat pengiriman ulang.

Bila antrean penuh, tap paling lama dibuang supaya tap terbaru tetap tercatat.

## Kode bunyi

| Bunyi | Arti |
|---|---|
| 1 bip, LED hijau | Tercatat hadir / pulang |
| 2 bip, LED hijau | Tercatat terlambat |
| 2 bip pendek, kedua LED | Jaringan putus, tap masuk antrean |
| 3 bip, LED merah | Kartu tidak dikenal, atau API key salah |

## Mendaftarkan kartu

Menu **Data Induk → Siswa → Detail → Kartu RFID**, atau tempel kartu baru di
mesin lalu buka **Absensi → Mesin RFID** — UID yang belum terdaftar muncul di
daftar `rfid_log` dan bisa langsung dipetakan ke siswa atau guru.

## Pemecahan masalah

**LCD menyala tapi kosong** — putar potensiometer di belakang modul I2C.
Bila tetap kosong, coba ganti alamat `0x27` menjadi `0x3F` di baris
`LiquidCrystal_I2C lcd(0x27, 16, 2);`

**Kartu tidak terbaca** — periksa RC522 dapat 3,3V, dan jarak antena tidak
terhalang logam. Jarak baca normal 2–4 cm.

**Jam melenceng** — pastikan baterai CR2032 di DS3231 masih hidup. Mesin
menyinkronkan jam dari server tiap menit, jadi selisih hanya muncul saat mesin
menyala tanpa jaringan.

**Selalu "Perangkat ditolak"** — `DEVICE_KODE` atau `DEVICE_KEY` tidak cocok,
atau status perangkat di web bukan `AKTIF`.
