Skip to content

RFID Access Control v1.0.0

Choose a tag to compare

@Hyacinthe-primus Hyacinthe-primus released this 17 Jul 17:24
· 33 commits to main since this release

RFID Access Control v1.0.0

First stable release of the standalone ESP32-S3 RFID access controller. Runs fully offline (no PC required); a Python CLI is included for administration.

Hardware

  • ESP32-S3 dev board (8MB Octal PSRAM, 16MB Flash)
  • PN532 NFC/RFID module, hardware SPI mode
  • 16x2 I2C LCD (PCA8574 backpack, address 0x27 or 0x3F)
  • Passive buzzer on GPIO 6 (PWM tone feedback)
  • Wi-Fi (2.4GHz) for NTP time sync

Core Features

  • User database up to 10,000 entries, PSRAM-backed allocator
  • Expiration checking against NTP-synced clock (registered + valid_days)
  • Fail-safe behavior: every card denied with "No Time Sync" if NTP hasn't synced
  • Admin badges: no expiration, work even without NTP sync
  • Audible feedback: ascending tone on grant, descending tone on deny
  • Anti-brute-force lockout after MAX_CONSECUTIVE_DENIALS consecutive denials, configurable LOCKOUT_DURATION_MS
  • Wi-Fi provisioning and timezone (offset + DST) configurable at runtime via CLI, no reflash needed
  • Newline-delimited JSON serial protocol at 921600 baud

Python CLI (17 subcommands)

  • User management: add, remove (incl. --force, --except), rename, find, list
  • Batch import/export (JSON or CSV), with --dry-run and --clear
  • Automatic timestamped backup before any destructive operation
  • Tag renewal mode: tag-renew with quota control
  • UID scan mode: scan, scan --infinite
  • Device diagnostics: status, netstatus, ntp-time, ntp-sync
  • Port auto-detection with manual override (--port, list-ports)

Storage

  • LittleFS + newline-delimited JSON
  • Custom 16MB partition layout, 12MB LittleFS cap

Requirements

  • Arduino IDE 2.x, ESP32 board package v3.x
  • Libraries: Adafruit PN532, LiquidCrystal I2C, ArduinoJson v7.x
  • Python 3.9+ for the CLI