Skip to content

Hardware and Wiring

Hyacinthe-primus edited this page Jul 17, 2026 · 3 revisions

Hardware and Wiring

Hardware Required

Component Notes
ESP32-S3 dev board QFN56, rev v0.2, 8MB Octal PSRAM, 16MB Flash, 40MHz XTAL (as tested)
PN532 NFC/RFID module V3 Must be set to SPI mode via onboard DIP switches, see below
16x2 LCD with PCA8574 I2C backpack Address is usually 0x27 or 0x3F, see Troubleshooting
Passive buzzer Connected to GPIO 6, see below
USB-C / micro-USB cable Data-capable, not charge-only
Breadboard + jumper wires
Wi-Fi network (2.4GHz) Required for NTP time sync -- see Python CLI Guide

Software Required

  • Arduino IDE 2.x
  • ESP32 board package (via Boards Manager), v3.x recommended
  • Libraries (Library Manager):
    • Adafruit PN532
    • LiquidCrystal I2C (Frank de Brabander / Marco Schwartz fork)
    • ArduinoJson (v7.x)
    • WiFi and Preferences -- ship with the ESP32 board package
  • Python 3.9+ for the CLI, with pip install -r python_cli/requirements.txt

PN532: Configuring SPI Mode

SW1 SW2 Mode
ON OFF SPI (use this)
OFF OFF HSU (UART)
OFF ON I2C
ON ON Reserved / invalid

Set SW1 = ON, SW2 = OFF. If getFirmwareVersion() prints 0x0 at boot, DIP switches are wrong or MISO/MOSI are swapped.

Wiring

A wiring diagram (Wiring.png) ships in the repo root.

SPI: ESP32-S3 to PN532

ESP32-S3 GPIO PN532 Pin Signal
GPIO 12 SCK SPI Clock
GPIO 13 MISO SPI Master In
GPIO 11 MOSI SPI Master Out
GPIO 10 SS / NSS Chip Select
3V3 VCC Power (do not use 5V)
GND GND Ground

I2C: ESP32-S3 to 16x2 LCD

ESP32-S3 GPIO LCD Backpack Pin Signal
GPIO 8 SDA I2C Data
GPIO 9 SCL I2C Clock
5V VCC Power (May require an external power supply)
GND GND Ground

Buzzer (passive)

ESP32-S3 GPIO Buzzer Pin Signal
GPIO 6 Signal/+ PWM tone (driven via tone()/ledc)
GND - Ground

Must be a passive buzzer (driven by PWM tone), not active. Access Granted plays a ~1.5s ascending 4-note tone; Access Denied plays a descending one.

Power

The LCD backpack requires a 5V power supply. Power from a separate 5V source (or VBUS pin), and tie all GND wires together.

RFID Access Control ESP32-S3 · PN532 · Python CLI


🚀 Getting Started

🐍 Using the CLI

🧭 Reference


📦 README 🐛 Issues

Clone this wiki locally