

Controller
Custom controller hardware for ALT.CTRL.GameCraft 2023
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 30
- Nets
- 37
- Pads
- 169
- Tracks, vias
- 12, 0
- Routed
- Yes
- KiCad
- KiCad 7 (file 20221018)
- Created
- 21 Sep 2023
- Updated
- 28 Jul 2026
Overview
Controller is an open-source printed circuit board by micktwomey, from the micktwomey/alt-controller-jam repository on GitHub, published under the MIT licence. It is a 2-layer board with 30 parts on 37 nets, routed with 12 tracks and 0 vias.
Its parts include 9 connectors, 8 switches and 1 IC. It belongs with the RP2040 boards of this library.
README
README.mdCTRL.ALT GameCraft 2023
Repo holding the hardware and code behind the controller components used in https://www.gamecraft.it/events/altctrljam-2023/
Hardware

A Raspberry Pi Pico running CircuitPython acts as a HID keyboard device.
Two (or more) button pads are connected to the Pico using jumper cables. Each button pad has 4 buttons.
You can position these anywhere you want on an alternative controller. Embed them in cardboard, stick onto things, etc.
KiCad is used to design the boards. You can even see me following the tutorial in kicad-tutorial!
JLCPCB was used to print the boards. Elbow grease and lots of solder was used to assemble the boards.
The schematics can be found in dpad.
Software
The Pico runs CircuitPython and uses Adafruit's HID library to emulate a keyboard. It's also possible to emulate a mouse and a gamepad (there are some experiments for gamepad emulation in experiments).
Code execution order:
- boot.py is run once on board startup to configure it. Here we enable keyboard emulation. If you change this you need to unplug and plug the board back in. If you want to pretend to be a mouse or gamepad this is where you do it.
- Next code.py is run to configure the button mapping and listen for events. Editing this should immediately restart the code and use your changes. If you need to change the button mappings this is where you do it.
When running the library code lives in lib on the pico but lives in src here in GitHub.
- gamecraft_alt_controller_jam_board.configurations contains different example keyboard mappings you can use.
- gamecraft_alt_controller_jam_board.hardware contains mappings for pins.
- gamecraft_alt_controller_jam_board.keyboard contains the code which acts as a keyboard, responding to GPIO pins (button clicks) and sending out keycodes.
Building and Deploying to a Pico
just is used to run the build and deployment steps.
poetry is used to manage local tool dependencies. It's also used to install libraries into your development environment, but these won't allow you to run the code on your desktop. They're primarily intended to allow for error checking.
Note that the default paths in the justfile are Apple Mac defaults, you'll need to adjust them for your machine.
- To install dependencies:
poetry install - To build:
just build - To flash CircuitPython onto a Pico:
- Hold down the
bootselbutton on the Pico while plugging in the USB cable into your machine - Keep holding it down until a
RPI-RP2disk is mounted - Run
just install-firmware
- Hold down the
- To deploy the built code onto the pico:
just deploy
You can make this process a little more efficient using:
- Run
just watchto see which disk is mounted - After plugging in the pico use
just install-firmware && just deploy && just ejectin another terminal to flash the firmware and install the code in one step.
Setting Up
If you're using mise it should activate automatically.
Parts
30| Qty | Value | Footprint | References |
|---|---|---|---|
| 12 | MountingHole_Pad | MountingHole:MountingHole_3.2mm_M3_Pad | H1, H2, H3, H4, H5, H6, H7, H8, H9, H10, H11, H12 |
| 8 | SW_Push_Dual | Button_Switch_THT:SW_TH_Tactile_Omron_B3F-10xx | SW1, SW2, SW3, SW4, SW5, SW6, SW7, SW8 |
| 5 | Conn_01x02_Socket | Connector_JST:JST_XH_B2B-XH-AM_1x02_P2.50mm_Vertical | J1, J2, J3, J4, J5 |
| 4 | Conn_01x05_Socket | Connector_PinHeader_1.00mm:PinHeader_1x05_P1.00mm_Vertical | J6, J7, J8, J9 |
| 1 | Pico | MCU_RaspberryPi_and_Boards:RPi_Pico_SMD_TH | U1 |
Questions
What parts does the Controller use?
30 parts. 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 micktwomey/alt-controller-jam repository on GitHub, at the commit this page was made from: the board is controller/controller.kicad_pcb and its schematic controller/controller.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 publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).
More from micktwomey/alt-controller-jam
1- 2 layers31 × 39 mm

Similar boards
- 2 layers52.2 × 52.2 mm

Base promicro
google/mozc-devices
Circuit diagrams and firmware source code for Gboard DIY keyboards
30 parts3kApache-2.0 - 2 layers40.6 × 15.2 mm

- 2 layers270 × 11 mm

Daylight
VoronDesign/Voron-Hardware
Cool Hardware designed by the Voron Design group
30 parts1.1kGPL-3.0 - 2 layers65 × 30 mm

Rgb to hdmi
hoglet67/RGBtoHDMI
Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI
30 parts1kGPL-3.0 - 2 layers40.5 × 58 mm

Initial v
tenderlove/initial-v
It's a BMW shifter converted to a Bluetooth Keyboard that you use with Vim
30 parts1kApache-2.0 - 2 layers34.3 × 41.8 mm

MotionCubeViewAllForces
hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!
30 parts915 - 2 layers57.4 × 62 mm

- 2 layers52.1 × 46.8 mm
