# Mesin Absensi RFID 125 kHz — RDM6300

Panduan ini untuk pembaca **RDM6300** (kartu EM4100 / proximity 125 kHz).
Untuk RC522 13,56 MHz (Mifare), pakai folder `device/simap_rfid/`.

## Perbedaan yang perlu diketahui

RDM6300 hanya membaca **nomor kartu** — tidak bisa membaca atau menulis
memori kartu seperti Mifare. Untuk absensi sekolah ini justru cukup dan lebih
murah: yang dibutuhkan hanya nomor unik tiap kartu.

Konsekuensinya:

- Kartu tidak bisa menyimpan saldo, nama, atau data lain di dalamnya
- Kartu Mifare 13,56 MHz **tidak terbaca** oleh RDM6300, begitu pula sebaliknya
- Satu sekolah harus memilih salah satu jenis, jangan dicampur

## Dua pilihan pemasangan

### Pilihan A — Pembaca USB desktop (paling mudah)

Perangkat kotak hitam dengan kabel USB yang dijual bebas. Perangkat ini
dikenali komputer sebagai **papan ketik**: saat kartu ditempelkan, nomornya
langsung "diketik" ke kolom yang sedang aktif, lalu menekan Enter.

Cara pakai:

1. Colokkan ke komputer. Tidak perlu memasang penggerak apa pun.
2. Buka menu **Data Induk → Kartu RFID**.
3. Klik kolom nomor kartu, tempelkan kartu, nomornya terisi sendiri.
4. Pilih nama siswa, simpan.

Untuk absensi harian, buka **Absensi → Papan Absensi** di komputer yang
tersambung pembaca ini. Halaman itu menerima ketikan pembaca dan langsung
mencatat kehadiran.

Cocok untuk: pendaftaran kartu, absensi di meja piket, perpustakaan.
Tidak cocok untuk gerbang tanpa komputer.

### Pilihan B — Mesin mandiri ESP32

Untuk gerbang tanpa komputer. Mesin bekerja sendiri, terhubung Wi-Fi,
dan tetap mencatat saat jaringan putus.

## Daftar komponen (pilihan B)

| Komponen | Catatan |
|---|---|
| ESP32 DevKit v1 | 30 pin |
| Modul RDM6300 + antena koil | 125 kHz, keluaran serial |
| LCD 16x2 + modul I2C | alamat umum 0x27 |
| RTC DS3231 + baterai CR2032 | agar jam tetap benar saat listrik mati |
| Buzzer aktif 5V | |
| LED hijau + merah + resistor 220Ω | opsional, lihat bagian tanpa LED |
| Resistor 1kΩ dan 2kΩ | pembagi tegangan jalur TX, wajib |
| Adaptor 5V 2A | |

## Peta kabel

| ESP32 | Tujuan |
|---|---|
| 5V | RDM6300 VCC, LCD VCC, buzzer + |
| GND | seluruh GND |
| GPIO 16 (RX2) | **TX** modul RDM6300, lewat pembagi tegangan 1kΩ/2kΩ |
| GPIO 17 | TX2 — tidak dipakai, RDM6300 hanya mengirim |
| GPIO 21 | LCD SDA, DS3231 SDA |
| GPIO 22 | LCD SCL, DS3231 SCL |
| GPIO 4 | Buzzer sinyal |
| GPIO 2 | LED hijau |
| GPIO 15 | LED merah |

RDM6300 berjalan pada **5V**, berbeda dengan RC522 yang wajib 3,3V.

## Mengenali pin RDM6300

Papan RDM6300 umumnya tidak mencetak nama pin, hanya menandai kelompoknya
dengan P1, P2, P3. Susunannya:

| Kelompok | Jumlah pin | Isi |
|---|---|---|
| **P1** | 3 | TX, RX, dan satu pin tak terpakai |
| **P2** | 2 | ANT — dua kaki antena koil, bebas terbalik |
| **P3** | 3 | +5V, GND, dan LED (keluaran penanda) |

**TX adalah pin paling ujung pada P1**, biasanya yang paling dekat sisi papan.
Hanya pin ini yang perlu disambung ke ESP32 — RX tidak dipakai karena modul
hanya mengirim, tidak menerima perintah.

Bila urutannya meragukan, jangan menebak. Cara memastikannya:

1. Sambungkan hanya +5V dan GND lebih dulu
2. Ukur tegangan tiap pin P1 terhadap GND memakai multimeter
3. Pin yang menunjukkan sekitar **5V saat menganggur** dan berkedip turun
   ketika kartu ditempelkan adalah TX
4. Pin RX ikut bertegangan tetapi tidak berubah saat kartu ditempel

Cara lain tanpa multimeter: sambungkan pin yang dicurigai ke GPIO 16, buka
Serial Monitor, tempelkan kartu. Bila nomor kartu muncul, pin itu benar TX.
Bila tidak ada apa pun, pindah ke pin sebelahnya. Salah pilih tidak merusak
apa pun selama tegangannya sudah diturunkan seperti di bawah.

## Menurunkan tegangan jalur TX

Keluaran TX modul bertegangan **5V**, sedangkan pin ESP32 hanya tahan
**3,3V**. Banyak panduan di internet menyambungkannya langsung dan tampak
berhasil, tetapi itu di luar batas aman: pin bertahan beberapa saat lalu
melemah, dan gejalanya membingungkan karena kartu jadi terbaca kadang-kadang.

Pasang pembagi tegangan dua resistor:

```
TX modul ──┬── R1 1kΩ ──┬── GPIO 16 (ESP32)
           │            │
           │           R2 2kΩ
           │            │
          ( )          GND
```

Dengan 1kΩ dan 2kΩ, tegangan 5V turun menjadi sekitar 3,3V. Nilai lain
berbanding serupa juga bisa, misalnya 2,2kΩ dan 4,7kΩ.

Bila tidak ada resistor sama sekali dan mesin hanya untuk uji coba sebentar,
sambungan langsung biasanya masih menyala — tetapi jangan dipasang begitu
untuk dipakai sekolah setiap hari.

## Memasang tanpa LED

LED hijau dan merah sifatnya pelengkap. Bila tidak ingin memakainya:

1. Buka `simap_rdm6300.ino`
2. Ubah satu baris:

```cpp
const bool PAKAI_LED = false;
```

3. Biarkan GPIO 2 dan GPIO 15 kosong, resistor 220Ω tidak diperlukan

Mesin tetap berfungsi penuh. Hasil tap tetap terbaca dari **layar LCD**
(menampilkan nama siswa dan status) dan dari **bunyi buzzer**:

| Bunyi | Arti |
|---|---|
| 1 bip | Tercatat hadir atau pulang |
| 2 bip | Tercatat terlambat |
| 2 bip pendek berurutan | Jaringan putus, tap masuk antrean |
| 3 bip | Kartu tidak dikenal atau mesin ditolak server |

Sebenarnya untuk gerbang sekolah, buzzer jauh lebih berguna daripada LED —
siswa yang menempelkan kartu sambil berjalan mendengar bunyinya tanpa perlu
menoleh ke kotak mesin.

Kalau ingin satu penanda saja tanpa dua LED, modul RDM6300 punya pin **LED**
pada kelompok P3 yang menyala sendiri setiap kali kartu terbaca. Pin itu bisa
disambungkan ke satu LED lewat resistor 220Ω, tanpa melibatkan ESP32 sama
sekali.

Antena koil disambungkan ke dua pin ANT pada modul — tidak ada polaritas,
boleh terbalik. Jauhkan koil dari logam agar jarak baca tidak berkurang.

## Menyiapkan firmware

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

## Format nomor kartu

Ini bagian yang paling sering menimbulkan masalah, jadi perhatikan baik-baik.

Kartu EM4100 punya satu nomor, tetapi bisa ditampilkan dalam dua bentuk:

| Bentuk | Contoh | Dipakai oleh |
|---|---|---|
| Desimal 10 digit | `0006168273` | kebanyakan pembaca USB desktop |
| Heksadesimal 8 digit | `005E24D1` | sebagian modul dan pembaca lain |

Keduanya menunjuk kartu yang sama, tetapi kalau sekolah mendaftarkan kartu
lewat pembaca USB (desimal) sementara mesin gerbang mengirim heks, sistem
akan menganggapnya dua kartu berbeda dan tap ditolak.

Firmware ini mengirim **desimal 10 digit** secara bawaan agar cocok dengan
pembaca USB. Bila sekolah terlanjur mendaftarkan kartu dalam bentuk heks,
ubah satu baris:

```cpp
const bool KIRIM_DESIMAL = false;
```

Sisi server juga menormalkan nomor kartu, sehingga selisih nol di depan atau
tanda pemisah tidak menyebabkan kartu gagal dikenali.

## Perilaku saat jaringan putus

Sama seperti versi RC522: tap disimpan di flash ESP32 (maksimal 60 tap)
lengkap dengan waktu dari RTC, lalu dikirim saat jaringan pulih. Jam tap
tetap akurat karena server menerima kolom waktu.

## 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 |

## Pemecahan masalah

**Kartu tidak terbaca sama sekali** — pastikan kartunya 125 kHz. Kartu
e-KTP, kartu bank, dan kartu Mifare tidak akan terbaca oleh RDM6300.
Jarak baca normal 3–7 cm tergantung ukuran koil.

**Serial Monitor menampilkan "Checksum tidak cocok"** — kartu ditarik terlalu
cepat, atau antena terlalu dekat dengan logam atau kabel daya. Firmware
otomatis membaca ulang, jadi sesekali muncul masih wajar.

**Kartu terbaca berkali-kali** — normal. RDM6300 mengirim nomor terus-menerus
selama kartu menempel; firmware sudah mengabaikan pengulangan dalam 5 detik.

**Terbaca di mesin tapi ditolak server** — kemungkinan besar beda format
nomor. Buka **Data Induk → Kartu RFID**, lihat daftar "Kartu belum dikenal",
bandingkan nomor yang muncul dengan yang terdaftar.

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