DIY MIDI Controller

Build your own CircuitPython powered MIDI controller! This "MIDI fighter"-like controller features 16 arcade buttons with built-in LEDs, an OLED screen and joystick. Play drums, synthesizers or anything MIDI related! All of the electronics are housed in a snap-fit 3D printed case.

Buttons and LEDs

The Raspberry Pi Pico has plenty of GPIO for connecting 4x4 buttons. The AW9525 GPIO expander / LED driver powers the LEDs and connects to the Raspberry Pi Pico over I2C.

The LEDs light up when the buttons are pressed and stay lit until released. Awesome!

Edit MIDI on the Fly

This MIDI controller's special sauce is the ability to change and save MIDI notes directly on the device. This allows quick MIDI notes remapping. Perfect for crafting your own kits and setups for performances.

Intuitive UI/UX

The OLED screen shows the 16 buttons as little circles with numbers. The numbers are the MIDI notes assigned to each button. Use the joystick to select a button and edit the MIDI note. In edit mode, the button will blink the LED, letting you know it's been activated. While in edit mode, the buttons can be pressed to compare MIDI notes.

Kickstand Handle

Lunchbox vibes? Yes! The handle is 3d printed, print-in-place, with no support material. Can you handle it? It also works great as a kickstand to prop up the case.

Prerequisite Guides

Take a moment to walk through the following guides:

Angle shot of Raspberry Pi Pico RP2040
The Raspberry Pi foundation changed single-board computing when they released the Raspberry Pi computer, now they're ready to...
Video of a Adafruit AW9523 GPIO Expander and LED Driver Breakout connected to a LED changing colors.
Expand your project possibilities, with the Adafruit AW9523 GPIO Expander and LED Driver Breakout - a cute and powerful I2C expander with a lot of tricks up its...
Monochrome OLED module wired to QT Py showing falling Adafruit logos
This OLED goes out to all the fans who want more pixels! Normally our 128x64 OLEDs are the biggest ones we've stocked that can use I2C. This one is a whopping 128x128...
Video of 30mm translucent clear LED arcade button flashing on and off.
A button is a button, and a switch is a switch, but these translucent arcade buttons are in a class of their own. Particularly because they have LEDs built right...
2 x STEMMA QT / Qwiic JST SH 4-pin Cable - 100mm Long
STEMMA QT / Qwiic JST SH 4-pin Cable - 100mm Long
1 x Thru-hole 5-way Navigation switch
Thru-hole 5-way Navigation switch
1 x Rubber Joystick Nubbin Cap
For Navigation Joystick
1 x Panel Mount Extension USB Cable - Micro B Male to Micro B Female
Panel Mount Extension USB Cable - Micro B Male to Micro B Female
1 x Black Nylon Screw and Stand-off Set – M2.5 Thread
Black Nylon Screw and Stand-off Set – M2.5 Thread
1 x Silicone Cover Stranded-Core Ribbon Cable - 10 Wire 1 Meter Long - 28AWG Black
Silicone Cover Stranded-Core Ribbon Cable - 10 Wire 1 Meter Long - 28AWG Black
1 x M2 Hardware Kit
Black Nylon M2 Hardware

Hardware List

Screws, nuts and standoffs used in this build.

Handle

  • 4x M3 x 10mm long screws

USB Extension Cable

  • 2x M3 x 10mm long screws
  • 2x M3 locknuts

OLED

  • 4x M2.5 x 12mm long screws
  • 4x M2.5 nuts

5-way navigation PCB

  • 2x M3 x 4mm long screws

PCB Mount

  • 4x M3 x 12mm long FF standoffs
  • 4x M2.5 x 8mm long FF standoffs
  • 4x M2 x 6mm long FF standoffs
  • 8x M3 x 6mm long screws
  • 8x M2.5 x 4mm long screws
  • 8x M2 x 4mm long screws

Author Credits

CAD by Noe Ruiz and Code by Liz Clark.

Inspired by MIDI Fighter by DJTechTools

This guide was first published on Mar 10, 2021. It was last updated on Mar 28, 2024.

This page (Overview) was last updated on Mar 08, 2024.

Text editor powered by tinymce.