In this project, we’re making GamePads for the Adafruit PyBadge.

PyBadge is great for conferences but it also makes a really nice gaming device!

You can make gaming sessions more comfortable with a 3D printed thumbpad and buttons!

The case is designed to house a bigger 3d printed thumbpad and buttons. You can even use flexible filaments for a softer touch with a bit more grip.

We designed three difference cases for the back of the PyBadge to fit the header version and the PyBadge LC model. The PyBadge LC is a lot more slimmer without the headers and connectors.

A third version of the case includes cutouts to connect FeatherWings!

Angled shot of a Adafruit PyBadge for MakeCode Arcade, CircuitPython, or Arduino.
What's the size of a credit card and can run CircuitPython, MakeCode Arcade or Arduino? That's right, its the Adafruit PyBadge! We wanted to see how much we...
Angled Shot of Adafruit PyBadge - Low Cost.
What's the size of a credit card and can run CircuitPython, MakeCode Arcade or Arduino even when you're on a budget? That's right, it's the Adafruit...
Lithium Ion Polymer Battery 3.7v 350mAh with JST 2-PH connector and short cable
Lithium-ion polymer (also known as 'lipo' or 'lipoly') batteries are thin, light, and powerful. The output ranges from 4.2V when completely charged to 3.7V. This...
Mini Oval Speaker with pico blade connector
Hear the good news! This wee speaker is a great addition to any audio project where you need 8 ohm impedance and 1W or less of power. We particularly like...

This provides a visual reference for wiring of the components. They aren't true to scale, this is just meant to be used as reference. This diagram was created using the Fritzing software package.

Take a moment to review the components in the circuit diagram. This illustration is meant for referencing wired connections - The length of wire, position and size of components are not exact.

Volume Switch

We wanted a way to quickly lower the volume when playing in quiet areas, so we added a slide switch to control the speaker volume. 

When we flip the slide switch off, the PyBadge switches from the oval speaker to the build in buzzer speaker!

This makes on the go gaming session a-lot more enjoyable in public areas.


Speaker Wires

Start by measuring the speaker wires so they have enough slack to work with when inserting the board into the case.

Carefully pull apart the red and black wires up to where we'll add the slide switch. Use flush diagonal cutters to trim and tin the ends of the black wire. 

Slide Switch

Trim the pins on the slide switch short to fit the walls inside the case. Cut and tin the ends of the black wires and then solder the wires on two of the the pins on the slide switch. Use any two pins that are side by side. You can remove the third pin. 

Mount Slide Switch

Next we'll need to carefully position the board and slide switch into the mounting walls on the bottom right corner. Insert the slide switch into the cutout, at an angle. We can use tweezers to press fit the back of the slide switch between the three walls. Make sure to move the wires away from the stand off and then finish mounting the top half of the case.

For a complete guide on setting up nofriendo on your PyBadge, follow the complete guide in the link below:

Be sure to check out the homebrew roms linked above!

PyBadge works with CircuitPython, MakeCode Arcade and Arduino!

Adafruit’s NoFriendo software emulates NES games so you can play the classics or homebrew titles.

Use the built-in menu system to select and load ROMs.

You can even save and reload game states! This makes playing ROMs much more enjoyable!

Start by downloading the ready-to-go UF2 file.

To install, just drag and drop ithe UF2 file onto the PYBADGE USB drive.

Create an NES directory and load up your favorite ROM files!

3D Printed Parts

The parts in this kit are designed to be 3D printed with FDM based machines. STL files are oriented to print "as is". Parts require tight tolerances that might need adjustment of slice settings. Reference the suggested settings below.


CAD Files

The fusion 360 source file is included and features original sketches and feature timeline along with easily editable user parameters. The parts can further be separated into small pieces for fitting on printers with smaller build volumes. Note: STEP file is included for other 3D surface modeling programs such as Onshape, Solidworks and Rhino.



Use these settings as reference. Values listed were used in Prusa Slicer slicing software.

  • 0.2mm Layer Height / 0.4mm nozzle
  • 0.38mm Line Width (inner & outer widths)
  • 40mm/s printing speed
  • 20% infill
  • Supports: No

NinjaFlex buttons

The buttons are print in flexible material. We used NinjaFlex 85A (elastic) for a more rubbery, squishy feel.

We recommend printing two of the buttons and thumbpads at the same time to prevent these small parts from heating up a deforming.   

Below are some of the setting we modified in the default flexible materials profile in Prusa Slicer.

  • no retraction (off)
  • 30mm/s print speed
  • 230c nozzle
  • 55c Bed
  • first layer height .25mm (avoids bonding to the bed)

PyBadge LC Speaker 

We designed three different cases for the back of the PyBadge to fit the PyBadge header version and the PyBadge LC model, which has no headers or connectors. The third version of the case includes cutouts to connect Feather Wings. 

Having no headers keeps the case design slim, so we’ll need to solder our speaker to the solder pads on the back.

Start by measuring the wire length. I looped it around the speaker to ensure we have enough wire to solder.  Next we'll remove the pico connector and align and solder the wires to the pads.

Attach Speaker

Remove the protective backing on the front of the speaker (fabric side) and stick it over the outline on the PCB.

We can use mounting tack to secure the lipo battery.

Attach Battery

Roll up a small amount of tack and place over the "battery" text on the back of the board. We used the 350mAh lipo battery. First gently curve the wires to make it easily when plugging in the connectors.

Lay the battery over the tack and gently press the battery to adhere it to the tack.

Case Assembly 

Now we can move on to assembling the top half of the case.

We’ll use superglue to attach the button housing. This medium grade starbond superglue dries slowly so you can align the pieces more carefully.

To avoid hazing on the case, a small desktop fan will help keep the fumes away. You can use clamps to hold parts together as they dry.

The display bezel is attached after the button housings have fully cured.

Gamepad and Buttons

We can print our buttons in PLA or even flexible materials. 

Install the gamepad by inserting it into the housing. Add the washer and use an M2x5mm long screw to secure it in place.

We’ll also setup the action buttons with a washer and machine screws. This prevents the buttons from coming out.

Reset Button

An extra button is added to the bottom half of the case for better access to the RESET button. Pass the smaller diameter end through the cutout on the case until the larger end lays flat around the cutout. 


Mount PyBadge

Place the PyBadge board over the standoffs and line up the mounting  holes. Insert with the USB port first, at an angle. 

Then fit the top half over the PyBadge.

Now you can insert four M3x6mm screws to secure the both sides of the case.


Now we can test out button presses. If any of the buttons stick, we can inspect the printed washers. Make sure any brims are fully removed by trimming any excess material with flush cutters. 

Flip on the switch and game on! 

This guide was first published on Jun 24, 2019. It was last updated on Mar 08, 2024.