Semi-DIY MIDI Controller/Standalone system using the Pi Pico

Hi all!

Recently I completed the first phase of building a custom MIDI foot controller for use with MODEP. It has definitely made playing and practicing a lot easier! Here’s a picture of it:

Yes, I kinda took the easy way in regards to the hardware and got an existing hardware unit. I figured this would save me from all the hassle of finding all the switches and knobs and getting an enclosure built for them. I found this Boss ME-25 advertised as “not working”, which was perfect, and got it for real cheap. I decided to use the Pi Pico as the brains of the unit, because of its low cost and ability to be used as a USB input device. Here’s a picture of the internals:

It’s a bit messy, but it works :laughing:! Initially I had wired only the footswitches to the Pico, but later on I wired up all the buttons on the unit as well. Unfortunately the Pico has only 3 ADCs, so I wired only the pedal and the Drive and Tone knobs to it. I however ran into an issue with all the switches – they were all acting as being closed regardless of whether they were pressed or not. Maybe that was the issue with the board. I got around that by drilling the PCB so that only one of the terminals of the switch was in contact with it.

I programmed the board in CircuitPython using the Adafruit MIDI library. Here’s a description of its current functionality:

  • Write and Edit buttons: Increment and decrement MIDI PC messages respectively, starting from 0 on channel 15. Used for Pedalboard changing.
  • Clean button: Switches between the various “modes” of functionality for the footswitches. Described in detail below.
  • Crunch button: Used for tap tempo. The parameter sends MIDI CC 102, which is mapped to the Tempo knob in the web UI. The board internally scales the CC value from 0-127 corresponding to 20-280 BPM, based on the tempo calculated from tapping the button.
  • Super Stack button: Sends MIDI CC 119. I’m using this as a “kill” button, to restart jack, modep-mod-host and modep-mod-ui services with a Python script.
  • Pedal: Sends MIDI CC 20.
  • Drive and Tone knobs: Send MIDI CC 21 and 22 respectively.
  • Footswitch functionality:
Mode Footswitch 1 (Memory ▲) Footswitch 2 (Memory ▼) Footswitch 3 (Solo)
1 Snapshot 1 (MIDI Chan 14 PC 0) Snapshot 2 (MIDI Chan 14 PC 1) Snapshot 3 (MIDI Chan 14 PC 2)
2 Previous snapshot (Start at 0) Next snapshot (Start at 0) MIDI CC 23 Momentary mode
3 Previous snapshot (Start at 0) Next snapshot (Start at 0) MIDI CC 23 Latching mode
4 Previous snapshot (Start at 0) Next snapshot (Start at 0) Tap tempo (MIDI CC 102)
5 MIDI CC 23 Latching mode MIDI CC 24 Latching mode MIDI CC 25 Latching mode

For now, the remaining four buttons are unused. I’ll add functionality to them as need arises. Also, pressing footswitches 2 & 3 simultaneously switches to the next mode, whereas pressing 1 & 2 together siwtches to the previous mode. Note that I’m not actually powering up the display or the LEDs. They just turn on as soon as the Pico is powered, possibly from the 3.3V pins conncted to the pots.

In the future, I’m planning on getting an IQAudio Codec Zero and wiring it to the audio IO on the ME-25. I’m planning on putting the Pi 4 inside it as well, but I haven’t figured out how exactly yet. My end goal is to create a standalone and self-contained unit for live use. I’m also keeping an eye on nearby used listings for something bigger than the ME-25, as having only three footswitches is a bit limiting.

Hope this might be useful for anybody thinking about doing something similar. I’d be more than happy to help if any more details are needed. Also I’m open to any suggestions in regards to changing the functionality of the unit.

6 Likes

This is fantastic! I love the idea of putting a Pico inside a non-functioning unit!

@jtemple967 yeah it works great! One of the big advantages using CircuitPython is that I don’t need access to the BOOTSEL button to update the firmware.

I love what you did with the LCD in the MIDIZilla. I want to try something similar if I’m able to find a bigger unit in similar condition. I’d have loved to use the in-built display but it’d end up using way too many pins on the Pico to make it work.

That’s awesome! For more knob support, what about adding a breakout board with more ADC channels that’s hooked up via I2C?

1 Like

@SRSabu yes that is possible. However in this specific unit, since there’s only two more knobs that I could potentially use, and one of them doesn’t seem to work (Variation), I decided not to go for it.

That makes sense. Have you seen any noise on the ADC channels from having the controls still connected in parallel to the old circuit?

Not really. I haven’t seen anything like that happen with the pedal at all. The knobs that are connected sometimes show a little bit of “flickering”, but I’ve added a “deadband” in my Python code to get around that. I don’t know if it’s because of the existing circuitry, or the fact that these knobs seem to be well used and don’t provide to much resistance when turning.