Skip to the content
4 layers90 × 95 mmWiegand bridge, the printed circuit board in 3D

ESP32-S3 Wiegand reader bridge for Home Assistant: 4-layer board, BOM and ESPHome firmware.

Size
90 × 95 mm
Copper layers
4
Thickness
1.6 mm
Parts
197
Nets
121
Pads
594
Tracks, vias
1,736, 453
Pours
10
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
15 Oct 2026
Updated
6 Nov 2026

Overview

Wiegand bridge is an open-source printed circuit board by EdgeCoil, from the EdgeCoil/wiegand-bridge repository on GitHub. It is a 4-layer board of 90 × 95 mm with 197 parts on 121 nets, routed with 1,736 tracks and 453 vias.

It is built around the ESP32-S3-WROOM-1-N8R2, SN74LVC2G17DBV and SP3485EEN, with the LMV321, MT3608 and CN3058E among its other parts. Its parts include 71 resistors, 37 capacitors, 22 diodes, 16 connectors and 11 transistors. It belongs with the interfaces and adapters and home automation and IoT boards and the ESP32 boards of this library.

Main components

12

README

hardware/lite/README.md

Wiegand bridge LITE — board files

The small board for docs/lite.md (design, reasoning, what was dropped from the full board and why). A sibling of ../ (the full board): same code-generated flow, its own netlist.py and placement.py, and the pipeline scripts copied and trimmed rather than shared — every script in the full board's tree hard-codes its board name and part references, and the live rev 11 tree was not worth refactoring for this.

FileWhat it is
netlist.pySource of truth: every part, its JLCPCB part number and which net each pad joins
placement.pyWhere each part sits (board 42 × 44 mm)
build_pcb.pyMakes wiegand-bridge-lite.kicad_pcb, unrouted, from the two files above
route.pyThermal vias under the module, the USB-C VBUS pad-pair hand route, GND fan-out, Freerouting, ground pours
padgap.pyPre-route: pads of different nets closer than 0.25 mm (new for this board)
verify.pyEvery file-based check in one run (DRC, audit, pad gaps, joint spacing, silk sizes, firmware↔netlist, polarity, open pads, BOM/CPL/gerbers, JLCPCB classes and stock); --offline skips the library query
stitch.py, via_fix.py, gndcheck.py, dfm_post.py, audit.pyPost-route, as the full board; audit.py has no screen/battery sections
schematic.py, fab.py, finish_net.py, widen.py, plane_connect.pyAs the full board, names changed
wiegand-bridge-lite.kicad_proCarries the netclasses (signals 0.2 mm / 0.15 mm, power 0.5 mm): without it kicad-cli pcb drc falls back to 0.2 mm clearance and reports ~90 false clearance errors (seen 2026-10-21 when the project file was left out of a copy)
lib/, art/Symlinks into ../ (the full board) — one footprint library (the new parts were fetched into it) and one mark

Differences from the full board's scripts, so a diff is not a surprise: 2 mounting holes; the MINI-1's nine centre GND pads take the thermal vias (no exposed pads anywhere else, so dfm_post has no paste windows); route.py pre-routes only the USB-C VBUS pair; fab.py has no rotation or body-centre fixes (every footprint is EasyEDA-sourced except the 0603/0805 passives, the solder jumper and the holes).

Rebuild

bash
python3 build_pcb.py                 # system python3: KiCad 9's pcbnew module
python3 audit.py --silk              # labels vs pads/outlines/bodies/edge: iterate before routing
python3 padgap.py 0.25               # pads of different nets closer than 0.25 mm: MUST be 0 before routing
ROUTE_WORK=/tmp/wbl python3 route.py 60             # 30 passes was not enough here
python3 stitch.py && python3 stitch.py --islands
python3 via_fix.py --apply && python3 via_fix.py   # the second run must report 0 vias inside pad openings
python3 gndcheck.py                  # run from this directory
python3 dfm_post.py                  # copper round D1/D3
python3 audit.py
python3 fab.py                       # NOTE: clears fab/, deleting the two PDFs below -- regenerate them
python3 schematic.py
kicad-cli pcb export pdf --layers F.Mask,F.Silkscreen,F.Courtyard,Edge.Cuts --mode-single \
    --black-and-white --ibt -o fab/wiegand-bridge-lite-1to1.pdf wiegand-bridge-lite.kicad_pcb
kicad-cli pcb drc wiegand-bridge-lite.kicad_pcb
python3 verify.py                    # everything above plus the cross-checks; must end ALL CHECKS PASSED

Space parts by pad extents, not courtyards. KiCad's 0603 courtyard is 3.0 × 1.5 mm (generous) while the EasyEDA footprints' courtyards stop short of their pad ends (the SMA, SOT-23 and TSOT pads run up to 0.9 mm past them), so a courtyard check passed three placements whose pads overlapped and whose routes failed on exactly those pads. padgap.py is the check; the 10 remaining courtyards_overlap DRC warnings between cell passives are accepted (pads ≥ 0.25 mm apart). route.py also pre-routes the USB-C's VBUS pad pair, which Freerouting never joins.

Ordering at JLCPCB

Upload fab/wiegand-bridge-lite-gerbers.zip, choose PCB Assembly (top side), then upload the BOM and CPL. Check every polarised part's rotation in the CPL previewer — the three LEDs, the four diodes (pad 1 = cathode on every SMA and SOD-123 part), the ICs, the module, the USB-C. The terminal J3 is through-hole: either add JLCPCB's THT assembly or leave it off the BOM and solder it by hand. The mating plug (KF2EDGK-3.5-8P) is not on the BOM; buy it separately.

Parts

197
QtyValueFootprintReferences
1810kR_0603_1608MetricR4, R5, R11, R12, R15, R18, R20, R35, R44, R45, R46, R47, R50, R60, R65, R74 +2
14100kR_0603_1608MetricR13, R14, R21, R27, R28, R29, R31, R51, R52, R58, R61, R62, R64, R79
141kR_0603_1608MetricR3, R8, R9, R10, R24, R26, R40, R41, R42, R43, R63, R70, R71, R81
12100nC_0603_1608MetricC3, C12, C16, C22, C23, C24, C34, C36, C37, C38, C39, C40
922uC_0805_2012MetricC4, C5, C7, C9, C10, C17, C18, C19, C35
72N7002SOT-23-3_L2.9-W1.3-P1.90-LS2.4-BRQ1, Q2, Q4, Q7, Q8, Q9, Q10
4100R_0603_1608MetricR6, R7, R17, R25
410nC_0603_1608MetricC27, C28, C29, C30
410uC_1206_3216MetricC2, C31, C32, C33
4M3MountingHole_3.2mm_M3H1, H2, H3, H4
4SMF36CASOD-123FL_L2.7-W1.8-LS3.8-BID17, D18, D21, D22
4SS34SMA_L4.3-W2.6-LS5.2-RDD3, D4, D10, D11
310uC_0603_1608MetricC8, C20, C21
3200kR_0603_1608MetricR19, R30, R80
320kR_0603_1608MetricR66, R67, R69
34x10kRES-ARRAY-SMD_0603-8P-L3.2-W1.6-BLRN1, RN2, RN3
35.1kR_0603_1608MetricR1, R2, R77
3SM712SOT-23-3_L3.0-W1.7-P0.95-LS2.9-BRD15, D16, D19
2100pC_0603_1608MetricC14, C15
215kR_0603_1608MetricR16, R32
2390R_0603_1608MetricR72, R73
24.7kR_0603_1608MetricR36, R37
2AO3401ASOT-23_L2.9-W1.3-P1.90-LS2.4-BRQ5, Q11
2BIASSolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP3, JP4
2MMSZ5231BSOD-123_L2.8-W1.6-LS3.7-RDD5, D6
2SS56SMA_L4.3-W2.6-LS5.0-RDD1, D13
2greenLED0805-R-RDD7, D23
2redLED0805-RDD8, D12
10.2RR_1206_3216MetricR59
10.5AF1812F1
110k NTC B3950R_0603_1608MetricRT1
110uC_0805_2012MetricC6
1120R_0603_1608MetricR68
113.2VSolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP1
115uHIND-SMD_L7.0-W6.6_FXL0630L1
11N4148WSOD-123F_L2.7-W1.6-LS3.8-RDD14
11uC_0603_1608MetricC13
12.2uHIND-SMD_L4.0-W4.0L2
122uC_0603_1608MetricC11
12A 60VF2920F2
139kR_0603_1608MetricR55
14.7uHIND-SMD_L5.0-W5.0L3
147kR_0603_1608MetricR56
16-36V INCONN-TH_P5.08_KF128-5.08-2PJ2
168kR_0603_1608MetricR78
18.2kR_0603_1608MetricR57
1AO3400ASOT-23-3_L2.9-W1.3-P1.90-LS2.4-BRQ12
1BOOTSW-SMD_4P-L5.1-W5.1-P3.70-LS6.5-TL_H1.5SW1
1CN3058ESOIC-8_L4.9-W3.9-P1.27-LS6.0-BL-EP3.3U5
1DC INDC-IN-TH_DC-005-5.5-2.0J14
1DW01ASOT-23-6_L2.9-W1.6-P0.95-LS2.8-BLU7
1ESP32-S3-WROOM-1-N8R2WIRELM-SMD_ESP32-S3-WROOM-1U1
1EXPANSIONPinHeader_2x06_P2.54mm_VerticalJ19
1FS8205ASOT-23-6_L2.9-W1.6-P0.95-LS2.8-BRQ6
1GNDTestPoint_Pad_D1.5mmTP4
1GND IN3CONN-TH_P5.08_KF128-5.08-2PJ12
1IN1 IN2CONN-TH_P5.08_KF128-5.08-2PJ9
1IN4 GNDCONN-TH_P5.08_KF128-5.08-2PJ13
1IO40TestPoint_Pad_D1.5mmTP3
1LMR16020SOIC-8_L4.9-W3.9-P1.27-LS6.0-BL-EPU2
1LMV321SOT-23-5_L3.0-W1.7-P0.95-LS2.8-BRU10
1LiFePO4 + NTCJST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ4
1MT3608SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BLU6
1NTC ON BOARDSolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP5
1OLED SOCKETHDR-TH_4P-P2.54-V-FJ5
1QWIICCONN-SMD_BM04B-SRSS-TBJ18
1READER D0 D1CONN-TH_P5.08_KF128-5.08-2PJ10
1READER LED BEEPCONN-TH_P5.08_KF128-5.08-2PJ11
1READER PWRCONN-TH_P5.08_KF128-5.08-2PJ3
1RELAY COMCONN-TH_P5.08_KF128-5.08-2PJ16
1RELAY NC NOCONN-TH_P5.08_KF128-5.08-2PJ15
1RESETSW-SMD_4P-L5.1-W5.1-P3.70-LS6.5-TL_H1.5SW2
1RS485 12V GNDCONN-TH_P5.08_KF128-5.08-2PJ21
1RS485 A BCONN-TH_P5.08_KF128-5.08-2PJ20
1RS485_DITestPoint_Pad_D1.5mmTP1
1RS485_ROTestPoint_Pad_D1.5mmTP2
1SMAJ15ASMA_L4.3-W2.6-LS5.0-RDD20
1SMAJ36CASMA_L4.3-W2.6-LS5.0-RDD2
1SN74LVC2G17SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BLU4
1SP3485SOIC-8_L5.0-W4.0-P1.27-LS6.0-BLU9

The 188 most common of 197 parts.

More from EdgeCoil/wiegand-bridge

1
  • 4 layers42 × 44 mmWiegand bridge lite, the printed circuit board in 3D

    Wiegand bridge lite

    EdgeCoil/wiegand-bridge

    ESP32-S3 Wiegand reader bridge for Home Assistant: 4-layer board, BOM and ESPHome firmware.

    75 parts1

Similar boards

  • 6 layers150 × 100 mmNV Meter rev b, the printed circuit board in 3D

    NV Meter rev b

    curtisseizert/Nanovoltmeter

    A low noise nanovoltmeter design files and code

    552 parts44
  • 4 layersESP32Sensor, the printed circuit board in 3D

    ESP32Sensor

    LESA-RPI/hfs.main

    Horticulture Fluorescence Sensor Project

    95 parts1
  • 6 layers80 × 50 mmDCPower, the printed circuit board in 3D

    DCPower

    Alex-C-EE/DCPower

    A compact, portable, USB-PD -> Any Voltage CC/CV power supply.

    112 parts1
  • 6 layers450 × 235 mmBaseline, the printed circuit board in 3D

    Baseline

    DeadlySIn777/Controller

    Unfinished CNC controller motherboard: native KiCad sources, rules, DSN and global routing review

    2,723 parts
  • 4 layers119 × 79 mmLuxdmx, the printed circuit board in 3D

    Luxdmx

    tombueng/LuxDMX

    Open-source Art-Net / sACN (E1.31) → DMX512 gateway for ESP32 / ESP32-S3 / Ethernet. Live web UI shows all 512 channels in real time, flags console conflicts, and drives galvanically-isolated DMX.

    97 parts97
  • 2 layers36 × 72 mmHCP Bridge, the printed circuit board in 3D

    HCP Bridge

    JonasE99/HCP-Bridge

    🚧 WIP – not yet manufactured or tested. KiCad PCB (one per door) connecting Hörmann series 4 garage door operators (ProMatic/SupraMatic, BUS/RJ12) to Loxone via ESP32-S3 and Wi-Fi.

    53 parts1
  • 2 layers68.4 × 36.7 mmEmf beacon, the printed circuit board in 3D

    Emf beacon

    PolybiusBiotech/led_beacon

    The PCBA and firmware for the controllable LED Beacons.

    134 parts

Questions

How big is the Wiegand bridge PCB?

It measures 90 × 95 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Wiegand bridge use?

197 parts, built around the ESP32-S3-WROOM-1-N8R2, SN74LVC2G17DBV, SP3485EEN and LMV321. 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 Wiegand bridge KiCad files?

From the EdgeCoil/wiegand-bridge repository on GitHub, at the commit this page was made from: the board is hardware/wiegand-bridge.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Wiegand bridge design in my own project?

Its repository states no licence, so its author keeps all rights: ask EdgeCoil before reusing the design.