

Anson's Keyboard PCB
When in custom color configuration mode, the display shows prompts for entering RGB values.
- Size
- 352.5 × 136.4 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 373
- Nets
- 220
- Pads
- 1,628
- Tracks, vias
- 2,799, 483
- Pours
- 3
- Routed
- Yes
- KiCad
- KiCad 8.0 (file 20240108)
- Created
- 6 Oct 2025
- Updated
- 20 Oct 2025
Overview
Anson's Keyboard PCB is an open-source printed circuit board by YeetTheAnson, from the YeetTheAnson/AnsonKeyboard repository on GitHub. It is a 2-layer board of 352.5 × 136.4 mm with 373 parts on 220 nets, routed with 2,799 tracks and 483 vias.
It is built around the ESP32-S3-WROOM-1-N8, AMS1117-3.3 and SK6812MINI-E, with the TS-1187A-B-A-B among its other parts. Its parts include 178 diodes, 95 capacitors, 69 switches, 4 ICs and 2 resistors. It belongs with the keyboards and input boards and the ESP32 boards of this library.
Main components
4ESP32-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 ModulesAMS1117-3.3
SOT-223-40℃~+125℃ 0.003%Vout 1 1.1V@(800mA) 15V 1A 3.3V 5mA 72dB@(120Hz) Fixed Over Current Protection、Short Circuit Protection、Thermal shutdown Positive SOT-223 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSAdvanced Monolithic SystemsVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsSK6812MINI-E
SMD-40℃~+85℃ 0.6mA 1.78mm 120mcd~240mcd 120° 160mcd~320mcd 1kHz 2.8mm 2000V 3.2mm 3.7V~5.5V 460nm~470nm 515nm~525nm 620nm~625nm 800Kbit/s 815mcd~1275mcd Semi-transparent lens SMD RGB LEDs(Built-in IC) ROHSOPSCO OptoelectronicsRGB LEDs(Built-In IC)TS-1187A-B-A-B
SMD-4P,5.1x5.1mm-30℃~+85℃ 1.5mm 1.6N 100,000 cycles 12V 5.1mm 5.1mm 50mA Gold No Round Button SPST Surface Mount,Vertical Without Bracket SMD-4P,5.1x5.1mm Tactile Switches ROHSXKB ConnectionTactile Switches
README
README.mdAnson's Keyboard
This is a generic looking 80% TKL keyboard I made over the span of a month. In total, I've spent about 20-25 hours in total for PCB redesigns, writing the keyboard firmware and case redesigns.
Features
- Individually backlit keys with software addressable RGB
- 0.91" OLED display
- USB and Bluetooth connectivity
LED Control
The keyboard has three LED modes:
- Off Mode: All LEDs are turned off
- RGB Mode: LEDs display a rainbow effect
- Custom Color Mode: All LEDs use a user-defined color
LED Mode Controls
- Toggle LED Mode:
Ctrl + Alt + Pause/Break- Cycles through Off → RGB → Custom Color
- Adjust Brightness Up:
Ctrl + Alt + Shift + Up Arrow - Adjust Brightness Down:
Ctrl + Alt + Shift + Down Arrow
Custom Color Configuration
- Enter Custom Color Mode:
Ctrl + Alt + Page Up - When in custom color mode:
- The OLED will prompt for R, G, and B values sequentially
- Use number keys (0-9) to enter a value between 0-255
- Press
Backspaceto delete the last digit - Press
Enterto confirm and move to the next color component - After setting all three RGB values, the keyboard returns to normal operation with your custom color
Bluetooth Functionality
The keyboard can operate in either USB or Bluetooth mode:
- Check Current Mode: The OLED screen displays either "USB Mode" or "BT Mode"
- Switch to Bluetooth Mode: Hold the Pause/Break key during boot (pin IO36)
- Note: After setup, the keyboard will remain in Bluetooth mode until changed
OLED Display
The OLED display shows:
- "AnsonKeyboard"
- Connection mode (USB or Bluetooth)
- Current WPM (words per minute) typing speed
- Current LED mode
When in custom color configuration mode, the display shows prompts for entering RGB values.
Performance Monitoring
The keyboard automatically calculates your typing speed (WPM) and displays it on the OLED screen. This is calculated based on:
- Number of keypresses
- Time elapsed since last keypress
- Standard conversion (5 characters = 1 word)
Special Key Combinations
| Function | Key Combination |
|---|---|
| Toggle LED Mode | Ctrl + Alt + Pause/Break |
| Enter Custom Color Mode | Ctrl + Alt + Page Up |
| Increase LED Brightness | Ctrl + Alt + Shift + Up Arrow |
| Decrease LED Brightness | Ctrl + Alt + Shift + Down Arrow |
| Enter Bluetooth Mode | Hold Pause/Break during boot |
Design Process
I started with a simple idea which was a flat minimalistic TKL keyboard (inspired by the Apple keyboard). The goal was to keep it clean and modern, and remove unnecessary designs. However, as I thought more about ergonomics, I quickly realized that a completely flat keyboard wouldn't be comfortable at all to use during typing.
My initial PCB design had borders that were too thick, which also made the case borders too thick, it was quite bulky and uglier than what I wanted
I originally planned to use the Orpheus Pico as the microcontroller. However, due to the large footprint (making the case even bulkier) and the lack of wireless connectivity, I scrapped that idea and moved on to a new design. At this point, I also decided to make a triangle wedge to set the keyboard at 6 degrees for a better typing experience.
I wanted an integrated USB C port directly on the PCB, but when I redesigned the case and PCB to fit it, I realized that it would be close to impossible for someone with my skill level to hand solder the USB C port and it would have stuck up at an angle anyway (this stresses the cable)
For the final design, I came up a solution. Instead of mounting the USB C port directly onto the PCB, I would purchase a USB C breakout board instead and connect it via cables to the PCB.
(This is when the routing hell begins as I reroute the entire thing at least 3 times) The first time was my extremely inefficient matrix which was a 8x11 matrix. The traces were extremely messy and I've counted about 1.1k traces and 500 vias in total. (I'm so glad I don't have to see it again). I've then updated it to a 7x14 matrix which made routing much easier. The second time was when I had to move all LEDs down by 2mm since they didn't align with the cutout in the switches. Not even an hour after posting about my rerouting, someone from Slack recommmended that I wire my LEDs from top to bottom instead of side to side as to reduce via usage. This is the current version of the PCB and I'm quite happy with it
Pictures
Schematic
<img src=assets/schematic.png alt="schematic" width="1250"/>
PCB
<img src=assets/pcbpreview.png alt="pcbpreview" width="900"/> <img src=assets/pcb3dtop.png alt="pcb3dtop" width="900"/> <img src=assets/pcb3dbottom.png alt="pcb3dbottom" width="900"/>
Renders
<img src=assets/render1.png alt="render1" width="900"/> <img src=assets/render2.png alt="render2" width="900"/> <img src=assets/render3.png alt="render3" width="900"/> <img src=assets/render4.png alt="render4" width="900"/> <img src=assets/render5.png alt="render5" width="900"/>
Case Stand (CaseStand.step)
<img src=assets/casestand1.png alt="casestand1" width="900"/> <img src=assets/casestand2.png alt="casestand2" width="900"/> <img src=assets/casestand3.png alt="casestand3" width="900"/>
Lower Case (LowerCase.step)
<img src=assets/lowercase1.png alt="lowercase1" width="900"/> <img src=assets/lowercase2.png alt="lowercase2" width="900"/>
Plate (Plate.step)
<img src=assets/plate1.png alt="plate1" width="900"/>
Top Case (TopCase.step)
<img src=assets/topcase1.png alt="topcase1" width="900"/> <img src=assets/topcase2.png alt="topcase2" width="900"/>
Bill Of Material
Electronics (LCSC)
Passive Components
| QTY | Name | Part Number | LCSC Part Number | Price |
|---|---|---|---|---|
| 100x | 4.7kΩ Resistor | 1206W4F4701T5E | C17936 | $0.32 |
| 100x | 5.1kΩ Resistor | 1206W4F5101T5E | C26033 | $0.32 |
| 20x | Tact Switch | TS-1187A-B-A-B | C318884 | $0.38 |
| 5x | 3.3v Regulator | AMS1117-3.3 | C6186 | $0.84 |
| 150x | 100nF Capacitor | CC1206KRX7R9BB104 | C82601 | $1.61 |
| 20x | 10uF Capacitor | CL31B106KAHNNNE | C14860 | $0.54 |
| 200x | Diode | 1N4148WL | C33962554 | $1.00 |
Active Components
| QTY | Name | Part Number | LCSC Part Number | Price |
|---|---|---|---|---|
| 150x | RGB LED | SK6812MINI-E | C5149201 | $8.70 |
| 1x | ESP-32-S3 | ESP32-S3-WROOM-1-N16R2 | C2913205 | $5.04 |
| 10x | Level Shifter | SN74LV1T34DBVR | C100024 | $0.59 |
LCSC Shipping: Singapore Post – $5.72
Electronics (Local Vendor. I will be paying for these)
| QTY | Name | Local Price | Conversion Upcharge | Price |
|---|---|---|---|---|
| 5x | USB C Breakout Board | RM8.13 | +$0.15 | $2.10 |
| 1x | 0.91" OLED | RM10.62 | +$0.15 | $2.65 |
| 1x | SPX Express Shipping | RM5.20 | +$0.15 | $1.40 |
Production
| QTY | Name | File Name | Production Method | Price |
|---|---|---|---|---|
| 1x | Top Case | TopCase.step | FDM 3D Print | - |
| 1x | Plate | Plate.step | FDM 3D Print | - |
| 1x | Lower Case | LowerCase.step | FDM 3D Print | - |
| 1x | Case Stand | CaseStand.step | FDM 3D Print | - |
| 5x | PCB | gerbers.zip | JLCPCB | $22.20 |
| 1x | PCB Shipping | - | E-Post | $9.76 |
Fasteners
| QTY | Name | Local Price | Conversion Upcharge | Price |
|---|---|---|---|---|
| 27x | M2 x 3.5 x 4 Heat Set Insert | RM9.45 | +$0.15 | $2.39 |
| 12x | M2 x 3.5 x 2 Heat Set Insert | RM4.20 | +$0.15 | $1.14 |
| 12x | M2 x 5mm Hex Screw | RM4.56 | +$0.15 | $1.23 |
| 12x | M2 x 3mm Hex Screw | RM4.08 | +$0.15 | $1.12 |
| 15x | M2 x 12mm Hex Screw | RM6.90 | +$0.15 | $1.78 |
| 1x | SPX Express Shipping | RM10.60 | +$0.15 | $2.66 |
Mechanical
| QTY | Name | Local Price | Conversion Upcharge | Price |
|---|---|---|---|---|
| 1x | XDA Keycap Set | RM91.20 | +$2.50 | $24.14 |
| 1x | TX Almost Perfect Stabilizers | RM74.80 | +$2.50 | $20.25 |
| 91x | Gateron Smoothie Switches | RM136.50 | +$4.00 | $35.42 |
| 1x | SPX Express Shipping | RM17.00 | +$0.40 | $4.31 |
Total Costs
- LCSC Total: $25.06
- Electronics (Local) Total: $6.15
- JLCPCB Total: $31.96
- Fasteners Total: $10.32
- Mechanical Total: $84.12
Grand Total: $157.61
Note: Conversion upcharge is just a buffer for conversion rate fluctuations. Any unused funds will be returned.
Parts
373| Qty | Value | Footprint | References |
|---|---|---|---|
| 95 | 0.1uF | Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | C1, C2, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23 +79 |
| 91 | SK6812MINI | Library:SK6812MINI-E | LED1, LED2, LED10, LED11, LED12, LED13, LED14, LED15, LED16, LED17, LED18, LED19, LED20, LED21, LED22, LED23 +75 |
| 87 | D | Diode_SMD:D_SOD-123F | D1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +71 |
| 3 | 10uF | Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | CAP2, CAP4, CAP7 |
| 2 | 4.7k | Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder | R2, R3 |
| 2 | TS-1187A-B-A-B | RPI:SW_TS-1187A-B-A-B | TACT1, TACT2 |
| 1 | 0 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW25 |
| 1 | 1 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW16 |
| 1 | 2 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW17 |
| 1 | 3 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW18 |
| 1 | 4 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW19 |
| 1 | 5 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW20 |
| 1 | 6 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW21 |
| 1 | 7 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW22 |
| 1 | 8 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW23 |
| 1 | 9 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW24 |
| 1 | A | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW44 |
| 1 | AMS1117-3.3 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U1 |
| 1 | B | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW62 |
| 1 | BACKSLASH | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.50u | SW42 |
| 1 | BACKSPACE | hotSwap:SW_Hotswap_Kailh_MX_Plated_2.00u | SW28 |
| 1 | BREAK | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW84 |
| 1 | C | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW60 |
| 1 | CAPS | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.75u | SW43 |
| 1 | COMMA | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW65 |
| 1 | CUSTOM_OLED | Library:CUSTOM_OLED | U5 |
| 1 | CUSTOM_USBC | Library:CUSTOM_USBC | U4 |
| 1 | D | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW46 |
| 1 | DELETE | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW56 |
| 1 | DOWN | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW80 |
| 1 | E | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW32 |
| 1 | END | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW70 |
| 1 | ENTER | hotSwap:SW_Hotswap_Kailh_MX_Plated_2.25u | SW55 |
| 1 | EQUAL | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW27 |
| 1 | ESC | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW1 |
| 1 | ESP32-S3-WROOM-1 | Library:ESP32-S3-WROOM-1 | U3 |
| 1 | F | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW47 |
| 1 | F1 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW2 |
| 1 | F10 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW11 |
| 1 | F11 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW12 |
| 1 | F12 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW13 |
| 1 | F2 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW3 |
| 1 | F3 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW4 |
| 1 | F4 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW5 |
| 1 | F5 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW6 |
| 1 | F6 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW7 |
| 1 | F7 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW8 |
| 1 | F8 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW9 |
| 1 | F9 | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW10 |
| 1 | G | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW48 |
| 1 | H | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW49 |
| 1 | HOME | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW86 |
| 1 | HYPHEN | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW26 |
| 1 | I | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW37 |
| 1 | INSERT | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW85 |
| 1 | J | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW50 |
| 1 | K | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW51 |
| 1 | L | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW52 |
| 1 | LALT | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.25u | SW73 |
| 1 | LCTRL | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.25u | SW71 |
| 1 | LEFT | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW79 |
| 1 | LEFTBRACK | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW40 |
| 1 | LOGO | LOGO | G*** |
| 1 | LSHIFT | hotSwap:SW_Hotswap_Kailh_MX_Plated_2.25u | SW57 |
| 1 | LWIN | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.25u | SW72 |
| 1 | M | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW64 |
| 1 | MENU | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.25u | SW77 |
| 1 | N | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW63 |
| 1 | O | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW38 |
| 1 | P | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW39 |
| 1 | PERIOD | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW66 |
| 1 | PGDN | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW82 |
| 1 | PGUP | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW87 |
| 1 | PRNT | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW14 |
| 1 | Q | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW30 |
| 1 | QUOTE | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW54 |
| 1 | R | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW33 |
| 1 | RALT | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.25u | SW75 |
| 1 | RCTRL | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.25u | SW78 |
| 1 | RIGHT | hotSwap:SW_Hotswap_Kailh_MX_Plated_1.00u | SW81 |
The 354 most common of 373 parts.
Questions
How big is the Anson's Keyboard PCB PCB?
It measures 352.5 × 136.4 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Anson's Keyboard PCB use?
373 parts, built around the ESP32-S3-WROOM-1-N8, AMS1117-3.3, SK6812MINI-E and TS-1187A-B-A-B. 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 Anson's Keyboard PCB KiCad files?
From the YeetTheAnson/AnsonKeyboard repository on GitHub, at the commit this page was made from: the board is PCB/Anson's Keyboard PCB.kicad_pcb and its schematic PCB/Anson's Keyboard PCB.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Anson's Keyboard PCB design in my own project?
Its repository states no licence, so its author keeps all rights: ask YeetTheAnson before reusing the design.
Similar boards
- 4 layers58.5 × 85.5 mm

- 2 layers76.9 × 55 mm

AurisenseV2
catrahedron/AurisenseV2
A simple shift register based headpat haptics driver board for VRChat with 40 motor driver outputs and two SPI/UART extension ports
211 parts1CERN-OHL-W-2.0 - 2 layers88 × 130 mm

Windowmaster controller v2
Simplycissmus/windowmaster-s3-controller
Open hardware and ESP32-S3 firmware for a local 24 V window actuator controller with MQTT and Home Assistant integration.
68 parts1 - 2 layers92.4 × 40.6 mm

PrintBridge
Kingdragoncat/PrintBridge
Im so done with needing to unplug all my cords and plug it all in ontip of a file of boxes to print one god damn thing so i made my wired printer wireless
22 parts - 2 layers78 × 58 mm

- 2 layers65 × 55 mm

Esp32-s3
duanestorey/hifi-amp
A high-fidelity four-channel amplifier with active-crossovers and room correction
37 parts1 - 2 layers115.8 × 48.3 mm

- 2 layers120 × 102.5 mm

Dsug cctv BOARD
LucasLHenry/spelltwister
This is the third version of the code for the Spelltwister module with CCTV. This version uses the Arduino platform and the RP2040, a chip developed by Raspberry Pi for their RPi Pico board.
251 partsMIT