Wireless MIDI foot controller for guitarists and more.
You can change the presets of your guitar rig, turn old MIDI equipment into something that’s USB-compatible, give you hands-free or foot-occupied ways to control your rig during a live performance, and it can be done with WiFi or Bluetooth. This is a full-featured MIDI controller, with three user profiles, and it can control a maximum of 36 foot switches. That’s an impressive amount of kit for such a small device; usually you’d have to spend hundreds or even thousands of dollars for a simple MIDI controller, and the PedalinoMini does everything with very cheap hardware.
An easy way to create one is by building the PedalinoMini™ 4. I aimed to keep it as simple as possible.
PedalinoMini™ 4 operates seamlessly with its 4 footswitches, featuring a big 1.9" color display equipped with WiFi, Bluetooth, and USB MIDI capabilities. It is powered through a USB-C port, using either a power adapter or, for enhanced convenience, a compact power bank, ensuring up to 6 hours of uninterrupted functionality.
Do you need more footswitches? PedalinoMini™ 6 or PedalinoMini™ 8 is for you.
New features, bug corrections, priority reply will be offered at zero-day to sponsors only. Sponsors will have access to a private repository.
New features and bug corrections will be released to this public repository when one of the following goals is met (whichever come first):
One thousand stars
Add a star to the project if you don't want be a sponsor.
Goal is 1000 stars.
12 months from October 25th, 2024
Be patience if you are not ready to add a star.
Goal is reached on Ocotber 25th, 2025.
When one of the previous goals will be reached sponsors will continue to receive in advance new versions and new goals will set.
Sponsors version additions/fixes since October 25th, 2024:
PedalinoMini™ Case 1 is available to sponsors only.
The shortest bill of materials ever: an ESP32 board and a OLED display. That's it.
Not enough short?
An all-in-one LILYGO® TTGO T-Display with an 1.14" IPS display and onboard lithium battery interface
An all-in-one Heltec WiFi Kit 32 with an integrated OLED display (0.96") and onboard lithium battery interface
An all-in-one TTGO T-Eight ESP32 with a bigger OLED display (1.3"), 4MB PSRAM and onboard lithium battery interface
Not enough powerful?
USB MIDI (ESP32 only) and DIN MIDI connection requires additional hardware.
To create your own ladder you can start simulating the below ones:
Simulate voltage ladder 2k 3k 5.1k 10k 30K
Simulate voltage ladder 10k (TC-Helicon Switch 6)
Simulate "D1 Robot LCD Keypad Shield" voltage ladder
Visit http://alf45tar.github.io/PedalinoMini/installer to install public firmware, update firmware, connect device to a WiFi network and visit the device's hosted web interface.
For sponsor only visit http://alf45tar.github.io/PedalinoMini/sponsor-installer to install latest firmware, update firmware, connect device to a WiFi network and visit the device's hosted web interface. It is required a secret key available on sponsor area.
The only requirement for now is to use a Google Chrome or Microsoft Edge browser (Safari and iOS devices are not supported yet). WiFi provisioing via Bluetooth is only supported in Google Chrome on Windows.
Raspberry Pi Pico is a generally available cost-effective board that can be used to add an USB MIDI connection.
Thanks to Sthopeless
For both methods:
ESP32 Pin | Pico Pin |
---|---|
RX1 | GP0 |
TX1 | GP1 |
GND | GND |
IMPORTANT: ESP32 board and Pico must share GND.
The cheapest and compact way to implement an USB MIDI connection is using an Arduino Pro Micro and the BlokasLabs/USBMIDI library. Upload the UsbMidiConverter example into the Arduino Pro Micro.
Serial1 of ESP32 (re-mapped to pin 18 RX and 19 TX) is connected to Serial1 (pin 1 TX0 and pin 2 RX1) of Arduino Pro Micro. Use a 3.3V Pro Micro board. A 5V Pro Micro board works too because the ESP32 is usually 5V tolerant.
Arduino Pro Micro is powered by the USB MIDI connection.
IMPORTANT: ESP32 board and Arduino Pro Micro must share GND.
PedalinoMini™ has 8 booting modes:
Mode | Name | Description |
---|---|---|
1 | Normal | BLE and WiFi are enabled. PedalinoMini™ starts the WiFi procedure on boot (connect to last AP -> WiFi Provisioning -> SmartConfig -> WPS -> Access Point). After boot PedalinoMini™ will wait for BLE-MIDI connection. |
2 | Bluetooth Only | WiFi and Web UI are disabled. PedalinoMini™ will wait for BLE-MIDI connection only. |
3 | WiFi Only | PedalinoMini™ starts the WiFi procedure on boot (connect to last AP -> WiFi Provisioning -> SmartConfig -> WPS -> Access Point). BLE is disabled. |
4 | Access Point with Bluetooth | PedalinoMini™ skip the WiFi procedure on boot and create a WiFi Access Point. PedalinoMini™ will wait for BLE-MIDI connection too. |
5 | Access Point without Bluetooth | PedalinoMini™ skips the WiFi procedure on boot and create a WiFi Access Point. BLE is disabled. |
6 | Reset WiFi credentials | Forget the last connected access point. On next boot PedalinoMini™ can be connected to a new AP. |
7 | Ladder Config | Learn mode for your ladder pedal. Any resistors ladder (up to 6 buttons) can be calibrated just pressing footswitches in any sequence. During calibration press and hold the footswitch until the timeout expires (the upper bar reaches zero) and the measure is acquired with a value in the botton bar. After calibration footswitches are numbered depending of the corresponding analog value: lower value lower number. TC HELICON Switch-6 footswitch 1 correspond to button 6, footswitch 2 to button 5, and so on until footswitch 6 to button 1. Configure at least one pedal as Ladder before to proceed with configuration. |
8 | Reset to factory default |
The last booting mode (1-5) is selected if you don't press any button on boot.
The default boot mode is (1) Normal.
To select a different mode:
Mode | Name | USB-MIDI | Legacy MIDI | RTP-MIDI | ipMIDI | BLE MIDI | OSC | Web UI | OTA Firmware Update | HTTP Firmware Update |
---|---|---|---|---|---|---|---|---|---|---|
1 | Normal | x | x | x | x | x | x | x | x | x |
2 | Bluetooth Only | x | x | - | - | x | - | - | x | - |
3 | WiFi Only | x | x | x | x | - | x | x | x | x |
4 | Access Point with Bluetooth | x | x | x | x | x | x | x | x | x |
5 | Access Point without Bluetooth | x | x | x | x | - | x | x | x | x |
PlatformIO is the recommended IDE for PedalinoMini™ build and upload.
xcode-select --install
via Terminal. Remember to run the command every time you update your macOS.That's all folks.
Before any update save configuration, reset to factory default and reload configuration. EEPROM can change without any further advice.
PedalinoMini™ supports IEEE 802.11 b/g/n WiFi with WPA/WPA2 authentication (only 2.4 GHz).
PedalinoMini™ support 5 WiFi provisioning methods: 1 via USB, 1 via Bluetooth and 3 via WiFi.
PedalinoMini™ is using ESP Web Tools not only to install the firmware, via USB with a click of button right from you browser, but also to connect it to WiFi with the same simplicity via USB or Bluetooth.
PedalinoMini™ also implements Wi-Fi Protected Setup (WPS) and Smart Config technology (Espressif’s ESP-TOUCH protocol). WPS needs access to the WPS button on the WiFi router. Smart Config requires a smartphone with one the following apps:
If the WiFi network is not available PedalinoMini™ will create an hotspot for you. Once connected to the PedalinoMini™ hotspot, you can use the web interface to set the SSID and password of an access point that you would like to connect to.
Any of the previous steps can be skipped pressing BOOT button.
void wifi_connect()
{
auto_reconnect(); // WIFI_CONNECT_TIMEOUT seconds to reconnect to last used access point
if (!WiFi.isConnected())
improv_config(); // IMPROV_CONFIG_TIMEOUT seconds to receive provisioning SSID and password via USB or Bluetooth and connect to WiFi
if (!WiFi.isConnected())
smart_config(); // SMART_CONFIG_TIMEOUT seconds to receive SmartConfig parameters and connect
if (!WiFi.isConnected())
wps_config(); // WPS_TIMEOUT seconds to receive WPS parameters and connect
if (!WiFi.isConnected())
ap_mode_start(); // switch to AP mode until next reboot
}
The responsive and mobile-first configuration web user interface is available on http://device-name.local
address (the address is case insensitive). The device identification name is unique per device. Every device/board has a different device name. For example I am using http://2ab267ac.local
to connect to my PedalinoMini™.
In order to know your device name and/or the IP address press for at least half a second the BOOT button and check the display.
As alternative method you can use the IP address. If you are using the AP mode the IP address is always 192.168.4.1
and the connection address is http://192.168.4.1
for everyone.
There is no credentials to connect to web user interface. Device name and credentials to connect to web user interface can be changed in the Options page.
Once PedalinoMini™ is connected to a WiFI network and you are connected to the web user interface it is time to configure which pedal is connected to each of the 6 available ports. Pedal 7, 8 and 9 (if present) are the on board buttons and they are fully configurable.
____ | Description |
---|---|
Mode | Select one of the following: NONE, MOMENTARY, LATCH, ANALOG, JOG WHEEL, MOMENTARY 2, MOMENTARY 3, LATCH 2, LADDER, ULTRASONIC, ANALOG+MOMENTARY, ANALOG+LATCH. |
Invert Polarity | Normally open (NO) and normally closed (NC) momentary switches are supported and configurable by software if the foot switch do not have a polarity switch. On analog pedal or ultrasonic ranging sensor it invert the range. |
Singles Press | Select Enable/Disable here to enable/disable PRESS, RELEASE and CLICK events. CLICK event is detected after a PRESS followed by a RELEASE event on momentary switches and on PRESS and on RELEASE on latch switches. |
Double Press | Select Enable/Disable here to enable/disable DOUBLE CLICK events. If double press is enabled CLICK event is postponed until double press timeout (by default 400ms). |
Long Press | Select Enable/Disable here to enable/disable LONG PRESS, REPEAT PRESSED and LONG RELEASE events. LONG PRESS event is detected after a PRESS event with no RELEASE event within the long press timeout (by default 500ms). After a LONG PRESS event a REPEAT PRESSED event is triggered every repeat press timeout (by default 1000ms) until the button is keep pressed. After a LONG PRESS event the RELEASE event is replaced by a LONG RELEASE event. Two sequences of events are possible: PRESS and RELEASE or PRESS, LONG PRESS, REPEAT PRESS (optional) and LONG RELEASE. |
Analog Calibration | Enable analog pedal continuous calibration. Min and Max values are managed by PedalinoMini™. After each power on cycle move the expression pedals to its full range and PedalinoMini™ will calibrate it. During the first full movement of the pedal MIDI events could be not precise because PedalinoMini™ is still learning the full range of the pedal. |
Analog Response | Mapping between analog pedal movement and response. Accepted values: LINEAR (as is response), LOG (great acceleration but than flat), ANTILOG (start slow with a rapid increase). |
Min | In ANALOG mode minumum digital value (after analog-to-digital conversion) that can reach the connected expression pedal. In ULTRASONIC mode the minimum distance (250 is around 2cm and it is not recommended to go below). Acceptable values are from 0 to 1023 |
Max | In ANALOG mode maximum digital value (after analog-to-digital conversion) that can reach the connected expression pedal. In ULTRASONIC mode the maximum distance (1023 is around 18cm and it is far enough for the application). Acceptable values are from 0 to 1023. |
Easing | It controls the amount of easing. Possible values are: 1, 2 or 3. Bigger value makes the responsive values more responsive: output value follows immediately the input value. Recommended values: 1 for ultrasonic sensor, 2 or 3 for potentiometer. |
Activity Threshold | The amount of movement that must take place for it to register as activity and start moving the output value. Increase the value to suppress noisy potentiometer. Recommended values: 8 or 16 for potentiometer, 64 for ultrasonic sensor. |
A control is a single switch of a pedal (i.e. button 2 of pedal 4) or a combination of 2 switched of any pedal to be pressed simultaneous. Controls are used to logical sort and hide the physical connection of switches or to define a new control as simultaneous press of 2 switches.
Actions are triggered by controls. As a consequence a control is needed also for analog and ultrasonic pedals.
Due to hardware limitation simultaneous press do not works with 2 switches of the same MOMENTARY 3, LATCH 3 and LADDER. Instead simultaneous press works well between one switch of a MOMENTARY 3/LATCH 3/LADDER pedal and any other switch of a different pedal of any type. Simultaneous press works well between the 2 switches of the same MOMENTARY 2 or LADDER 2 pedal.
For each control it is possible to define the default led number to be used in Actions. It helps to simply the hardware leds connections but keeping each led logically linked to a switch.
Of course the simultaneous release, double click and long press are supported too even if they are not so usefull.
Once Controls setup is complete proceed with Actions setup to define which event (press, release, double press, long press, repeat pressed, long release, move or jog) trigger an action.
____ | Description |
---|---|
On | The event that trigger the action. Momentary switches, latches and ladders have 7 different events: PRESS, RELEASE, PRESS&RELEASE, CLICK, DOUBLE CLICK, LONG PRESS, REPEAT PRESSED and LONG RELEASE. All of them need to be enabled on Pedals level otherwise the action is not triggered. Analog expression pedals have only MOVE event. Jog wheels have only JOG event. |
Control | The control that trigger the event as defined in Controls page. |
Send | The action to be triggered on event. It can be a MIDI message (PROGRAM CHANGE, CONTROL CHANGE, NOTE ON, NOTE OFF, PITCH BEND, CHANNEL PRESSURE, START, STOP, CONTINUE), a special action (BANK SELECT+, BANK SELECT-, PROGRAM CHANGE+, PROGRAM CHANGE-, BANK+, BANK-, MTC START, MTC STOP, MTC CONTINUE, TAP, BPM+, BPM-) or a SEQUENCE of them. For an analog pedal leave it blank to activate the universal mode. In universal mode an analog pedal can be used to repeat the last MIDI message. A typical usage is to modify the value of the last CONTROL CHANGE. |
From Value/To Value | Define the range from a off value to a on value (see below). |
Tags When Off | Action name to display when off action is triggered. |
Tags When On | Action name to display when on action is triggered. |
Led | Select the led number and the off and on color. Use Default for use the default led defined in Pedals. |
Action | MIDI Channel | MIDI Code | From | To |
---|---|---|---|---|
Program Change | Channel | PC# | - | - |
Control Change | Channel | CC# | From Value | To Value |
Control Change Snap | Channel | CC# | From Value | To Value |
Note On | Channel | Note | Velocity | - |
Note Off | Channel | Note | Velocity (+) | - |
Bank Select+ | Channel | MSB | From LSB | To LSB |
Bank Select- | Channel | MSB | From LSB | To LSB |
Program Change+ | Channel | - | From PC# | To PC# |
Program Change- | Channel | - | From PC# | To PC# |
Pitch Bend | Channel | - | - | - |
Channel Pressure | Channel | - | - | - |
MIDI Clock Master | - | - | - | - |
MIDI Clock Slave | - | - | - | - |
MIDI Clock Off | - | - | - | - |
Start | - | - | - | - |
Stop | - | - | - | - |
Ccontinue | - | - | - | - |
Sequence | - | Sequence # | - | - |
Step By Step+ | - | - | - | - |
Step By Step- | - | - | - | - |
Bank+ | - | - | From Bank | To Bank |
Bank- | - | - | From Bank | To Bank |
MTC Master | - | - | - | - |
MTC Slave | - | - | - | - |
MTC Off | - | - | - | - |
MTC Start | - | - | - | - |
MTC Stop | - | - | - | - |
MTC Continue | - | - | - | - |
Tap | - | - | - | - |
BPM+ | - | - | - | - |
BPM- | - | - | - | - |
OSC Message | - | - | - | - |
Profile+ | - | - | From Profile# | To Profile# |
Profile- | - | - | From Profile# | To Profile# |
Set Led Color | - | - | - | - |
Repeat | - | - | - | - |
Repeat Overwrite | Channel | - | From Value | To Value |
Device Info | - | - | - | - |
Power On/Off | - | - | - | - |
The supported interfaces are:
Interface | Description |
---|---|
USB MIDI | Plug&play USB MIDI interface. Requires additional hardware (see schematic). |
Legacy MIDI | Legacy serial MIDI interface with 5 pins DIN connectors. Requires additional hardware (see schematic). |
RTP-MIDI | RTP-MIDI also know as AppleMIDI or Network MIDI. It is based on UDP protocol and it requires WiFi. |
ipMIDI | ipMIDI is a multicast UDP protocol and it requires WiFi. ipMIDI works only if both end points are connected to the same 2.4 GHz WiFi network. Same router is not enough when one end point is connected to a 5 GHz WiFi network or to a different 2.4 GHz WiFI network hosted by the same router. |
BLE MIDI | Requires Bluetooth Low Energy (BLE). |
OSC | OSC messages are based on UDP protocol and it requires WiFi. |
For each interface there are 4 filtering options:
__ | Description |
---|---|
IN | Enable/disable receiving MIDI messages from the interface |
OUT | Enable/disable sending MIDI messages to the interface |
THRU | Enable/disable so called MIDI Thru (every message received from the IN port is automatically sent to the OUT port of the same interface) |
CLOCK | Enable/disable receiving and sending CLOCK MIDI message |
Routing between different interfaces is enabled between every IN enabled interfaces to any OUT enabled interfaces. Do not confuse routing (different interfaces) with MIDI Thru (between IN and OUT of same interface).
PedalinoMini™ has a lot of options well documented in the Options page.
The complete profile setup can be saved as configuration to be used later or just for backup reason in case of hardware failure. Configuration files can be downloaded and shared with others PedalinoMini™ users. A complete configuration file editor is provided for advanced operations.
Some example configurations are provides. The default configuration for PedalinoMini™ Case 1 is available as 'case1'.
PedalinoMini™ can emulate an IK Multimedia iRig Blueboard using 'blueboard' configuration. Midi Mode 1 is on bank 1 and Midi Mode 2 is on bank 2. PedalinoMini™ emulation works on any MIDI interface and not only "MIDI over Bluetooth" as the original iRig Blueboard.
PedalinoMini™ can control a Fender Mustang I/II/III/IV Amplifier via MIDI. Additional software is required to translate MIDI messages to the proprietary USB protocol used by Fender Mustang amplifiers. The bonus configuration is called 'mustang' and works with 3 momentary switches and 3 jog wheels.
Where | What | Display | Description |
---|---|---|---|
Bank Name | Empty | If the current bank name is empty the current profile and the current bank is shown using a vintage 7 segment LED style. First digit is the profile, the others two are for bank. | |
Bank Name | Any | If current bank name is not empty the bank name is displayed within the 6 pedal names. PedalinoMini™ assumes the first action tag for the pedal as its pedal name. The bank name screen will switch every 4 seconds to display pedals current value if no event occurs. | |
Bank Name | : | If the bank name start with colon (:) the bank name is always shown (if no event occurs). | |
Bank Name | . | If bank name start with point (.) the current values are shown and events update values in real time without any display switch. | |
Bank Name | ## | A double hashtag sign (##) in bank name is replaced with the bank number. | |
Action Tags | : | If action tag start with colon (:) the display is not switched when an event occurs. | |
Action Tags | . | ![]() | If action tag end with dot (.) the corresponding led and color is set on boot. |
Action Tag | ### | A triple hashtag sign (###) in action tag is replaced with the current value of the parameter. |
During normal operation
On TTGO T-Eight replace BOOT button with CENTER button.
https://github.com/marosell More details
https://github.com/rigr More details
https://github.com/Hans68 More details
https://github.com/teopost More details
https://github.com/gallochri More details
https://github.com/juani13973/pedalinio-18-footswitches-prototype More details
https://github.com/aFunkyBass More details
https://github.com/akosbeke More details
https://github.com/borsei222 More details
https://github.com/TarFilarek More details
https://github.com/bobvc133 More details
https://github.com/Samantha-uk More details
https://github.com/potul More details
https://github.com/Celticpure More details
https://github.com/jimhiggs More details
https://github.com/Keeze More details
https://github.com/mattzzw More details