Skip to the content
PCBKitNew board
2 layers68.6 × 55.9 mmRP2040-Joystick, the printed circuit board in 3D

A 4 axis USB joystick built using CircuitPython, the Joystick_XL library, a Raspberry Pi Pico2, and a Jh-D400X-R2 joystick

Size
68.6 × 55.9 mm
Copper layers
2
Thickness
1.6 mm
Parts
10
Nets
23
Pads
45
Tracks, vias
65, 0
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
26 Oct 2025
Updated
24 Jun 2026

Overview

RP2040-Joystick is an open-source printed circuit board by DanTappan, from the DanTappan/Pico2Joystick repository on GitHub, published under the MIT licence. It is a 2-layer board of 68.6 × 55.9 mm with 10 parts on 23 nets, routed with 65 tracks and 0 vias.

It is built around the RP2040-ZERO. It belongs with the keyboards and input boards and the RP2040 boards of this library.

Main components

1

README

README.md

4 Axis USB Joystick

This is a simple USB Joystick written in CircuitPython, using the Joystick_XL library. Nothing particularly complex, most of the heavy lifting is done by Joystick_XL, but I'm making the repository public just in case anyone finds it useful

It should work with any microcontroller that support USB and CircuitPython. It uses CircuitPython rather than MicroPython because it requires support for USB HID.

This uses the easily available Jh-D400X-R2 joystick (Aliexpress, Amazon,...)

Building

  1. Install CircuitPython
  2. Clone the Joystick_XL repository and copy the python files to the folder lib/joystick_xl on the board filesystem
  3. Clone this repository and copy boot.py. code.py, and config.py to the board filesystem
  4. Wire up the joystick

config.py supports several different variants

Hardwired Pico2 version

The original version of this was a simple 4 axis joystick with a single button, handwired to a Raspberry Pi Pico2, as follows:

GP3 (pin 5)joystick button (blue wire)
3V3 (pin 36)positive reference on joystick pots: red wire and left pot terminals
GND (pin 33)other blue wire, black wire, and negative potentiometer reference (right pot terminals)
ADC2 (pin 34)white wire
ADC1 (pin 32)center terminal (wiper) on tilt pot
ADC0 (pin 31)center terminal on pan pot
Homebrew 4 axis joystick
Handwired board
Pico2 Pinouts
Joystick wiring

PCB Version

As a follow-on I've built a couple PCB based versions. The latest uses the Waveshare RP2040-Zero microcontroller, which has the advantage over the Pico2 of supporting 4 ADC channels.

The KiCad files for the PCB are in the KiCad folder. You will need to download the RP2040-ZERO symbols from SnapMagic

RP2040-Zero Based controller PCB design
RP2040-Zero Based Controller

Use

I use this with my VISCA Game Controller app for controlling Ethernet connected PTZ cameras.

Under normal use, the code does not export the CircuitPython filesystem to the connected computer. If you want to edit the code, you can cause it to export the filesystem by holding down the joystick button for 5 seconds after plugging in the USB connector. Alternatively, you can use (Thonny)[https://thonny.org/] and access the filesystem over the USB serial port.

Parts

10
QtyValueFootprintReferences
5Screw_Terminal_01x02TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mmButton1, Button2, Button3, Button4, Button5
4Screw_Terminal_01x03TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-03P_1x03_P5.00mmPot1, Pot2, Pot3, Pot4
1RP2040-ZERORP2040-ZERO:MODULE_RP2040-ZEROU1

Questions

How big is the RP2040-Joystick PCB?

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

What parts does the RP2040-Joystick use?

10 parts, built around the RP2040-ZERO. 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 RP2040-Joystick KiCad files?

From the DanTappan/Pico2Joystick repository on GitHub, at the commit this page was made from: the board is KiCad/RP2040-Joystick.kicad_pcb and its schematic KiCad/RP2040-Joystick.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the RP2040-Joystick 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).

Similar boards

  • 2 layers132.3 × 94.9 mmCheapino, the printed circuit board in 3D

    Cheapino

    tompi/cheapino

    An affordable split 36 keys keyboard

    59 parts1.2kCC-BY-4.0
  • 2 layers321 × 92.3 mmMx40, the printed circuit board in 3D

    Mx40

    zzeneg/stront

    Split keyboards with 38 or 40 keys, LCD display and Cirque trackpad

    181 parts353MIT
  • 2 layers255.9 × 99.3 mmZerosprey42, the printed circuit board in 3D

    Zerosprey42

    beekeeb/zerosprey42

    Zerosprey42 Keyboard is a wired, beginner friendly, choc hotswap, MonoBlockSplit (Unibody), column-staggered, DIY mechanical keyboard.

    96 parts140
  • 2 layers146.3 × 69.5 mmStress, the printed circuit board in 3D

    Stress

    GroooveBob/Stress

    Pocket Arcade Fight Pad

    22 parts102MIT
  • 2 layers54 × 64 mmDonConIOmini, the printed circuit board in 3D

    DonConIOmini

    ravinrabbid/DonCon2040

    RP2040 based firmware and hardware for DIY Taiko no Tatsujin Drum Controllers

    96 parts66MIT
  • 2 layers52 × 50 mmRP2040-TestPatternGenerator VGA, the printed circuit board in 3D

    RP2040-TestPatternGenerator VGA

    nmur/RP2040-TestPatternGenerator

    A simple test pattern generator running on the RP2040 microcontroller

    12 parts64GPL-3.0
  • 2 layers120 × 40 mmBuinchiez40, the printed circuit board in 3D

    Buinchiez40

    ChrisChrisLoLo/bunchiez40

    A pocket keyboard that makes use of mouse switches to achieve a miniscule size

    90 parts56GPL-3.0
  • 2 layers305.2 × 76.2 mmSoroka, the printed circuit board in 3D

    Soroka

    kapee1/soroka

    40% DIY-keyboard with base kit support

    126 parts47Unlicense