The code works and has been tested but it's not pretty.
This project is an advanced MIDI controller built using an ESP32 board. It features:
- Button inputs with debouncing for reliable operation.
- Configurable modes including Normal, Config, and Bluetooth (BT) modes.
- Persistent settings stored in LittleFS.
- Wi-Fi support for configuration via a web server.
BLEMidi is dependent on NimBLE-Arduino which has been updated to version 2 and that will break the code. If you are using Arduino IDE please downgrade the library to 1.4.3 for now.
- MIDI Support: MIDI messages are sent via USB or Bluetooth, enabling communication with DAWs or MIDI-enabled devices.
- Multiple Modes:
- Normal Mode: Default operating mode.
- Config Mode: Allows users to configure settings via a web interface.
- BT Mode: Enables Bluetooth MIDI functionality.
- Persistent Settings: Wi-Fi credentials and joystick configurations are stored in LittleFS.
- Joystick inputs for smooth control. Which are implemented in the current code but not yet tested.
- Add more configurable options for joystick and button behavior.
- Implement advanced LED animations for feedback.
- ESP32 board with sufficient GPIO pins and with support for MIDI over USB. I would suggest the ESP32-S3 which is cheap and has enough inputs for at least a 12 button pedal.
- Buttons for input (connected to specified GPIO pins).
- Joystick (connected to analog pins for X and Y axes). (Obviously not required for now)
- LEDs (optional for status indication). (Optional)
- Libraries:
- Bounce2: For button debouncing.
- LittleFS: For file system support.
- ArduinoJson: For parsing configuration files.
- USBMIDI: For USB MIDI communication.
- WiFi: For Wi-Fi functionality.
- WebServer: To host the configuration interface.
- BLEMidi: For Bluetooth MIDI.
- You will also need to install the LittleFS extension for uploading files to your board.
Default if no button is pressed during boot.
Entered by holding the config button (gpio_pins[1]) during boot. Enables configuration via Wi-Fi and web interface.
Entered by holding the Bluetooth button (gpio_pins[0]) during boot. Enables Bluetooth MIDI functionality.
The JSON structure for each button is [1, 1, 127] which translates to [type, note, velocity]. The types are 1. CC, 2. PC and 3. Note.
If you use the code and want to thank me you can always buy me a coffee.
This project is open-source and distributed under the MIT License.