Button Grid PCB

ESP32-S3 controller for an 8×8 diode button matrix with 64 individually switched 12 V LEDs (8× 74HC595 + 8× ULN2803A). Two-layer board, 208 × 110 mm, built for JLCPCB.

All checks pass commit b70cc52 · built 2026-10-14 21:41 UTC

Board

PCB top view
front copper
Top copper + silkscreen
back copper
Bottom copper (mirrored)

How it works

Design files

Interactive viewer (pan/zoom, click parts). Use the panel to switch between the root schematic, the LED-bank sheet and the PCB. Open the files themselves in KiCad 9.

Tests

Run automatically on every push by GitHub Actions (hardware/scripts/check.sh).

PASS

Electrical rules check (ERC)

KiCad checks the schematic for unconnected pins, undriven power inputs, conflicting outputs, dangling labels and similar mistakes.

Full report
ERC report (2026-10-14T21:41:10+0000, Encoding UTF8)
Report includes: Errors, Warnings, Exclusions

***** Sheet /

***** Sheet /Bank 1/

***** Sheet /Bank 2/

***** Sheet /Bank 3/

***** Sheet /Bank 4/

***** Sheet /Bank 5/

***** Sheet /Bank 6/

***** Sheet /Bank 7/

***** Sheet /Bank 8/

 ** ERC messages: 0  Errors 0  Warnings 0
PASS

Connectivity assertions

Our own script (hardware/scripts/check_netlist.py) reads the netlist and checks the intended circuit pin by pin: all 64 LED terminals go through a ULN2803 output to the right 74HC595 output; the shift registers form one chain from ESP32 IO38 to IO42; clock/latch/enable reach every chip; every matrix line has its series resistor and pull-up; USB CC resistors; buck converter feedback gives 3.3 V; no strapping pins used; every assembled part has an LCSC number.

Full report
buck output voltage: 3.305 V
108 components, 204 nets, 64 LED channels checked
netlist OK
PASS

Design rules check (DRC) + schematic parity

KiCad checks the PCB against JLCPCB-safe manufacturing limits (clearances, track widths, drill sizes, board edge), that every net is fully routed, and that the PCB matches the schematic exactly.

0 violations · 0 unrouted connections · 0 schematic/PCB mismatches (errors and warnings)

Full report
** Drc report for button-grid.kicad_pcb **
** Created on 2026-10-14T21:41:13+0000 **
** Report includes: Errors, Warnings, Exclusions **

** Found 1 DRC violations **
[silk_over_copper]: Silkscreen clipped by solder mask
    Local override; warning
    @(223.3200 mm, 70.0000 mm): Reference field of C2

** Found 0 unconnected pads **

** Found 0 Footprint errors **

** End of Report **

Order at JLCPCB

  1. Upload the gerber zip. Defaults are fine: 2 layers, 1.6 mm, HASL. Quantity 5.
  2. Enable PCB Assembly, "Economic", top side, assemble 2 boards.
  3. Upload the BOM and CPL. Check that every line matched a part and is in stock.
  4. On the placement preview, check the rotation of the chips (pin-1 dot) and the USB-C connector, and fix it with the rotate button if one is turned.
  5. Order the through-hole parts from the hand-solder list (LCSC/Amazon/eBay) and solder them yourself: 3.5 mm pitch screw terminals (8× 10-pole, 2× 8-pole), 5.5×2.1 mm barrel jack, 2× 6 mm push buttons, 1×3 pin header.

Parts assembled by JLCPCB

CommentDesignatorFootprintLCSC Part #
10uF 25VC1,C2,C3,C9C_0805_2012MetricC15850
100nFC4,C5,C10,C11,C12,C13,C14,C15,C16,C17,C18,C21,C22,C23,C24,C25,C26,C27,C28C_0603_1608MetricC14663
22uFC6,C7C_0805_2012MetricC45783
1uFC8C_0603_1608MetricC15849
SS54D1D_SMAC22452
SS34D2,D3D_SMAC8678
statusD4LED_0603_1608MetricC2286
USB-CJ2USB_C_Receptacle_HRO_TYPE-C-31-M-12C165948
10uHL1L_Sunlord_SWPA4030SC38117
100kR1R_0603_1608MetricC25803
22kR2,R30,R31,R32,R33,R34,R35,R36,R37,R40,R41,R42,R43,R44,R45,R46,R47R_0603_1608MetricC31850
10kR3,R4,R5R_0603_1608MetricC25804
1kR6R_0603_1608MetricC21190
5.1kR7,R8R_0603_1608MetricC23186
100R10,R11,R12,R13,R14,R15,R16,R17,R20,R21,R22,R23,R24,R25,R26,R27R_0603_1608MetricC22775
ESP32-S3-WROOM-1-N8U1ESP32-S3-WROOM-1C2913198
TPS54202HU2TSOT-23-6C527684
74HC595U11,U12,U13,U14,U15,U16,U17,U18SOIC-16_3.9x9.9mm_P1.27mmC5947
ULN2803AU21,U22,U23,U24,U25,U26,U27,U28SOIC-18W_7.5x11.6mm_P1.27mmC9683

Parts you solder yourself

QtyValueDesignatorsFootprintLCSC (optional)
112V DCJ1BarrelJack_HorizontalC381116
1ROWSJ3TerminalBlock_Phoenix_PT-1,5-8-3.5-H_1x08_P3.50mm_Horizontal
1COLSJ4TerminalBlock_Phoenix_PT-1,5-8-3.5-H_1x08_P3.50mm_Horizontal
1UARTJ5PinHeader_1x03_P2.54mm_Vertical
8LEDsJ11,J12,J13,J14,J15,J16,J17,J18TerminalBlock_Phoenix_PT-1,5-10-3.5-H_1x10_P3.50mm_Horizontal
1RESETSW1SW_PUSH_6mm
1BOOTSW2SW_PUSH_6mm