This project is a complete offline + online RFID-based attendance and registration system built using an ESP32, MFRC522 RFID reader, DS3231 RTC, ILI9341 TFT display, and Google Sheets integration via a Google Apps Script Web App. HTML Email Reports with user name, UID, time/date, and mode
It features real-time attendance marking, offline data storage with auto-sync, registration, time tracking, email notifications, and a user-friendly TFT interface.
- π RFID Authentication with MFRC522
- π Wi-Fi Connectivity with auto-reconnect and signal strength display
- π Real-Time Clock (DS3231) with NTP sync when online
- π Google Sheets Integration for logging attendance & registration
- π€ Offline Data Logging to EEPROM with auto-upload when online
- π§ Email Notifications using ESP_Mail_Client (SMTP via Gmail)
- π₯οΈ TFT Display (ILI9341) with mode, time, date, UID info, status icons
- π§ EEPROM Storage (512 bytes) for offline mode
- π Buzzer Feedback and LED WiFi status indicators
- π Mode Toggle Button between
Registration
andAttendance
- π§Ύ HTML Email Reports with user name, UID, time/date, and mode
- π‘ WiFi Icon UI shows signal bars or red cross when disconnected
Component | Model / Specs |
---|---|
Microcontroller | ESP32 (DevKit / NodeMCU) |
RFID Reader | MFRC522 |
RTC Module | DS3231 |
Display | ILI9341 2.4"/2.8" SPI |
EEPROM | Built-in (512 bytes used) |
Buzzer | Passive Buzzer (Pin 27) |
LED | Indicator (Pin 26) |
Button | Toggle mode (Pin 25) |
stateDiagram-v2 [*] --> Idle
Idle --> ModeSwitch : Button Press
ModeSwitch --> Idle : Mode toggled (reg <-> atc)
Idle --> ScanCard : Card detected
ScanCard --> CheckWiFi : Check WiFi connection
CheckWiFi --> Online : WiFi connected
CheckWiFi --> Offline : WiFi disconnected
Online --> Registration : Mode == reg
Online --> Attendance : Mode == atc
Registration --> SendRegisterRequest : Send UID & Mode to Server
SendRegisterRequest --> RegisterSuccess : UID not registered
SendRegisterRequest --> RegisterFail : UID already registered
RegisterSuccess --> SendEmailNotification
RegisterFail --> Idle
SendEmailNotification --> Idle
Attendance --> CheckUID : Check UID in user database
CheckUID --> UIDFound
CheckUID --> UIDNotFound
UIDFound --> CheckTodayAttendance
CheckTodayAttendance --> MarkTimeIn : No attendance today
CheckTodayAttendance --> MarkTimeOut : Time In exists but no Time Out
CheckTodayAttendance --> AttendanceComplete : Time In and Time Out already marked
MarkTimeIn --> SendAttendanceRequest
MarkTimeOut --> SendAttendanceRequest
SendAttendanceRequest --> AttendanceSuccess
SendAttendanceRequest --> AttendanceFail
AttendanceSuccess --> SendEmailNotification
AttendanceFail --> LogOfflineData
SendEmailNotification --> Idle
UIDNotFound --> ShowErrorMessage : UID not registered
ShowErrorMessage --> Idle
Offline --> LogOfflineData : Save scan data to EEPROM
LogOfflineData --> Idle
Idle --> SyncOfflineData : WiFi reconnect detected
SyncOfflineData --> SendOfflineDataRequests
SendOfflineDataRequests --> SyncComplete
SyncComplete --> Idle