Skip to the content
PCBKitNew board
2 layers100 × 100 mmController, the printed circuit board in 3D

Firmware and PCB files for an ESP32-S3 sim-racing button box with five rotary encoders, capacitive touch on encoder/buttons, two ST7789 displays, MCP23017 button/LED expansion, MPR121 touch sensing, WS2812 status LEDs…

Size
100 × 100 mm
Copper layers
2
Thickness
1.6 mm
Parts
66
Nets
103
Pads
301
Tracks, vias
987, 65
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
6 Jul 2026
Updated
6 Jul 2026

Overview

Controller is an open-source printed circuit board by Hartmannlight, from the Hartmannlight/Buttonbox repository on GitHub. It is a 2-layer board of 100 × 100 mm with 66 parts on 103 nets, routed with 987 tracks and 65 vias.

It is built around the ESP32-S3-DEVKITC-1-N8, DS18B20 and MPR121QR2, with the MCP23017-E/SS and PN2222A among its other parts. Its parts include 21 resistors, 7 capacitors, 6 transistors, 5 ICs and 5 switches. It belongs with the ESP32 boards of this library.

Main components

5

README

README.md

KLX ButtonBox

Firmware and PCB files for an ESP32-S3 sim-racing button box with five rotary encoders, capacitive touch on encoder/buttons, two ST7789 displays, MCP23017 button/LED expansion, MPR121 touch sensing, WS2812 status LEDs, DS18B20 temperature input, and a disabled buzzer diagnostic stub.

Repository layout

text
src/
  app/        Firmware application helpers and diagnostics
  config/     Hardware pinout and device addresses
  domain/     Hardware-independent events and device state
  hal/        Arduino/driver-facing hardware adapters
pcb/
  ButtonBox/  Encoder/display board KiCad project
  Controller/ Controller board KiCad project
scratch/      One-off hardware analysis scripts

Firmware status

The firmware is currently a hardware diagnostic build, not a finished sim-racing HID profile. It boots the ESP32-S3, scans I2C, initializes both displays, reads encoders/buttons/touch, drives diagnostic LEDs, and renders current state on the displays.

Known hardware items still need bench verification:

  • FFC orientation and all 30 continuity mappings.
  • MPR121 address and touch thresholds for the real metal controls.
  • MCP23017 button/LED mapping against the assembled PCB.
  • GPIO0 boot behavior with DS2 backlight.
  • Buzzer circuit. Firmware intentionally keeps it muted until the hardware is verified.

Build

Install PlatformIO, then run:

powershell
platformio run

Upload to the connected ESP32-S3:

powershell
platformio run --target upload

Open the serial monitor:

powershell
platformio device monitor

Serial speed is 115200.

Hardware notes

The authoritative pin constants live in src/config/HardwareConfig.hpp. The longer hardware handover is in KLX_ButtonBox_Firmware_Handover.md; treat it as a verification log and update it when a measurement on the real device contradicts an assumption.

Parts

66
QtyValueFootprintReferences
910kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR8, R13, R14, R15, R16, R17, R18, R20, R21
6100 nFCapacitor_THT:C_Disc_D3.0mm_W2.0mm_P2.50mmC1, C2, C3, C4, C5, C7
61kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1, R3, R4, R5, R6, R7
6PN2222APackage_TO_SOT_THT:TO-92_InlineQ1, Q2, Q3, Q4, Q5, Q6
5SW_MEC_5G_2LED_TOUCHConnector_Wire:SolderWire-0.5sqmm_1x05_P4.6mm_D0.9mm_OD2.1mm_ReliefSW1, SW2, SW3, SW4, SW5
2TestPointTestPoint:TestPoint_Pad_1.0x1.0mmTP1, TP2
11.5kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR9
1150Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR11
1220Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR12
13.3V PWRLED_SMD:LED_Foshan-NTD3528_3.5x2.8mmD2
1330Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR19
14.7kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR2
15V PWRLED_SMD:LED_Foshan-NTD3528_3.5x2.8mmD1
1680Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR10
1A0Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP6
1A1Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP5
1A2Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP4
1ADDR VCC/GNDJumper:SolderJumper-3_P1.3mm_Open_Pad1.0x1.5mm_NumberLabelsJP2
1BuzzerBuzzer_Beeper:Buzzer_TDK_PS1240P02BT_D12.2mm_H6.5mmBZ1
1C_PolarizedCapacitor_THT:CP_Radial_D5.0mm_P2.50mmC6
1Conn_01x30_MountingPinConnector_FFC-FPC:Molex_200528-0300_1x30-1MP_P1.00mm_HorizontalJ4
1DS18B20Package_TO_SOT_THT:TO-92_InlineU2
1ESP32-S3-DevKitCPCM_Espressif:ESP32-S3-DevKitCU1
1I2CTestPoint:TestPoint_2Pads_Pitch2.54mm_Drill0.8mmJ3
1IRQ PullupJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP7
1MCP23017Aliexpress:MCP23017-BreakoutU6
1MPR121QR2Aliexpress:MPR121QR2-BreakoutU3
1PowerConnector_JST:JST_XA_B02B-XASK-1_1x02_P2.50mm_VerticalJ2
1SCL PullupJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP9
1SDA PullupJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP8
1StatusLED_SMD:LED_Foshan-NTD3528_3.5x2.8mmD3
1Use PN222 5VJumper:SolderJumper-3_P1.3mm_Bridged12_RoundedPad1.0x1.5mm_NumberLabelsJP1
1VREF on 3.3VJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP3
1~Connector_JST:JST_XA_B03B-XASK-1_1x03_P2.50mm_VerticalU4
1~Aliexpress:ESP32-JTAGJTAG

The 63 most common of 66 parts.

Questions

How big is the Controller PCB?

It measures 100 × 100 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Controller use?

66 parts, built around the ESP32-S3-DEVKITC-1-N8, DS18B20, MPR121QR2 and MCP23017-E/SS. 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 Controller KiCad files?

From the Hartmannlight/Buttonbox repository on GitHub, at the commit this page was made from: the board is pcb/Controller/Controller.kicad_pcb and its schematic pcb/ButtonBox/ButtonBox.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Controller design in my own project?

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

More from Hartmannlight/Buttonbox

1
  • 2 layers100 × 100 mmButtonBox, the printed circuit board in 3D

    ButtonBox

    Hartmannlight/Buttonbox

    Firmware and PCB files for an ESP32-S3 sim-racing button box with five rotary encoders, capacitive touch on encoder/buttons, two ST7789 displays, MCP23017 button/LED expansion, MPR121 touch sensing, WS2812 status LEDs…

    10 parts

Similar boards

  • 2 layers122.1 × 60 mmOLED LCD, the printed circuit board in 3D

    OLED LCD

    jsjolund/dmx512-controller-board

    Controller board for DMX512 compatible devices, built around the STM32F4 processor

    32 parts26
  • 2 layers149.9 × 72.4 mmRMPBoardV2, the printed circuit board in 3D

    RMPBoardV2

    liebrandapps/RPI-Multi-Purpose-Extension-Board

    Kicad files for a printed circuit board extending the Raspberry Interfaces GPIOs.

    31 parts
  • 2 layers80 × 95 mmPcb robotito, the printed circuit board in 3D

    Pcb robotito

    grupo-avispa/minibot

    An open, low-cost differential-drive autonomous robot built around the ESP32 and micro-ROS, designed as a teaching platform for ROS 2.

    29 parts1
  • 2 layersBlinking led, the printed circuit board in 3D

    Blinking led

    itsSuwy/esp32-rust-lab

    Laboratorio personal de proyectos, ejemplos y diagramas realizados con mi ESP32 cuya base principal es Rust orientado a su versión STD. Abarcando desde lo más simple hasta proyectos ligeros de IoT.

    5 partsMIT
  • 2 layers95 × 75 mmBattery predictor, the printed circuit board in 3D

    Battery predictor

    touhidsiddiqueeraj-bit/Multi-Horizon-Hazard-Models-for-Battery-Failure-Prediction

    This study extends an existing multi-horizon hazard classification framework—originally developed for NASA 18650 cells using Histogram-based Gradient Boosting (HGB)—to three additional datasets (CALCE LCO/CX2, Oxford…

    25 parts1
  • 2 layers100 × 86.5 mmSensactUp as Hs, the printed circuit board in 3D

    SensactUp as Hs

    klaus-liebler/sensact

    Es gibt vier Namespaces für Nachrichten "REQUEST" und "RESPONSE", "EVENT" und "ACKNOWLEDGE". Dies wird mit den beiden LSB des Versions-Namespace-Bytes erklärt (Somit bleiben 64 Versionierungsmöglichkeiten) Alle vier…

    57 parts4Apache-2.0