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

ESP32-S3 Wiegand reader bridge for Home Assistant: 4-layer board, BOM and ESPHome firmware.
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.
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.
| File | What it is |
|---|---|
netlist.py | Source of truth: every part, its JLCPCB part number and which net each pad joins |
placement.py | Where each part sits (board 42 × 44 mm) |
build_pcb.py | Makes wiegand-bridge-lite.kicad_pcb, unrouted, from the two files above |
route.py | Thermal vias under the module, the USB-C VBUS pad-pair hand route, GND fan-out, Freerouting, ground pours |
padgap.py | Pre-route: pads of different nets closer than 0.25 mm (new for this board) |
verify.py | Every 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.py | Post-route, as the full board; audit.py has no screen/battery sections |
schematic.py, fab.py, finish_net.py, widen.py, plane_connect.py | As the full board, names changed |
wiegand-bridge-lite.kicad_pro | Carries 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).
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 PASSEDSpace 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.
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.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 18 | 10k | R_0603_1608Metric | R4, R5, R11, R12, R15, R18, R20, R35, R44, R45, R46, R47, R50, R60, R65, R74 +2 |
| 14 | 100k | R_0603_1608Metric | R13, R14, R21, R27, R28, R29, R31, R51, R52, R58, R61, R62, R64, R79 |
| 14 | 1k | R_0603_1608Metric | R3, R8, R9, R10, R24, R26, R40, R41, R42, R43, R63, R70, R71, R81 |
| 12 | 100n | C_0603_1608Metric | C3, C12, C16, C22, C23, C24, C34, C36, C37, C38, C39, C40 |
| 9 | 22u | C_0805_2012Metric | C4, C5, C7, C9, C10, C17, C18, C19, C35 |
| 7 | 2N7002 | SOT-23-3_L2.9-W1.3-P1.90-LS2.4-BR | Q1, Q2, Q4, Q7, Q8, Q9, Q10 |
| 4 | 100 | R_0603_1608Metric | R6, R7, R17, R25 |
| 4 | 10n | C_0603_1608Metric | C27, C28, C29, C30 |
| 4 | 10u | C_1206_3216Metric | C2, C31, C32, C33 |
| 4 | M3 | MountingHole_3.2mm_M3 | H1, H2, H3, H4 |
| 4 | SMF36CA | SOD-123FL_L2.7-W1.8-LS3.8-BI | D17, D18, D21, D22 |
| 4 | SS34 | SMA_L4.3-W2.6-LS5.2-RD | D3, D4, D10, D11 |
| 3 | 10u | C_0603_1608Metric | C8, C20, C21 |
| 3 | 200k | R_0603_1608Metric | R19, R30, R80 |
| 3 | 20k | R_0603_1608Metric | R66, R67, R69 |
| 3 | 4x10k | RES-ARRAY-SMD_0603-8P-L3.2-W1.6-BL | RN1, RN2, RN3 |
| 3 | 5.1k | R_0603_1608Metric | R1, R2, R77 |
| 3 | SM712 | SOT-23-3_L3.0-W1.7-P0.95-LS2.9-BR | D15, D16, D19 |
| 2 | 100p | C_0603_1608Metric | C14, C15 |
| 2 | 15k | R_0603_1608Metric | R16, R32 |
| 2 | 390 | R_0603_1608Metric | R72, R73 |
| 2 | 4.7k | R_0603_1608Metric | R36, R37 |
| 2 | AO3401A | SOT-23_L2.9-W1.3-P1.90-LS2.4-BR | Q5, Q11 |
| 2 | BIAS | SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm | JP3, JP4 |
| 2 | MMSZ5231B | SOD-123_L2.8-W1.6-LS3.7-RD | D5, D6 |
| 2 | SS56 | SMA_L4.3-W2.6-LS5.0-RD | D1, D13 |
| 2 | green | LED0805-R-RD | D7, D23 |
| 2 | red | LED0805-RD | D8, D12 |
| 1 | 0.2R | R_1206_3216Metric | R59 |
| 1 | 0.5A | F1812 | F1 |
| 1 | 10k NTC B3950 | R_0603_1608Metric | RT1 |
| 1 | 10u | C_0805_2012Metric | C6 |
| 1 | 120 | R_0603_1608Metric | R68 |
| 1 | 13.2V | SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm | JP1 |
| 1 | 15uH | IND-SMD_L7.0-W6.6_FXL0630 | L1 |
| 1 | 1N4148W | SOD-123F_L2.7-W1.6-LS3.8-RD | D14 |
| 1 | 1u | C_0603_1608Metric | C13 |
| 1 | 2.2uH | IND-SMD_L4.0-W4.0 | L2 |
| 1 | 22u | C_0603_1608Metric | C11 |
| 1 | 2A 60V | F2920 | F2 |
| 1 | 39k | R_0603_1608Metric | R55 |
| 1 | 4.7uH | IND-SMD_L5.0-W5.0 | L3 |
| 1 | 47k | R_0603_1608Metric | R56 |
| 1 | 6-36V IN | CONN-TH_P5.08_KF128-5.08-2P | J2 |
| 1 | 68k | R_0603_1608Metric | R78 |
| 1 | 8.2k | R_0603_1608Metric | R57 |
| 1 | AO3400A | SOT-23-3_L2.9-W1.3-P1.90-LS2.4-BR | Q12 |
| 1 | BOOT | SW-SMD_4P-L5.1-W5.1-P3.70-LS6.5-TL_H1.5 | SW1 |
| 1 | CN3058E | SOIC-8_L4.9-W3.9-P1.27-LS6.0-BL-EP3.3 | U5 |
| 1 | DC IN | DC-IN-TH_DC-005-5.5-2.0 | J14 |
| 1 | DW01A | SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BL | U7 |
| 1 | ESP32-S3-WROOM-1-N8R2 | WIRELM-SMD_ESP32-S3-WROOM-1 | U1 |
| 1 | EXPANSION | PinHeader_2x06_P2.54mm_Vertical | J19 |
| 1 | FS8205A | SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BR | Q6 |
| 1 | GND | TestPoint_Pad_D1.5mm | TP4 |
| 1 | GND IN3 | CONN-TH_P5.08_KF128-5.08-2P | J12 |
| 1 | IN1 IN2 | CONN-TH_P5.08_KF128-5.08-2P | J9 |
| 1 | IN4 GND | CONN-TH_P5.08_KF128-5.08-2P | J13 |
| 1 | IO40 | TestPoint_Pad_D1.5mm | TP3 |
| 1 | LMR16020 | SOIC-8_L4.9-W3.9-P1.27-LS6.0-BL-EP | U2 |
| 1 | LMV321 | SOT-23-5_L3.0-W1.7-P0.95-LS2.8-BR | U10 |
| 1 | LiFePO4 + NTC | JST_XH_B4B-XH-A_1x04_P2.50mm_Vertical | J4 |
| 1 | MT3608 | SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BL | U6 |
| 1 | NTC ON BOARD | SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm | JP5 |
| 1 | OLED SOCKET | HDR-TH_4P-P2.54-V-F | J5 |
| 1 | QWIIC | CONN-SMD_BM04B-SRSS-TB | J18 |
| 1 | READER D0 D1 | CONN-TH_P5.08_KF128-5.08-2P | J10 |
| 1 | READER LED BEEP | CONN-TH_P5.08_KF128-5.08-2P | J11 |
| 1 | READER PWR | CONN-TH_P5.08_KF128-5.08-2P | J3 |
| 1 | RELAY COM | CONN-TH_P5.08_KF128-5.08-2P | J16 |
| 1 | RELAY NC NO | CONN-TH_P5.08_KF128-5.08-2P | J15 |
| 1 | RESET | SW-SMD_4P-L5.1-W5.1-P3.70-LS6.5-TL_H1.5 | SW2 |
| 1 | RS485 12V GND | CONN-TH_P5.08_KF128-5.08-2P | J21 |
| 1 | RS485 A B | CONN-TH_P5.08_KF128-5.08-2P | J20 |
| 1 | RS485_DI | TestPoint_Pad_D1.5mm | TP1 |
| 1 | RS485_RO | TestPoint_Pad_D1.5mm | TP2 |
| 1 | SMAJ15A | SMA_L4.3-W2.6-LS5.0-RD | D20 |
| 1 | SMAJ36CA | SMA_L4.3-W2.6-LS5.0-RD | D2 |
| 1 | SN74LVC2G17 | SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BL | U4 |
| 1 | SP3485 | SOIC-8_L5.0-W4.0-P1.27-LS6.0-BL | U9 |
The 188 most common of 197 parts.

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




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


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.

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.
PolybiusBiotech/led_beacon
The PCBA and firmware for the controllable LED Beacons.
It measures 90 × 95 mm and has 4 copper layers, 1.6 mm thick.
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.
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.
Its repository states no licence, so its author keeps all rights: ask EdgeCoil before reusing the design.