Embedded Hardware · Zero Internet / Zero Cellular

ESP32 Offline Captive-Portal Attendance Logger

A portable, zero-infrastructure hardware attendance device built on an ESP32 for basement and concrete classrooms with no cellular service. Operates as an independent Wi-Fi access point with captive DNS redirection, automatically popping up an instant check-in form on connected student phones, deduplicating submissions by MAC address, and writing records directly to a Micro-SD card CSV file.

Microcontroller ESP32 (Tensilica Dual-Core 240MHz)
Storage Bus SPI Bus (Micro-SD FAT32 CSV)
Network Mode SoftAP + Captive DNS (UDP Port 53)
External Dependencies None (100% Offline Standalone)
Autonomous hardware & captive DNS redirection Zero cloud / Zero internet dependency
ESP32 SoftAP SSID: "BAU_Classroom" Local IP: 192.168.4.1 Captive DNS Intercept (53) Student Smartphone Auto Captive Portal Prompt Zero App Install Required SPI Bus & Queue In-Memory Circular Buffer MAC Hash Deduplication SD Card FAT32 .CSV

What I Personally Built

I engineered this system to eliminate attendance roll-call friction in lecture halls where mobile cell reception is weak or university Wi-Fi is unavailable:

  • Autonomous SoftAP & Captive DNS Hijacking: Configured the ESP32 internal radio to broadcast an open network and initialized a local DNS server intercepting all incoming domain lookups (RFC 1035), directing every phone to the ESP32 local IP `192.168.4.1`.
  • Embedded HTML/CSS Micro-Server: Handcrafted an ultra-lightweight (under 4KB total footprint) mobile-friendly attendance form served straight from the ESP32 microcontroller flash memory, responding within 25 milliseconds.
  • SPI Hardware Bus & SD-Card Driver: Wired and programmed the SPI communication lines with a micro-SD card breakout board. Formatted the card with a standard FAT32 filesystem so instructors can plug the card into any computer and open the spreadsheet in Excel.
  • Anti-Cheating & Duplicate Prevention: Designed an in-memory hash table tracking client MAC addresses and student IDs, rejecting multiple check-in attempts from the same device for different students.

Engineering Challenges & Solutions

1. SD Card Write Latency During Simultaneous Check-Ins

Writing to an SD card over SPI takes 50–200 ms depending on flash block allocation. When 20 students submit the form at the exact same second, synchronous writes cause HTTP request timeouts and client connection drops.
Solution: Created a FreeRTOS circular memory buffer. Incoming submissions are instantly acknowledged to the student's browser and queued in internal RAM, while a dedicated background write task flushes the records to the SD card sequentially.

2. Operating System Captive Portal Detection Consistency

Different mobile OSes (iOS, Android, Windows) use different probe domains to detect captive portals (e.g., `captive.apple.com`, `connectivitycheck.gstatic.com`).
Solution: Programmed the local web server to catch all probe paths and return HTTP 302 redirects to `/index.html`, ensuring the native check-in sheet opens automatically across all phone models without manual browser URL entry.

Contact

I am open to internships, junior IoT roles, and firmware engineering opportunities.

If you are working on embedded hardware, connected devices, or backend telemetry, get in touch: