

Keyboard 80pct
80% mechanical keyboard PCB: ESP32-S3, Kailh Choc V2, per-key SK6812 RGB, OLED, RTC, USB hub
- Size
- 349 × 159 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 297
- Nets
- 226
- Pads
- 872
- Tracks, vias
- 178, 0
- Pours
- 3
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20241229)
- Created
- 18 Jun 2026
- Updated
- 18 Jun 2026
Overview
Keyboard 80pct is an open-source printed circuit board by PetrouilFan, from the PetrouilFan/ergon80 repository on GitHub. It is a 2-layer board of 349 × 159 mm with 297 parts on 226 nets, routed with 178 tracks and 0 vias.
It is built around the ESP32-S3-WROOM-1-N8, USB2512B/M2 and SK6812. Its parts include 166 diodes, 83 switches, 18 capacitors, 13 resistors and 2 ICs. It belongs with the keyboards and input and lEDs and displays boards and the ESP32 boards of this library.
Main components
3ESP32-S3-WROOM-1-N8
SMD,25.5x18mm-40℃~+85℃ -98.2dBm 2.4GHz 20.5dBm 355mA 3V~3.6V 95mA Bluetooth5.0 ESP32-S3 Chip On-board PCB Antenna UART、SPI、I2C、I2S、USB SMD,25.5x18mm WiFi Modules ROHSEspressif SystemsWiFi ModulesUSB2512B/M2
UQFN-36-EP(6x6)0℃~+85℃ 2 3.3V Hub I2C、SMBus USB 2.0 UQFN-36-EP(6x6) USB HUB Controllers ROHSMicrochip TechnologyUSB HUB ControllersSK6812
SMD-4P,5.4x5mm-40℃~+85℃ 0.6mA 1.6mm 120° 160mcd~320mcd 1kHz 2000V 280mcd~515mcd 3.7V~5.5V 460nm~470nm 520nm~530nm 620nm~625nm 800Kbit/s 815mcd~1275mcd Built-in power-on reset circuit Semi-transparent lens SMD-4P,5.4x5mm RGB LEDs(Built-in IC) ROHSOPSCO OptoelectronicsRGB LEDs(Built-In IC)
README
README.mdErgon80
An 80% mechanical keyboard PCB designed around the ESP32-S3, featuring low-profile Choc V2 switches, per-key RGB, an OLED display, and a USB hub.
Features
- MCU: ESP32-S3-WROOM-1 (dual-core, Wi-Fi, Bluetooth)
- USB Hub: USB2512B with 3x USB-C ports
- Switches: 80x Kailh Choc V2 low-profile (5.5mm travel)
- Lighting: 80x SK6812 Mini-E addressable RGB LEDs (reverse-mount on B.Cu)
- Display: SSD1306 0.91" OLED (128x32, I2C)
- RTC: DS3231SN precision real-time clock (I2C)
- Encoder: EC11E rotary encoder with push switch
- Mounting: 8x M2 mounting holes
Project Structure
ergon80/
├── generate_schematic.py # Generates KiCad 10 schematic
├── generate_pcb.py # Generates KiCad 10 PCB layout
├── keyboard-layout.json # KLE layout definition (80% TKL)
├── keyboard_80pct.kicad_sch # Generated schematic
├── keyboard_80pct.kicad_pcb # Generated PCB layout
├── keyboard_80pct.kicad_pro # KiCad project file
├── keyboard_80pct_BOM.csv # Bill of materials with MPNs
├── fp-lib-table # Footprint library table
├── keyboard_80pct.pretty/ # Custom footprints
│ ├── SW_Kailh_Choc_V2.kicad_mod
│ └── Module_DS3231.kicad_mod
└── jlcpcb_output/ # JLCPCB fabrication files (Gerbers, BOM, PnP)Prerequisites
- KiCad 10 (for opening/editing the project)
- Python 3.13+ (for running the generators)
Usage
Generating the schematic and PCB
python3 generate_schematic.py
python3 generate_pcb.pyOpening in KiCad
Open keyboard_80pct.kicad_pro in KiCad 10 to view and edit the schematic or PCB layout.
Ordering PCBs
Pre-exported JLCPCB fabrication files are in jlcpcb_output/:
- Upload the Gerber files (
*.gbr+*.drl) to JLCPCB - Use
keyboard_80pct_jlcpcb_bom.csvfor the BOM - Use
keyboard_80pct_pos.csvfor pick-and-place
Bill of Materials
| Component | Qty | MPN | Package |
|---|---|---|---|
| ESP32-S3-WROOM-1 | 1 | ESP32-S3-WROOM-1 | Module |
| USB-C Receptacle | 3 | USB4125-GF-A | USB-C |
| USB2512B-I/ML | 1 | USB2512B-I/ML | QFN-32 |
| SSD1306 OLED | 1 | ER-OLEDM0.91-1 | Module |
| DS3231SN RTC | 1 | DS3231SN | Module |
| EC11E Rotary Encoder | 1 | EC11E | THT |
| Kailh Choc V2 | 80 | PG1353 | THT |
| 1N4148W Diode | 80 | 1N4148WT | SOD-323 |
| SK6812 Mini-E | 80 | SK6812MINI-E | LED_SMD |
| 5.1k Resistor | 2 | RC0603FR-075K1L | 0603 |
| 100R Resistor | 1 | RC0603FR-07100RL | 0603 |
| 10k Resistor | 6 | RC0603FR-0710KL | 0603 |
| 1000uF Cap | 1 | CL10A106MQ8NRNC | 1210 |
| 100uF Cap | 3 | CL21A106KBCNNNC | 0805 |
| 10uF Cap | 4 | CL10A104KQ8NNNC | 0805 |
| 100nF Cap | 4 | CL10A104KO8NNNC | 0603 |
| 5-pin Debug Header | 1 | 1x05 2.54mm | THT |
| M2 Mounting Hole | 8 | M2_Pad | Mechanical |
License
CC BY-NC-SA 4.0 - This project is based on klepcbgen by Jeroen Bouwens.
Parts
297| Qty | Value | Footprint | References |
|---|---|---|---|
| 83 | 1N4148 | Diode:D_SOD-323 | D1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +67 |
| 83 | Choc V2 | Switch:SW_Kailh_Choc_V2 | SW1, SW2, SW10, SW11, SW12, SW13, SW14, SW15, SW16, SW17, SW18, SW19, SW20, SW21, SW22, SW23 +67 |
| 83 | SK6812 | LED:LED_SK6812MINI-E | LED1, LED2, LED10, LED11, LED12, LED13, LED14, LED15, LED16, LED17, LED18, LED19, LED20, LED21, LED22, LED23 +67 |
| 8 | M2 | MountingHole | MH1, MH2, MH3, MH4, MH5, MH6, MH7, MH8 |
| 6 | 10k | R_0603 | R9, R10, R11, R12, R13, R14 |
| 5 | 100nF | C_0402 | C20, C21, C22, C23, C24 |
| 4 | 1000uF | C_1210 | C1, C2, C3, C4 |
| 4 | 100nF | C_0805 | C5, C6, C7, C8 |
| 2 | 22R | R_0402 | R17, R18 |
| 2 | 22pF | C_0402 | C18, C19 |
| 2 | 5.1k | R_0603 | R5, R6 |
| 1 | 100R | R_0603 | R7 |
| 1 | 100nF | C_0603 | C12 |
| 1 | 10k | R_0402 | R16 |
| 1 | 10uF | C_0805 | C13 |
| 1 | 12k | R_0402 | R15 |
| 1 | 24MHz | Crystal:3215 | Y1 |
| 1 | 4.7uF | C_0603 | C25 |
| 1 | ESP32-S3-WROOM-1 | ESP32:ESP32-S3-WROOM-1 | U1 |
| 1 | ESP_DEBUG | PinHeader_1x05 | HDR1 |
| 1 | Encoder | RotaryEncoder | ENC1 |
| 1 | SSD1306 | OLED | OLED1 |
| 1 | USB-C 1 | USB_C:USB_C_6P | USB1 |
| 1 | USB-C 2 | USB_C:USB_C_6P | USB2 |
| 1 | USB-C 3 | USB_C:USB_C_6P | USB3 |
| 1 | USB2512B | USB2512B:QFN-36 | U2 |
Similar boards
- 4 layers58 × 18 mm

- 4 layers50.5 × 29.5 mm

Colobus hardware
tihmstar/colobus_hardware
RP2040 based iPhone (lightning) UART cable, that actually works (hardware)
57 parts39CERN-OHL-S-2.0 - 6 layers85 × 85 mm

Controller Board
MichalVarsanyi/VoxLink
VoxLink is a high-speed solution that allows interfacing of up to 100 sensors using a single high-speed host device.
298 parts1MIT - 4 layers49.2 × 28 mm

Ais usbc
xenbedded/pixel-c-support
Support hardware and software for running custom code on the Google Pixel C.
61 parts - 2 layers299 × 82.5 mm

PixelWave
hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!
663 parts915 - 2 layers168.6 × 70 mm

Bailabox main board v2
dr-harvey/BailaBox
BailaBox - RFID enabled, ESP32-based music toy for kids that works with Home Assistant and network speakers.
87 parts29 - 2 layers62.1 × 60.6 mm

Smart home software
azaslavskis/smart-home-software
Software for smart home project (e.g backup)
40 parts1MIT - 2 layers80.4 × 120 mm

Next Gen MacroPad
DevX-Dragon/Next-Gen-MacroPad
This is a integrated macropad with all an programmable SoC
85 parts1
Questions
How big is the Keyboard 80pct PCB?
It measures 349 × 159 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Keyboard 80pct use?
297 parts, built around the ESP32-S3-WROOM-1-N8, USB2512B/M2 and SK6812. 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 Keyboard 80pct KiCad files?
From the PetrouilFan/ergon80 repository on GitHub, at the commit this page was made from: the board is keyboard_80pct.kicad_pcb and its schematic keyboard_80pct.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Keyboard 80pct design in my own project?
Its repository states no licence, so its author keeps all rights: ask PetrouilFan before reusing the design.