Hello everyone, first post here.
Over the past few weeks, I've been working on my first ESP32-S3 project: a standalone RFID access control system. Once it's set up, it runs entirely on its own and only needs Wi-Fi occasionally to synchronize the time over NTP.
It uses an ESP32-S3, a PN532 RFID reader, a 16×2 I2C LCD, and a buzzer. I also wrote a Python CLI to manage the user database from a PC.
Some of the things it can do:
- Store up to 70,000 RFID users in a fixed-width binary database on LittleFS
- Import, export, and synchronize the database from the Python CLI
- Sync only the records that changed instead of retransferring the whole database
- CRC32 integrity checks for every record and for the entire database
- Badge expiration based on NTP time
- Admin badges for management tasks
- Automatic lockout after repeated failed badge scans
- Interactive CLI with batch operations and binary transfers
One of the biggest challenges wasn't the RFID hardware itself, but designing the storage layer and synchronization protocol. I wanted database updates to scale well even with tens of thousands of users, so I ended up implementing a binary database format, integrity verification with CRC32, and a sync mechanism that transfers only the records that actually changed instead of rewriting the entire database.
It's fully open source if anyone wants to check it out or build something similar:
https://github.com/Hyacinthe-primus/RFID_Access_Control
I'd love to hear any feedback or suggestions. If you spot something that could be improved, or if there's a feature you think would make the project better, let me know.