This is a fork of the NMSVE firmware by this.is.Noise
I have added the following functionality:
- Selectable modes/scales
- Selectable root note
- Selectable knob function
- Output over TRS MIDI, BT (Bluetooth Low Energy), or both
These settings can be saved to 8 preset slots, each of which can be quickly recalled at boot.
If you want to use this firmware without doing the hardware modification simply set #define ENABLE_TRS to false instead of true. This will exclude any code related to sending data via TRS and will also skip the first selection step below (the device will boot staight to MIDI channel selection).
- NMSVE
- 3D printed housing
- Female 3.5mm TRS jack
- 33 Ohm resistor
- 10 Ohm resistor
- Hookup wire
- USB to TTL adapter (for flashing)
This project has now been updated with a second revision of a custom case. This case has been made larger than the original for improved ergonomics, room for a TRS MIDI out port, and a slightly larger battery. See the STL folder for both revisions of my modified/remade housing.
For my use the TRS jack is wired for TRS-A connections (see pinout):
- Ground goes to ground on the NMSVE
- The sleeve is wired through a 33 Ohm resistor to the 3.3V pin
- The tip is wired through a 10 Ohm resistor to the TX pin
- Download Arduino
- Install ESP32 in Arduino
- Load sketch, install required libraries (MIDI, Bounce2)
- Select board Firebeetle-ESP32
- Plug in USB to serial FTDI adapter, select port in Arduino
- Connect adapter to NMSVE - see pinout
- Black/GND to GND on NMSVE
- Green/TX to RX on NMSVE
- White/RX to TX on NMSVE
- Turn on NMSVE while holding boot pin to ground wire - POWER and CONNECT LEDs should be solid
- Flash in Arduino
On startup, the device prompts you to select from one of the eight presets or to run a full setup. Presets can be saved from any combination of configurations.
- Buttons 1-8 select a preset
- Button 12 runs full setup
If presets have not been set up they will be launched with the default settings (configured near the top of the code). Once adjusted they can be saved (see below).
1. If you select the full setup, you will first be prompted to select the output options:
- 1 TRS Only
- 2 BT Only
- 3 BT + TRS
2. Next the device prompts for the MIDI channel. Buttons 1 through 12 select those channels.
3. Then the device prompts for the scale/mode:
- 1 Ionian Mode
- 2 Dorian Mode
- 3 Phrygian Mode
- 4 None (Chromatic)
- 5 Lydian Mode
- 6 Mixolydian Mode
- 7 Aeolian Mode
- 8 Locrian Mode
- 9 Pentatonic Major Scale
- 10 Penatonic Minor Scale
- 11 Blues Scale
- 12 Whole Tone Scale
4. After the mode is selected you are prompted for the root note. This is chosen using the same note layout as original firmware (starting with C at the top left).
5. Finally you choose the function of the rotary knob:
- 1 Velocity (sent with note data)
- 2 Modulation CC (this is the current functionality in the stock firmware)
- 3 Pan CC
- 4 Expression CC
Once booted the buttons are reassigned to whatever scale you chose, starting from the top left, with the root note of choice. The rotary knob will function as set above and the fader will choose the octave, as before.
Please note: When the NMSVE is turned on the ESP32 chip sends diagnostic debug info on the first serial port. As this is where the MIDI out is connected any devices attached will receive a burst of non MIDI data that may be interpreted strangely (often as a few notes and a transport start command). I suggest leaving the MIDI cable disconnected until after turning the NMSVE on to avoid this.
If you would like to change settings without restarting the device, turn the knob to the left all the way and slide the fader all the way to the right.
Then you can press the following buttons to change settings or save/load presets:
- 1 Select MIDI channel
- 2 Select scale
- 3 Select root note
- 4 Select knob function
- 5 Run full setup
- 9 Load preset
- 12 Save preset
Pressing 9 or 12 will prompt you to choose the slot to load/save preset. Press buttons 1 through 8 to select the required slot and your preset will be loaded or saved!
Cheers, I hope you enjoy.
rm.