You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Attendance Machine adalah solusi presensi cerdas berbasis Internet of Things (IoT) yang dirancang untuk mengatasi tantangan infrastruktur jaringan yang tidak stabil. Dibangun di atas mikrokontroler ESP32-C3, sistem ini menerapkan arsitektur Hybrid yang menggabungkan kemampuan pemrosesan daring (online) dan luring (offline) secara mulus.
Spesifikasi Proyek
Field
Value
Project
Madrasah Universe
Author
Yahya Zulfikri
Device
ESP32-C3 Super Mini
Versi
2.3.0
IDE
Arduino IDE v2.3.6
Dibuat
Juli 2025
Diperbarui
Mei 2026
Fitur Utama
Sistem beroperasi dengan filosofi Self-Healing dan Store-and-Forward, menjamin integritas data kehadiran tanpa kehilangan (zero data loss) melalui:
Offline-First Capability — Data tersimpan lokal saat jaringan tidak tersedia.
Silent Background Sync — Sinkronisasi data batch setiap 5 menit tanpa feedback visual.
OTA Update Otomatis — Pembaruan firmware jarak jauh via HTTPS setiap 3 jam.
Non-Intrusive Reconnect — Auto-reconnect WiFi tanpa loading screen, mendukung 3 SSID.
Deep Sleep Scheduling — Manajemen daya otomatis di luar jam operasional (default: 18:00–05:00).
OLED Auto Dim — Layar mati otomatis pada jam 08:00–12:00 untuk hemat daya.
Provisioning Mode — Konfigurasi perangkat via captive portal WiFi tanpa perlu upload ulang firmware.
Admin RFID — Kartu RFID khusus untuk memicu sync manual dan melihat status perangkat.
Telemetry Heartbeat — Laporan status perangkat ke server setiap 5 menit.
Remote Config — Konfigurasi jadwal dan interval diambil dari server setiap 10 menit.
Factory Reset — Reset via tombol BOOT (tahan 5 detik).
CRC8 Integrity Check — Setiap record antrian diberi checksum untuk validasi integritas data.
Encrypted Credentials — API key dan kredensial WiFi dienkripsi AES-128-CBC di NVS menggunakan kunci turunan dari eFuse MAC.
Perangkat Keras
Komponen
Spesifikasi
Fungsi
Unit Pemroses
ESP32-C3 Super Mini
Logika utama, WiFi, sistem berkas
Sensor Identitas
RFID RC522 (13.56 MHz)
Baca UID kartu (SPI)
Penyimpanan
Modul MicroSD (SPI)
Queue CSV, RFID DB, log (Opsional)
Antarmuka Visual
OLED 0.96" SSD1306
Status koneksi, jam, queue counter
Indikator Audio
Buzzer Aktif 5V
Feedback sukses, gagal, notifikasi
Catu Daya
5V USB / 3.7V Li-ion
Sumber daya operasional
Pinout ESP32-C3
Komponen
Pin Modul
GPIO
Protokol
Bus SPI
SCK
4
SPI (Shared)
MOSI
6
SPI (Shared)
MISO
5
SPI (Shared)
RFID RC522
SDA (SS)
7
SPI
RST
3
Digital
SD Card
CS
1
SPI
OLED
SDA
8
I2C
SCL
9
I2C
Buzzer
(+)
10
PWM
Factory Reset
BOOT
9
Digital Input
Arsitektur & Alur Operasi
Boot
Startup Animation
└─ Init SD Card
├─ Ada SD → Load metadata → Load RFID cache ke RAM → Load Admin RFID
└─ Tidak ada SD → cek NVS buffer → tampil jika ada
└─ Provisioning check
└─ Belum dikonfigurasi → Captive Portal WiFi
└─ Load credentials (terenkripsi dari NVS)
└─ Connect WiFi (3 SSID, fallback)
├─ Berhasil → Sync NTP → Ping API
│ ├─ API OK → Sync NVS buffer → Bulk sync SD queue
│ │ → Cek & update RFID DB
│ └─ API Gagal → Offline mode
└─ Gagal → Offline mode
└─ Init RFID RC522
└─ Sistem Siap → Jalankan FreeRTOS Tasks
Saat Kartu Di-tap
RFID terbaca
└─ Admin RFID? → handleAdminScan() → tampil status + trigger sync
└─ Ada SD card?
├─ Ya → isRfidInCache() [lookup RAM < 1ms]
│ ├─ Cache kosong → izinkan (fallback)
│ ├─ Ditemukan → cek NVS recent scan → saveToQueue() ✓
│ └─ Tidak ditemukan → tolak (RFID NONAKTIF) ✗
└─ Tidak ada SD
├─ Online → kirimLangsung() ke API
│ ├─ Berhasil → selesai ✓
│ └─ Gagal → simpan ke NVS buffer
└─ Offline → simpan ke NVS buffer
└─ NVS penuh → tolak tap (BUFFER PENUH!)
Konfigurasi dilakukan via Provisioning Mode (captive portal) saat pertama kali boot atau setelah factory reset. Tidak perlu mengubah kode sumber.
Parameter
Default
Keterangan
Sleep Start
18:00
Jam mulai deep sleep
Sleep End
05:00
Jam selesai deep sleep
OLED Dim Start
08:00
Jam layar mati
OLED Dim End
12:00
Jam layar menyala kembali
Sync Interval
5 menit
Interval sinkronisasi background
OTA Check
3 jam
Interval cek firmware baru
RFID DB Check
3 jam
Interval cek database RFID
Reconnect
60 detik
Interval percobaan reconnect WiFi
Duplicate Window
30 menit
Interval pengecekan duplikasi tap
WDT Timeout
90 detik (normal) / 180 detik (sync)
Watchdog timeout
Provisioning Mode
Aktif otomatis jika perangkat belum dikonfigurasi atau setelah factory reset.
Parameter
Value
AP SSID
ATTENDANCE MACHINE
AP Password
P@ssw0rd
Timeout
5 menit
Hubungkan ke AP tersebut, buka browser, dan isi form konfigurasi (WiFi, API URL, API Key, nama perangkat, jadwal sleep & dim).
Factory Reset
Tahan tombol BOOT selama 5 detik saat perangkat menyala. Semua konfigurasi NVS, RFID DB, metadata antrian, dan failed log akan dihapus. Perangkat akan masuk Provisioning Mode setelah restart.
OLED Auto Dim Schedule
Waktu
Status OLED
Keterangan
00:00 – 07:59
ON
Display aktif
08:00 – 11:59
OFF
Display mati (hemat daya)
12:00 – 17:59
ON
Display aktif
18:00 – 04:59
SLEEP MODE
Deep sleep
Display tetap menyala sementara saat ada tap RFID meski dalam periode dim.
API Specification
Semua request menggunakan header X-API-KEY.
Endpoint
Method
Fungsi
/api/presensi/ping
GET
Health check
/api/presensi
POST
Kirim langsung (tanpa SD)
/api/presensi/sync-bulk
POST
Sinkronisasi batch (SD queue + NVS)
/api/presensi/firmware/check
POST
Cek ketersediaan OTA
/api/presensi/firmware/download/{file}
GET
Download firmware binary
/api/presensi/rfid-list/version
GET
Cek versi database RFID
/api/presensi/rfid-list
GET
Download database RFID
/api/presensi/heartbeat
POST
Telemetry perangkat
/api/presensi/config
GET
Remote config
Struktur File SD Card
/
├── queue_0.csv ← File antrian aktif (maks. 25 baris/file)
├── queue_1.csv
├── ...
├── queue_59999.csv ← Total kapasitas: 60.000 file × 25 = 1.500.000 record
├── queue_meta.txt ← Cache: pending count + indeks file aktif
├── rfid_db.txt ← Database RFID valid (diunduh dari server)
├── admin_rfid.txt ← Daftar RFID admin (maks. 5 kartu)
└── failed_log.csv ← Log record yang ditolak server (maks. 500 baris)
Catatan: Gunakan ESP32 Arduino core v3.x. API esp_task_wdt_init pada core v3.x menggunakan struct esp_task_wdt_config_t.
Troubleshooting
Masalah
Kemungkinan Penyebab & Solusi
Device restart saat boot setelah SD terdeteksi
WDT trigger saat scan file. Pastikan firmware v2.3.0.
esp_task_wdt_init compilation error
Pastikan ESP32 Arduino core v3.x.
OLED tidak mati/menyala sesuai jadwal
Pastikan NTP sudah tersync. Cek nilai dim schedule di provisioning.
NVS buffer tidak terhapus setelah online
NVS hanya dihapus jika server merespons HTTP 200. Cek koneksi server.
Tap ditolak BUFFER PENUH!
NVS buffer (40 record) penuh. Pastikan WiFi dan server online.
Tap ditolak RFID NONAKTIF
RFID tidak ada di cache RAM. Daftarkan di server; DB diperbarui otomatis setiap 3 jam atau restart untuk force download.
rfid_db.txt tidak terunduh
Cek endpoint /api/presensi/rfid-list dan header X-API-KEY. Pastikan SD tersedia.
Record tidak tersync meski online
Cek failed_log.csv untuk alasan penolakan server.
OTA tidak berjalan
Pastikan firmware aktif di panel server. Cek koneksi WiFi dan API key.
OTA gagal dengan error code
Error ditampilkan di OLED (ERR -xxx). Cek file .bin dan URL download.
Device restart loop setelah OTA
File .bin korup atau tidak kompatibel. Upload ulang firmware yang benar.
Waktu tidak akurat setelah power putus
Firmware menyimpan waktu ke NVS. Pastikan NVS namespace presensi tidak penuh.
Perangkat tidak mau provisioning
Tahan tombol BOOT 5 detik untuk factory reset, lalu hubungkan ke AP ATTENDANCE MACHINE.
Changelog
v2.3.0 (Mei 2026)
Tambah Provisioning Mode via captive portal WiFi (AP ATTENDANCE MACHINE) — konfigurasi tanpa upload ulang firmware
Tambah dukungan 3 SSID WiFi dengan failover otomatis saat reconnect
Tambah Admin RFID — kartu khusus untuk memicu sync manual dan melihat status via /admin_rfid.txt
Tambah Telemetry Heartbeat ke endpoint /api/presensi/heartbeat setiap 5 menit
Tambah Remote Config dari endpoint /api/presensi/config setiap 10 menit (jadwal sleep/dim, interval sync & OTA)
Tambah Factory Reset via tombol BOOT (tahan 5 detik)
Tambah CRC8 integrity check pada setiap record antrian SD
Tambah AES-128-CBC encryption untuk kredensial WiFi dan API key di NVS (kunci turunan dari eFuse MAC)
Tambah FreeRTOS multi-task: taskRfid, taskSync, taskDisplay berjalan paralel di core terpisah
Tambah Semaphore SD Mutex (xSdMutex) dan Display Mutex (xDisplayMutex) untuk akses aman antar task
Tambah RFID Queue (xRfidQueue, panjang 8) antara loop RFID dan task pemrosesan
Perluas kapasitas NVS Buffer dari 20 menjadi 40 record
Perluas kapasitas Queue Files dari 2.000 menjadi 60.000 file (total 1.500.000 record)
Perluas kapasitas RFID Cache RAM dari 2.000 menjadi 5.000 RFID
Tambah RFID Cache flat array (rfidCacheFlat[5000][11]) menggantikan array pointer heap
Tambah pengecekan kualitas sinyal WiFi (SIGNAL_THRESHOLD_WEAK, SIGNAL_THRESHOLD_CRITICAL) sebagai guard semua operasi jaringan
Tambah NVS last scan persistence (nvsSaveLastScan / nvsIsRecentScan) sebagai lapisan duplicate check tambahan di luar SD queue
Tambah scan count harian (nvsBumpScanCount, nvsGetScanCount) untuk telemetry
Pindahkan OTA_CHECK_INTERVAL dan RFID_DB_CHECK_INTERVAL ke #define terpisah; runtime dapat di-override via remote config
Tambah WDT dua mode: WDT_NORMAL_TIMEOUT_MS (90 detik) dan WDT_SYNC_TIMEOUT_MS (180 detik) dengan fungsi extendWdtForSync() / restoreWdtNormal()
Tambah sleepRequested flag untuk koordinasi graceful sleep antar FreeRTOS task
Tambah QUEUE_WARN_THRESHOLD (48.000 file): pesan QUEUE HAMPIR PENUH! ditampilkan saat mendekati kapasitas
Perbaikan: sync gap boundary file menggunakan pengecekan NVS last scan selain sliding window SD
Perbaikan: MAX_SYNC_FILES_PER_CYCLE tetap 5 untuk menjaga responsivitas tap selama sync
Update versi string ke 2.3.0
v2.2.11 (Maret 2026)
Kembalikan jadwal sleep ke SLEEP_START_HOUR 18
Kembalikan OTA_CHECK_INTERVAL ke 3 jam
v2.2.10 (Maret 2026)
Tambah persistensi waktu ke NVS untuk ketahanan terhadap reset paksa
Tambah kompensasi lastValidTime saat bangun dari deep sleep
Ubah OTA check ke 6 jam, sleep start ke 23:00
v2.2.9 (Maret 2026)
Tambah fitur RFID Local Database
v2.2.8 (Maret 2026)
Tambah OTA Update otomatis
v2.2.7 (Maret 2026)
Rilis awal sistem hybrid (Queue System + NVS Buffer + Deep Sleep)
Lisensi
Hak Cipta 2025 Yahya Zulfikri. Kode sumber ini dilisensikan di bawah MIT License untuk penggunaan pendidikan dan pengembangan profesional.
About
Attendance Machine adalah solusi presensi cerdas berbasis Internet of Things (IoT) yang dirancang untuk mengatasi tantangan infrastruktur jaringan yang tidak stabil. Dibangun di atas mikrokontroler ESP32-C3, sistem ini menerapkan arsitektur Hybrid yang menggabungkan kemampuan pemrosesan daring (online) dan luring (offline) secara mulus.