

Esp32-access control reader
ESP32-based hardware access control reader for PDX Hackerspace
- Size
- 95 × 55 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 56
- Nets
- 60
- Pads
- 203
- Tracks, vias
- 472, 77
- Pours
- 178
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 30 Sep 2026
- Updated
- 5 Nov 2026
Overview
Esp32-access control reader is an open-source printed circuit board by romkey, from the romkey/esp32-access-control repository on GitHub, published under the MIT licence. It is a 2-layer board of 95 × 55 mm with 56 parts on 60 nets, routed with 472 tracks and 77 vias.
It is built around the TXS0108EPWR, SS34 and AO3400A, with the SM04B-SRSS-TB(LF)(SN), TPD2E2U06DCKR-TP and TYPE-C-31-M-12 among its other parts. Its parts include 10 resistors, 6 capacitors, 6 connectors, 5 diodes and 3 ICs. It belongs with the ESP32 boards of this library.
Main components
6TXS0108EPWR
UncategorisedUnknown makerSS34
SMA(DO-214AC)-55℃~+125℃ 3A 40V 500uA@40V 550mV@3A Independent SMA(DO-214AC) Schottky Diodes ROHSMDDSchottky DiodesAO3400A
SOT-23-55℃~+150℃ 1 N-channel 1.45V 1.4W 30V 48mΩ@2.5V 5.7A 50pF 630pF 75pF 7nC@10V N-Channel SOT-23 MOSFETs ROHSAlpha & Omega SemiconductorMOSFETsSM04B-SRSS-TB(LF)(SN)
SMD,P=1mm,卧贴-25℃~+85℃ 1 1A 1mm 1x4P 2.9mm 4 4.32mm 4P 50V 6mm Auxiliary Solder Pin Copper alloy PA SH Surface Mount, Right Angle Tin UL94V-0 White SMD,P=1mm,卧贴 Wire To Board Connector ROHSJSTWire To Board ConnectorTPD2E2U06DCKR-TP
SOT-323MOSFETsTECH PUBLICTYPE-C-31-M-12
SMD-30℃~+80℃ 1 10,000 cycles 16P 20V 5A 7.35mm Female Surface Mount, Right Angle Type-C SMD USB Connectors ROHSHRO ElectronicsUSB Connectors
README
README.mdesp32-access-control
An open source, ESP32-based Wiegand reader: a board, ESPHome firmware and a 3D-printable case.
At PDX Hackerspace we used RFID keys to unlock doors and access our laser cutter. We want to expand their use, to make it easy for members to print parking permits for projects, unlock the main entrance for events, claim prints on 3D printers and more. We currently use Raspberry Pis for the doors and an ESPKey for the laser cutter; this project can provide a low cost simple way to integrate with Wiegand RFID readers and possibly as the basis for replacing the aging Raspberry Pis controlling our doors.
AI disclosure: This project was written by AI under human oversight, following these rules.
What's here
| Path | What it is |
|---|---|
hw/reader/<version>/ | KiCad project for the board, one directory per revision |
BOFFF.md | Bill of Form, Fit and Function: board outline, mounting holes and connector positions, for designing enclosures |
examples/access-control.yaml | The door controller: Wiegand reader, access database, door relay, syslog |
examples/simple.yaml | ESPHome config for bring-up: LED switch, reader LED and beeper, Wiegand tag reading |
examples/common/base.yaml | Settings every example shares: encrypted API and OTA, recovery, web server |
packages/ | Board-agnostic ESPHome packages for the door controller; pins come from the including config |
components/ | C++ external components: access_db, access_site, access_syslog, push_auth |
case/ | OpenSCAD design for a wall or desk kiosk in portrait and landscape layouts; see case/README.md |
datasheets/ | Manufacturer datasheets, each with a license note |
docs/ | Overview and configuration reference |
Technical details
Hardware:
- dual level-shifted 5V Wiegand interfaces with wiring for data (D0, D1), LED and beep along with power
- ESP32-S3-N16R8: ESP32-S3 with 16MB of flash and 8MB of octal PSRAM (GPIO35-37 are used by the PSRAM and unavailable)
- USB C port
- power and data LEDs
- Qwiic connector for I2C devices
- header for SPI TFT displays with touch controllers
- "aux" header for satellite boards with optional power to this board
Connectors, from BOFFF.md:
| Ref | Part | What it is |
|---|---|---|
| J1 | 10-pin header | Aux: GND, 3.3V, TX0, RX0, IO42, IO41, IO40, IO39, IO38, +5V in |
| J2 | 14-pin header | SPI TFT with touch: 3.3V, GND, CS, RST, DC, SDO, SCK, LED, SDI, then T_CLK, T_CS, T_DIN, T_DO, T_IRQ |
| J3 | SM04B-SRSS-TB | Qwiic: GND, 3.3V, SDA, SCL |
| J4 | USB-C | Power and programming |
| J5, J6 | WAGO 2601-1106 | Wiegand readers 1 and 2: +5V, GND, then four signals (D0, D1, LED, beep; see the schematic for the order) |
I2C: SDA and SCL on J3, with 4.7k pull-ups to 3.3V. The board carries no I2C devices of its own.
examples/simple.yaml and examples/access-control.yaml wire one reader on D0 = GPIO18, D1 = GPIO17, reader LED = GPIO16
(active low) and beeper = GPIO15 (active low). Check these against the schematic before
relying on them. The board has no relay output; packages/door-relays.yaml is an example for a relay or strike driven from
the J1 aux header or a satellite board. examples/access-control.yaml uses GPIO38 and GPIO39 (J1) as example
values; set door_relay_1_pin and door_relay_2_pin for your own hardware.
Using the packages from another project:
external_components:
- source: github://romkey/esp32-access-control@vX.Y.Z
packages:
access-door: github://romkey/esp32-access-control/packages/access-door.yaml@vX.Y.ZSee docs/configuration.md for the substitutions each package takes.
Datasheets: TXS0108E level shifter, WAGO 2601-1106 terminal block.
Building
Requires Docker. Nothing else needs installing.
cp examples/secrets.yaml.example examples/secrets.yaml # then edit it (generate a real api key)
docker compose run --rm validate # esphome config on every example
docker compose run --rm build # compile every example
docker compose run --rm lint # all pre-commit checks, like CIThe first build downloads the toolchains into a Docker volume; later builds reuse them and only recompile what changed.
The case is built separately with OpenSCAD: make -C case. See case/README.md.
Flashing
To flash a new board, build the firmware images:
docker compose run --rm firmwareThen open https://web.esphome.io in Chrome or Edge, connect the board over USB and upload
dist/<name>.factory.bin. After that, update over the network (OTA). The images contain
your Wi-Fi credentials; don't share them.
Case
case/ has an OpenSCAD design for a 3D-printable wall or desk kiosk, in portrait and landscape layouts. It holds the board, a 3.5" or 4.0" SPI TFT, and an HID ProxPoint Plus reader mounted on the front. CI renders the STLs on every change and attaches them to the workflow run. See case/README.md for parts, print settings and assumptions to check.
License
MIT, except the manufacturer datasheets in datasheets/,
which belong to their manufacturers and are not covered by this license; see
each datasheet's -license.txt.
Parts
56| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | MountingHole_2.2mm_M2_Pad | MountingHole:MountingHole_2.2mm_M2_Pad | MNT1, MNT2, MNT3, MNT4 |
| 3 | 100nF | Capacitor_SMD:C_0603_1608Metric | C2, C4, C6 |
| 3 | 10K | Resistor_SMD:R_0603_1608Metric | R7, R8, R9 |
| 2 | 2601-1106 | easyeda2kicad:CONN6_2601-1106_WAG | J5, J6 |
| 2 | 4.7K | Resistor_SMD:R_0603_1608Metric | R1, R2 |
| 2 | 5.1k | Resistor_SMD:R_0603_1608Metric | R5, R6 |
| 2 | Kobee Studio | kobee-studio-6AA40528 | kobee-studio-8, kobee-studio-9 |
| 2 | SS34 | Diode_SMD:D_SMA | D1, D2 |
| 1 | 100 | Resistor_SMD:R_0603_1608Metric | R3 |
| 1 | 100K | Resistor_SMD:R_0603_1608Metric | R4 |
| 1 | 10µF | Capacitor_SMD:C_0603_1608Metric | C1 |
| 1 | 1µF | Capacitor_SMD:C_0603_1608Metric | C5 |
| 1 | 220 | Resistor_SMD:R_0603_1608Metric | R10 |
| 1 | 22µF | Capacitor_SMD:C_0603_1608Metric | C3 |
| 1 | AO3400A | easyeda2kicad:SOT-23-3_L2.9-W1.3-P1.90-LS2.4-BR | Q1 |
| 1 | AP2114H-3.3 | easyeda2kicad:SOT-223_L6.7-W3.5-P2.30-BR | U1 |
| 1 | BOOT | EasyEDA:SW-SMD_4P-L5.1-W5.1-P3.70-LS6.5-TL_H1.5 | SW2 |
| 1 | CTRLH Logo | 1myFootprints:CTRLH Logo | NOT2 |
| 1 | Conn_01x10 | Connector_PinHeader_2.54mm:PinHeader_1x10_P2.54mm_Vertical | J1 |
| 1 | ESP32-S3-WROOM-1(N16R8) | EasyEDA:WIRELM-SMD_ESP32-S3-WROOM-1 | U3 |
| 1 | G*** | kobee-studio-6A958584 | kobee-studio-3 |
| 1 | G*** | kobee-studio-6AA4CF77 | kobee-studio-4 |
| 1 | G*** | kobee-studio-6AA432BC | kobee-studio-15 |
| 1 | G*** | kobee-studio-6AA480A6 | kobee-studio-7 |
| 1 | G*** | kobee-studio-6AA432D5 | kobee-studio-10 |
| 1 | G*** | kobee-studio-6AA2D906 | kobee-studio-11 |
| 1 | G*** | kobee-studio-6A950CF3 | kobee-studio-13 |
| 1 | G*** | kobee-studio-6AAB212F | kobee-studio-6AAB212F |
| 1 | G*** | kobee-studio-6AA4CD99 | kobee-studio-2 |
| 1 | G*** | kobee-studio-6AA4CF94 | kobee-studio-5 |
| 1 | G*** | kobee-studio-6AA82569 | kobee-studio-1 |
| 1 | G*** | kobee-studio-6A950CDA | kobee-studio-14 |
| 1 | G*** | kobee-studio-6AA2D8EB | kobee-studio-12 |
| 1 | G*** | kobee-studio-6A95859C | kobee-studio-6 |
| 1 | LED | LED_SMD:LED_0805_2012Metric | D5 |
| 1 | PWR | LED_SMD:LED_0805_2012Metric | D4 |
| 1 | RESET | EasyEDA:SW-SMD_4P-L5.1-W5.1-P3.70-LS6.5-TL_H1.5 | SW1 |
| 1 | SM04B-SRSS-TB_(LF)(SN) | easyeda2kicad:CONN-SMD_4P-P1.00_SM04B-SRSS-TB-LF-SN | J3 |
| 1 | TPD2E2U06DCKR | EasyEDA:SC-70-3_L2.0-W1.3-P0.65-LS2.1-BL | D3 |
| 1 | TXS0108EPWR | easyeda2kicad:TSSOP-20_L6.5-W4.4-P0.65-LS6.4-BL | U2 |
| 1 | TYPE-C-31-M-12 | easyeda2kicad:USB-C-SMD_MC-311D | J4 |
| 1 | ~ | Connector_PinHeader_2.54mm:PinHeader_1x14_P2.54mm_Vertical | J2 |
The 54 most common of 56 parts.
Questions
How big is the Esp32-access control reader PCB?
It measures 95 × 55 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Esp32-access control reader use?
56 parts, built around the TXS0108EPWR, SS34, AO3400A and SM04B-SRSS-TB(LF)(SN). The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Esp32-access control reader KiCad files?
From the romkey/esp32-access-control repository on GitHub, at the commit this page was made from: the board is hw/reader/0.1.0/esp32-access-control-reader/esp32-access-control-reader.kicad_pcb and its schematic hw/reader/0.1.0/esp32-access-control-reader/esp32-access-control-reader.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Esp32-access control reader design in my own project?
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).
Similar boards
- 2 layers142 × 208 mm

- 4 layers40 × 60 mm

Trinketcore
alph4345/test
TrinketCore puts everything a small rechargeable gadget needs on one 40 × 60 mm board, ready to order assembled from PCBWay:
113 parts - 2 layers431.2 × 126.4 mm

Convertible keyboard pcb
TechnikWeber/convertible-keyboard-pcb
Convertible keyboard PCB: full-size ISO-DE & ANSI with a snap-off numpad that turns it into a TKL (RP2040, USB-C, KiCad). Cheap, clean, modern core to build on — looking for a case designer.
504 parts - 2 layers109 × 126.4 mm

RheoBoard v1.05
The-Hybrid-Atelier/RheoBoard
RheoBoard is open hardware for pneumatic retraction-extrusion measurements.
162 parts - 2 layers70 × 100 mm

Lower
sbarisic/MagMouse
Open source hall-effect based mouse - no mechanical contacts - no failure points
128 parts2 - 4 layers21 × 51 mm

Lightwolf
wolf-yuan-6115/lightwolf
Pumper is an experimental RP2354-based USB Audio Class 2 DAC. The board uses a PCM5102A DAC with OPA1652 and OPA1622 analog stages in a compact design intended for learning about USB audio and DAC hardware.
53 parts1GPL-3.0 - 4 layers45 × 45 mm

ESP32-P4-CAM MAIN
momszx/esp32-p4-cam
ESP32-P4 compact WiFi streaming camera - KiCad 10 hardware (MAIN rev A, 4-layer 45x45 mm) and design docs
120 parts - 2 layers35 × 100 mm

WalkieTalkie
GuzziFlipFlops/ESP32-Walkie-Talkie
An open source ESPNOW based walkie talkie with a 600 meter tested distance, with an OLED and multiple buttons to interact with
66 parts7MIT