An ESP32 based foot pedal to communicate with the Spark Amp and Spark App via Bluetooth LE. Also works as a control device for a Looper app on the mobile.
Ignitron gives you full control over your Spark Amp:
- Switch between the four hardware presets
- Switch between custom saved presets organized in banks
- Toggle effects for the selected preset
- Load new presets via the Spark App
- Delete stored presets
- Control Looper apps (and other apps which support bluetooth keyboards)
- Firmware can (rudimentarily) be updated via OTA Web interface.
Adding new presets to Ignitron can easily be done as it can also act as a Spark Amp. Simply connect to Ignitron with your Spark app and load new presets directly from ToneCloud (or your downloaded presets) to Ignitron.
One big advantage of Ignitron is that it communicates with your Spark Amp using the Bluetooth LE protocol. This means you can still connect your mobile with your Spark Amp as an audio speaker and play along your favorite songs while you control your effects.
The current active preset and effects are indicated via LEDs.
In addition, the built-in display provides information on
- selected bank and preset number
- selected preset name
- operation mode (Preset, Manual/FX, Looper)
- activated pedal types in the FX chain
- show Bluetooth connection status to Spark Amp and Spark App and WiFi connection status
This work was inspired by the Sparkpal project and the Python Spark Parser project helped me to understand the messages being sent to and from the Spark Amp.
The following sections explain how to build and operate the pedal.
Software: click here
Hardware: click here
Ignitron has two operation modes, APP mode and AMP mode.
In APP mode (default mode on startup), Ignitron connects to a Spark Amp and behaves like the Spark App towards the Spark Amp. It can then be used to switch between saved presets, toggle FX pedals, and even connect it to a Looper app on a mobile.
AMP mode can be used to manage the presets stored on Ignitron, presets can be added from the app or be deleted from Ignitron.
To enter AMP mode, hold the Preset 1
button during startup.
In APP mode, the foot switches can be used to either switch between pre-saved presets (Preset mode), control all single effects in the selected preset (Manual/FX mode), or switch between presets while controlling an app on your mobile, e.g. a Looper app (Looper mode). You can easily toggle between Preset mode and Manual/FX mode by long pressing the Bank-Up
button. To toggle between Preset mode and Looper mode, simply long-press the Bank down
button.
When selecting Preset mode, four buttons are used to select presets the other two buttons are used to navigate through different preset banks. This way the user has access to a huge number of saved presets. When pressing the foot switch of the current active preset, the effect configured in the DRIVE section can be enabled and disabled.
In Manual/FX mode, the user has direct access to all effects of the selected preset.
When Looper mode is activated, you can swtich between presets of the current selected preset bank and use the Bank down
/Bank up
buttons to control your Looper app, e.g. to record on two separate loops.
Each switch controls a different FX pedal type:
Button | Press pattern | Function |
---|---|---|
Bank down |
Short | Navigate bank up |
Bank up |
Short | Navigate bank down |
Preset 1 |
Short | Select preset 1 / Toggle Drive |
Preset 2 |
Short | Select preset 2 / Toggle Drive |
Preset 3 |
Short | Select preset 3 / Toggle Drive |
Preset 4 |
Short | Select preset 4 / Toggle Drive |
Bank down |
Long | Switch to Looper mode |
Bank up |
Long | Switch to FX mode |
Preset 2 |
Long | Restart Ignitron |
Button | Press pattern | Function |
---|---|---|
Bank down |
Short | Toggle Noise Gate |
Bank up |
Short | Toggle Compressor |
Preset 1 |
Short | Toggle Drive |
Preset 2 |
Short | Toggle Modulation |
Preset 3 |
Short | Toggle Delay |
Preset 4 |
Short | Toggle Reverb |
Bank up |
Long | Switch to Preset mode |
Preset 2 |
Long | Restart Ignitron |
Button | Press pattern | Function |
---|---|---|
Bank down |
Short | Toggle recording on Loop 1 (can be freely configured in app) |
Bank up |
Short | Toggle recording on Loop 2 (can be freely configured in app) |
Preset 1 |
Short | Select preset 1 |
Preset 2 |
Short | Select preset 2 |
Preset 3 |
Short | Select preset 3 |
Preset 4 |
Short | Select preset 4 |
Bank down |
Long | Switch to Preset mode |
Preset 2 |
Long | Restart Ignitron |
Note: In Looper mode, Ignitron is connected to your mobile as a bluetooth keyboard. If supported by the respective app on the mobile, the Bank down
/Bank up
buttons can be freely configured to any function offered.
In AMP mode, Ignitron acts like a Spark AMP and can communicate with the Spark app running on a mobile. New presets can be stored on Ignitron and existing presets can be deleted. In this mode, Ignitron's firmware can also be updated OTA via a web browser.
- Start Ignitron in AMP mode (hold
Preset 1
button during startup). - Open the Spark App on the mobile
- For the first connection, make sure to have your real Spark Amp powered off to avoid the app conneting to it.
- Hit the connect button in the app (or the + button in the connection overview)
- Once the connection is established, you can give the connection a name in the app so you can distinguish from your regular Spark Amp connection.
- Start Ignitron in AMP mode (hold Preset 1 button during startup).
- Connect the Spark App with Ignitron (see above)
- Select a preset in the app (either saved in the app or from the ToneCloud).
- The preset name should appear in the bottom line of the display
- The
Preset
/Bank
buttons on Ignitron can be used to navigate to the desired preset position. - Press the
Preset
button to mark the position for storing - The LED of the selected preset position should start blinking
- Hit the same
Preset
button a second time to confirm storage (Hitting any otherPreset
/Bank
button will revert the state back to navigating) - The preset will be saved to the selected position, other presets will be pushed back
Button | Press pattern | Function | Remark |
---|---|---|---|
Bank down |
Short | Navigate bank up | |
Bank up |
Short | Navigate bank down | |
Preset 1 |
Short | Select preset 1 | Press twice to store received preset |
Preset 2 |
Short | Select preset 2 | Press twice to store received preset |
Preset 3 |
Short | Select preset 3 | Press twice to store received preset |
Preset 4 |
Short | Select preset 4 | Press twice to store received preset |
Bank down |
Long | Unload preset | Removes loaded preset |
Preset 2 |
Long | Restart Ignitron |
- Start Ignitron in AMP mode (hold
Preset 1
button during startup). - Use the
Preset
/Bank
buttons on Ignitron to navigate to the desired preset position - Long press the
Bank Down
button to mark the selected preset for deletion - The LED of the selected preset should start blinking
- In the display you should see a prompt if deletion should be executed
- If you want to cancel the deletion, simply short press any other button
- Otherwise, long press the
Bank Down
button again to confirm deletion. (Hitting any other button will cancel the deletion and return back to navigation)
Button | Press pattern | Function | Remark |
---|---|---|---|
Bank down |
Short | Navigate bank up | |
Bank up |
Short | Navigate bank down | |
Preset 1 |
Short | Select preset 1 | |
Preset 2 |
Short | Select preset 2 | |
Preset 3 |
Short | Select preset 3 | |
Preset 4 |
Short | Select preset 4 | |
Bank down |
Long | Mark preset for deletion | Pressing any other button in that state will cancel the deletion |
Bank down |
Long | Delete marked preset | Only if preset was first marked for deletion |
Preset 2 |
Long | Restart Ignitron |
This method is only recommended if a preset cannot be transferred via the Spark app or if the preset files have been received/generated in a different way.
- Create a preset file in JSON format as shown above
- Make sure the file name does not exceed 31 characters (including the
.json
suffix) - Put the file name into the data folder
- Insert the file name (including the
.json
suffix) to the desired prefix location in thePresetList.txt
file - Place the PresetList.txt file into the data folder (if not already there)
- Upload the data folder to Ignitron via the Arduino IDE (or other tools)
Ignitron stores presets in a JSON format using the SPIFFS file system. Each preset is stored in a separate file and presets are organized in a separate text file called 'PresetList.txt'. This list simply stored the file names of the presets, the order defines the way the banks are filled. An example preset file would look like this:
{"PresetNumber": 127, "UUID":"DEFBB271-B3EE-4C7E-A623-2E5CA53B6DDA",
"Name":"Studio Session" , "Version":"0.7", "Description":"Description for Acoustic Preset 1", "Icon":"icon.png", "BPM": 120.0000,
"Pedals": [
{ "Name":"bias.noisegate", "IsOn": false, "Parameters":[0.5000,0.3467] },
{ "Name":"BBEOpticalComp", "IsOn": true, "Parameters":[0.7583,0.2585,0.0000] },
{ "Name":"DistortionTS9", "IsOn": false, "Parameters":[0.1396,0.4073,0.6898] },
{ "Name":"Acoustic", "IsOn": true, "Parameters":[0.6398,0.3851,0.3834,0.5994,0.5195] },
{ "Name":"ChorusAnalog", "IsOn": true, "Parameters":[0.8417,0.2275,0.9359,0.3513] },
{ "Name":"DelayMono", "IsOn": false, "Parameters":[0.2240,0.2112,0.4909,0.6000,1.0000] },
{ "Name":"bias.reverb", "IsOn": true, "Parameters":[0.7228,0.3262,0.2758,0.3607,0.3439,0.4860,0.4000] } ],
"Filler":"23"
}
As a guidance which effect and amp names can be used and in which order the parameters of each effect have to be given, please refer to
In order to know which effects are available with paramters, see below table.
This data can be used to build own presets in JSON format (see above).
Use the Technical Name information in the JSON files.
Parameters marked with Switch
can only have values of 0 or 1, others can have any value between 0 and 1.
Type | App Name | Technical Name | Parameter 0 | Parameter 1 | Parameter 2 | Parameter 3 | Parameter 4 | Parameter 5 | Parameter 6 | Extra Info |
---|---|---|---|---|---|---|---|---|---|---|
Noise Gate | Noise Gate | bias.noisegate | Threshold | Decay | ||||||
Compressor | LA Comp | LA2AComp | Limit/Compress Switch |
Gain | Peak Reduction | |||||
Compressor | Sustain Comp | BlueComp | Level | Tone | Attack | Sustain | ||||
Compressor | Red Comp | Compressor | Output | Sensitivity | ||||||
Compressor | Bass Comp | BassComp | Comp | Gain | ||||||
Compressor | Optical Comp | BBEOpticalComp | Volume | Comp | Pad Switch |
|||||
Drive | Booster | Booster | Gain | |||||||
Drive | Clone Drive | KlonCentaurSilver | Output | Treble | Gain | |||||
Drive | Tube Drive | DistortionTS9 | Overdrive | Tone | Level | |||||
Drive | Over Drive | Overdrive | Level | Tone | Drive | |||||
Drive | Fuzz Face | Fuzz | Volume | Fuzz | ||||||
Drive | Black Op | ProCoRat | Distortion | Filter | Volume | |||||
Drive | Bass Muff | BassBigMuff | Volume | Tone | Sustain | |||||
Drive | Guitar Muff | GuitarMuff | Volume | Tone | Sustain | |||||
Drive | Bassmaster | MaestroBassmaster | Brass Volume | Sensitivity | Bass Volume | |||||
Drive | SAB Driver | SABDriver | Volume | Tone | Drive | LP/HP Switch |
||||
Amp | Silver 120 | RolandJC120 | Gain | Treble | Middle | Bass | Volume | |||
Amp | Black Duo | Twin | Gain | Treble | Middle | Bass | Volume | |||
Amp | AD Clean | ADClean | Gain | Treble | Middle | Bass | Volume | |||
Amp | Match DC | 94MatchDCV2 | Gain | Treble | Middle | Bass | Volume | |||
Amp | ODS 50 | ODS50CN | Gain | Treble | Middle | Bass | Volume | |||
Amp | Blues Boy | BluesJrTweed | Gain | Treble | Middle | Bass | Volume | |||
Amp | Tweed Bass | Bassman | Gain | Treble | Middle | Bass | Volume | |||
Amp | AC Boost | AC Boost | Gain | Treble | Middle | Bass | Volume | |||
Amp | Checkmate | Checkmate | Gain | Treble | Middle | Bass | Volume | |||
Amp | Two Stone SP50 | TwoStoneSP50 | Gain | Treble | Middle | Bass | Volume | |||
Amp | American Deluxe | Deluxe65 | Gain | Treble | Middle | Bass | Volume | |||
Amp | Plexiglas | Plexi | Gain | Treble | Middle | Bass | Volume | |||
Amp | JM45 | OverDrivenJM45 | Gain | Treble | Middle | Bass | Volume | |||
Amp | Lux Verb | OverDrivenLuxVerb | Gain | Treble | Middle | Bass | Volume | |||
Amp | RB 101 | Bogner | Gain | Treble | Middle | Bass | Volume | |||
Amp | British 30 | OrangeAD30 | Gain | Treble | Middle | Bass | Volume | |||
Amp | American High Gain | AmericanHighGain | Gain | Treble | Middle | Bass | Volume | |||
Amp | SLO 100 | SLO100 | Gain | Treble | Middle | Bass | Volume | |||
Amp | YJM100 | YJM100 | Gain | Treble | Middle | Bass | Volume | |||
Amp | Treadplate | Rectifier | Gain | Treble | Middle | Bass | Volume | |||
Amp | Insane | EVH | Gain | Treble | Middle | Bass | Volume | |||
Amp | Insane 6508 | 6505Plus | Gain | Treble | Middle | Bass | Volume | |||
Amp | SwitchAxe | SwitchAxeLead | Gain | Treble | Middle | Bass | Volume | |||
Amp | Rocker V | Invader | Gain | Treble | Middle | Bass | Volume | |||
Amp | BE 101 | BE101 | Gain | Treble | Middle | Bass | Volume | |||
Amp | Pure Acoustic | Acoustic | Gain | Treble | Middle | Bass | Volume | |||
Amp | Fishboy | AcousticAmpV2 | Gain | Treble | Middle | Bass | Volume | |||
Amp | Jumbo | FatAcousticV2 | Gain | Treble | Middle | Bass | Volume | |||
Amp | Flat Acoustic | FlatAcoustic | Gain | Treble | Middle | Bass | Volume | |||
Amp | RB-800 | GK800 | Gain | Treble | Middle | Bass | Volume | |||
Amp | Sunny 3000 | Sunny3000 | Gain | Treble | Middle | Bass | Volume | |||
Amp | W600 | W600 | Gain | Treble | Middle | Bass | Volume | |||
Amp | Hammer 500 | Hammer500 | Gain | Treble | Middle | Bass | Volume | |||
Modulation | Tremolo | Tremolo | Speed | Depth | Level | |||||
Modulation | Chorus | ChorusAnalog | E.Level | Rate | Depth | Tone | ||||
Modulation | Flanger | Flanger | Rate | Mix | Depth | |||||
Modulation | Phaser | Phaser | Speed | Intensity | ||||||
Modulation | Vibrato | Vibrato01 | Speed | Depth | ||||||
Modulation | UniVibe | UniVibe | Speed | Vibrato/Chorus Switch |
Intensity | |||||
Modulation | Cloner Chorus | Cloner | Rate | Depth Switch |
||||||
Modulation | Classic Vibe | MiniVibe | Speed | Intensity | ||||||
Modulation | Tremolator | Tremolator | Depth | Speed | BPM On/Off Switch |
|||||
Modulation | Tremolo Square | TremoloSquare | Speed | Depth | Level | |||||
Modulation | Guitar EQ | GuitarEQ6 | Level | 100 | 200 | 400 | 800 | 1.6k | 3.2k | |
Modulation | Bass EQ | BassEQ6 | Level | 50 | 120 | 400 | 800 | 4.5k | 10k | |
Delay | Digital Delay | DelayMono | E.Level | Feedback | DelayTime | Mode | BPM Switch |
Modes: 0.3 (50ms) - 0.4 (200ms) - 0.6 (500ms) - 0.72 (1s) | ||
Delay | Echo Filt | DelayEchoFilt | Delay | Feedback | Level | Tone | BPM Switch |
|||
Delay | Vintage Delay | VintageDelay | Repeat Rate | Intensity | Echo | BPM Switch |
||||
Delay | Reverse Delay | DelayReverse | Mix | Decay | Filter | Time | BPM Switch |
|||
Delay | Multi Head | DelayMultiHead | Repeat Rate | Intensity | Echo Volume | Mode Selector | BPM Switch |
Modes: 0 (Head 1) - 0.35 (Head 2) - 0.65 (Head 3) - 0.95 (Head 4) | ||
Delay | Echo Tape | DelayRe201 | Sustain | Volume | Tone | Short/Long | ||||
Reverb | Room Studio A | bias.reverb | Level | Damping | Dwell | Time | Low Cut | High Cut | Selects Reverb Type | 0.0 |
Reverb | Room Studio B | bias.reverb | Level | Damping | Dwell | Time | Low Cut | High Cut | Selects Reverb Type | 0.1 |
Reverb | Chamber | bias.reverb | Level | Damping | Dwell | Time | Low Cut | High Cut | Selects Reverb Type | 0.2 |
Reverb | Hall Natural | bias.reverb | Level | Damping | Dwell | Time | Low Cut | High Cut | Selects Reverb Type | 0.3 |
Reverb | Hall Medium | bias.reverb | Level | Damping | Dwell | Time | Low Cut | High Cut | Selects Reverb Type | 0.4 |
Reverb | Hall Ambient | bias.reverb | Level | Damping | Dwell | Time | Low Cut | High Cut | Selects Reverb Type | 0.5 |
Reverb | Plate Short | bias.reverb | Level | Damping | Dwell | Time | Low Cut | High Cut | Selects Reverb Type | 0.6 |
Reverb | Plate Rich | bias.reverb | Level | Damping | Dwell | Time | Low Cut | High Cut | Selects Reverb Type | 0.7 |
Reverb | Plate Long | bias.reverb | Level | Damping | Dwell | Time | Low Cut | High Cut | Selects Reverb Type | 0.8 |
Note: You can easily store tones using Hendrix gear on Ignitron. As the effects are licensed and purchased In-App, you need to connect your mobile Spark App to the Spark Amp after switching on the Spark Amp. When you then disconnect the Spark App and connect Ignitron afterwards you should be able to use presets using below gear.
Type | App Name | Technical Name | Parameter 0 | Parameter 1 | Parameter 2 | Parameter 3 | Parameter 4 | Parameter 5 | Parameter 6 | Extra Info |
---|---|---|---|---|---|---|---|---|---|---|
Compressor/Wah | J.H. Legendary Wah | JH.Vox846 | Auto Wah Mode | BPM Mode Switch |
ms (BPM Off) | Bar (BPM On) | Sensitivity | Auto Wah Mode: 0.0, 0.2, 0.4, 0.6, 0.8, 1.0 - Bar: 0.0 (1/8), 0.25 (1/4), 0.5 (1/2), 0.75 (1/1) | ||
Drive | J.H. Axle Fuzz | JH.AxisFuzz | Volume | Drive | ||||||
Drive | J.H. Super Fuzz | JH.SupaFuzz | Volume | Filter | ||||||
Drive | J.H. Octave Fuzz | JH.Octavia | Level | Fuzz | ||||||
Drive | J.H. Fuzz Zone | JH.FuzzTone | Volume | Attack | ||||||
Modulation/EQ | J.H. Legendary Vibe | JH.VoodooVibeJr | Speed | Sweep | Intensity | Mix (Vibrato/Chorus) |
When in AMP mode, the firmware can be updated Over-the-air by using a web interface. In order to enable this, you need to rename the file Credentials.h.template
to Credentials.h
and enter your WiFi SSID and password before compiling the code. Once installed manually for the first time, subsequent firmware versions can be uploaded by opening a web browser and connecting to http://Ignitron.local and uploading the compiled Ignitron.bin file. The Ignitron should restart automatically after the upgrade finished successfully.