Skip to the content
PCBKitNew board
2 layers41.8 × 25.3 mmUsb button controller, the printed circuit board in 3D

A minimal USB HID keyboard board that reads two externally wired buttons and sends keystrokes to a host computer. No drivers required — the host enumerates it as a standard keyboard.

Size
41.8 × 25.3 mm
Copper layers
2
Thickness
1.6 mm
Parts
20
Nets
26
Pads
81
Tracks, vias
187, 21
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
25 Sep 2026
Updated
25 Sep 2026

Overview

Usb button controller is an open-source printed circuit board by recepbugra24, from the recepbugra24/usb-button-controller repository on GitHub. It is a 2-layer board of 41.8 × 25.3 mm with 20 parts on 26 nets, routed with 187 tracks and 21 vias.

It is built around the CH552G, KF128L-5.08-3P and USBLC6-2SC6. Its parts include 8 resistors, 5 capacitors, 3 diodes, 2 ICs and 1 switch. It belongs with the 8051 (CH55x, STC, AT89) boards of this library.

Main components

3

README

README.md

USB Button Controller

A minimal USB HID keyboard board that reads two externally wired buttons and sends keystrokes to a host computer. No drivers required — the host enumerates it as a standard keyboard.

Designed around the WCH CH552G, an 8-bit MCU with an integrated USB device controller, on-chip 24 MHz oscillator and on-chip 5 V to 3.3 V regulator. This removes the crystal, load capacitors, reset network and programming header that a comparable AVR design would need, and cuts the controller cost from roughly $4.70 to $0.31 per unit.

Isometric 3D view of the board

An interactive version is in docs/3d-viewer.html (open it in a browser).

Specifications

MCUWCH CH552G (SOP-16)
InterfaceUSB 2.0 Full Speed, USB-C connector
Inputs2 buttons, wired off-board via screw terminal
PowerBus powered, ~20 mA
Board41.8 × 25.25 mm, 2 layers, 1.6 mm FR-4
AssemblySingle sided (top), SMD

Design notes

USB. Both differential pairs of the USB-C receptacle are tied together so the cable works in either orientation. CC1 and CC2 each carry a 5.1 kΩ pulldown to advertise the board as a sink; without them the host supplies no power. A USBLC6-2SC6 clamps ESD on D+/D- as close to the connector as layout allows.

Button inputs. Each channel has a 4.7 kΩ pull-up so the input never floats, a 1 kΩ series resistor and a 100 nF capacitor forming a low-pass filter with a 0.1 ms time constant, and a second USBLC6-2SC6 protecting against discharge carried in on the button wiring. The filter suppresses contact bounce in hardware; firmware adds a short debounce window on top.

Programming. The CH552G ships with a USB bootloader in ROM. Holding SW1 while plugging in pulls D+ to V33 through a 10 kΩ resistor, which puts the chip into bootloader mode. No external programmer is needed.

Ground. Copper pours on both layers, stitched with vias. The pour under the USB pair is kept unbroken to hold the differential impedance steady.

Repository layout

text
usb-button-controller.kicad_sch     schematic
usb-button-controller.kicad_pcb     board layout
usb-button-controller.kicad_pro     project file
docs/                   isometric render and interactive 3D viewer
gerber/                 fabrication output
  *.gtl *.gbl           copper layers
  *.gts *.gbs           solder mask
  *.gto *.gbo           silkscreen
  *.gm1                 board outline
  *.drl                 drill file
  BOM_jlcpcb.csv        bill of materials with LCSC part numbers
  usb-button-controller-all-pos.csv component placement

Manufacturing

Built for JLCPCB with assembly. Upload the gerber archive, then the BOM and placement files from gerber/.

Settings: 2 layers, 1.6 mm, HASL, top-side assembly. Enable Confirm Parts Placement — KiCad and JLCPCB do not always agree on the zero-rotation reference for SOT-23 and SOP packages, and the preview is where a misoriented part gets caught.

All passives, the LED and the tactile switch are JLCPCB Basic parts. The CH552G, USB-C receptacle, USBLC6-2SC6 and screw terminal are Extended parts and carry a per-part setup fee.

Firmware

Built with ch55xduino in the Arduino IDE. Add this board manager URL:

text
https://raw.githubusercontent.com/DeqingSun/ch55xduino/ch55xduino/package_ch55xduino_mcs51_index.json

Install CH55x Boards, select CH552 Board, and pick a USB setting that reserves RAM for HID. Pin mapping:

FunctionPortArduino pin
Button 1P3.333
Button 2P3.434
Status LEDP1.717

A blank chip enters the bootloader on its own, so the first upload needs no button press. Later uploads are triggered automatically unless the running firmware has locked up the USB stack, in which case hold SW1 and replug.

Verification

  • ERC clean
  • DRC clean, zero unconnected items
  • Schematic parity between board and schematic confirmed
  • Netlist reviewed pin by pin against the CH552G datasheet

Not yet verified in hardware — no board has been built from these files.

License

Not yet chosen. Add a LICENSE file before sharing this publicly.

Parts

20
QtyValueFootprintReferences
3100nFCapacitor_SMD:C_0603_1608MetricC1, C2, C4
31kResistor_SMD:R_0603_1608MetricR5, R7, R8
24.7kResistor_SMD:R_0603_1608MetricR4, R6
25.1kResistor_SMD:R_0603_1608MetricR1, R2
2USBLC6-2SC6easyeda2kicad:SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BLD1, D2
1100nFCapacitor_SMD:C_0805_2012MetricC5
110kResistor_SMD:R_0603_1608MetricR3
110uFCapacitor_SMD:C_0603_1608MetricC3
1CH552Geasyeda2kicad:SOP-16_L10.0-W3.9-P1.27-LS6.0-BLU1
1KF128L-5.08-3Peasyeda2kicad:CONN-TH_3P-P5.08_KF128L-5.08-3PU2
1LEDLED_SMD:LED_0603_1608MetricD3
1SW_PushButton_Switch_SMD:SW_SPST_TL3342SW1
1TYPE-C 16PIN 2MDeasyeda2kicad:USB-C-SMD_TYPE-C-16PIN-2MD-073USB1

Questions

How big is the Usb button controller PCB?

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

What parts does the Usb button controller use?

20 parts, built around the CH552G, KF128L-5.08-3P and USBLC6-2SC6. 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 Usb button controller KiCad files?

From the recepbugra24/usb-button-controller repository on GitHub, at the commit this page was made from: the board is usb-button-controller.kicad_pcb and its schematic usb-button-controller.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Usb button controller design in my own project?

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

Similar boards

  • 2 layers38.6 × 15.7 mmLIPS V3.2, the printed circuit board in 3D

    LIPS V3.2

    milar111/L.I.P.S.

    OpenSource Affordable SipAndPuff device: Linear Interface for Paralysis Support

    21 parts13
  • 2 layers25 × 25 mmSl25, the printed circuit board in 3D

    Sl25

    TECHOTAKU182/Pilot-Light

    本版与 ../../enclosure/sl25trafficrevb/ 外壳配套,取代 Rev A 的偏上小灯珠设计。PCB 正面只有一颗位于几何中心的 WS2812B-V5,其他电子元件和 USB-C 均在背面。 板框仍为 25×25 mm,双层、1.6 mm 厚,两个 M2 孔的位置保持原接口。

    24 parts1
  • 2 layers30.4 × 12.7 mmDaplink CH552P, the printed circuit board in 3D

    Daplink CH552P

    abgelehnt/Tiny-DAPLink

    小巧的使用CH552实现的DAPLink

    21 parts41GPL-3.0
  • 2 layers40.6 × 27.9 mmCH552, the printed circuit board in 3D

    CH552

    nicola-strappazzon/CH552

    Basic projects with CH552G

    23 parts37LGPL-2.1
  • 2 layers40 × 40 mmBottom, the printed circuit board in 3D

    Bottom

    Noteolvides/CubeTouch

    CubeTouch Docs

    35 parts14MIT
  • 2 layers28.4 × 15.9 mmCH552-devkit, the printed circuit board in 3D

    CH552-devkit

    hexeguitar/CH552-devkit

    CH552 dev board with HW reboot into bootloader

    25 parts6MIT
  • 2 layers51 × 44 mmCh552g devbrd, the printed circuit board in 3D

    Ch552g devbrd

    eddyem/ch55x

    Some usefull things for working with ch55x chips

    19 parts5GPL-3.0
  • 2 layers105.9 × 83.1 mmBSidesDFW 2019, the printed circuit board in 3D

    BSidesDFW 2019

    gowenrw/BSidesDFW_2019_Badge

    This is where all the files for the BSidesDFW 2019 Badge will be stored. This includes code and art and cab and fab files. All the things.

    30 parts5MIT