Zoom USB-Protocol Documentation (control zoom pedal via USB by arduino?)

Discussion in 'Testimonials & Suggestions' started by Sascha41, Dec 18, 2019.

  1. Sascha41

    Sascha41 New Member

    I am a new user of a zoom G1on pedal - it is a great little device. With the Tonelib Zoom software editing of effects is really a joy.

    I wonder if might be possible to connect a microcontroller (like an arduino nano) to the usb-port of the zoom-pedal to switch and control effects? Is there any documentation available for this purpose? Maybe one could even implement something like tap-speed..

    Kind regards, Sascha
    ted209 likes this.
  2. Sascha41

    Sascha41 New Member

    just did some further investigations.. As some might already know, USB-connection is possible and communcation is done with midi-commands (sysex), there have been also projects in the past to do this with arduino like the first one I found:

    What you need is an arduino and an USB-host, and of course the midi commands for communication. There had been several projetcs like this, mostly for Zoom Multistomp, like MS-70, e.g.:

    The best documentation so far I have is from this place:

    Unfortunately Arduino itself cannot be used as USB-host, additional hardware is required. But one could do it with other microcontrollers like Adafruit Trinket M0 (for around 10e)
    USB-host library:

    The other "cheap" solution would be to use a Raspberry Pi Zero (5€ - 15€), which has USB-host capabilities and supports USB-midi communcation.

    I'm not sure which road to go. Any thoughts on this or other hints?

    Season greetings! Sascha
    ted209 likes this.
  3. Synmehdi

    Synmehdi New Member

    Hello Sascha,
    This is great, I hope I can test it with the gce-3 to make it be standalone through an android app. Will dig up into it.
  4. shooking_sybase

    shooking_sybase New Member

    I am using a Raspberry Pi4 - to test at least. Will likely then drop down to the Pi3 because I have one lying around.

    I ported Ctrlr to RPi a while back (you can find details on their forum). So Pi3 should be able to use Ctrlr to do what you like.
    Alternatively sitting infront of my Pi now, a normal USB -> microUSB connecting to my Zoom G1XFour

    pi@raspberrypi:~ $ lsusb | grep -i zoom
    Bus 001 Device 016: ID 1686:04a1 ZOOM Corporation

    pi@raspberrypi:~ $ amidi -p "hw:2,0,0" --send-hex "b0 20 00 c0 09"
    turn to preset 19
    pi@raspberrypi:~ $ amidi -p "hw:2,0,0" --send-hex "b0 20 01 c0 00"
    turn to preset 20
    pi@raspberrypi:~ $ amidi -p "hw:2,0,0" --send-hex "b0 20 01 c0 01"
    turn to preset 21

    pi@raspberrypi:~ $ amidi -p "hw:2,0,0" --send-hex "f0 7e 00 06 01 f7" -r p1

    15 bytes read
    hexdump -C ./p1
    00000000 f0 7e 00 06 02 52 6e 00 0d 00 32 2e 30 30 f7 |.~...Rn...2.00.|

    so sending f0 7e 00 06 01 f7 (who the **** are you???)
    replies "6e" ie Zoom G1FourX

    Ok now I replace with my Zoom B1Four X
    pi@raspberrypi:~ $ hexdump -C ./p1
    00000000 f0 7e 00 06 02 52 6e 00 0f 00 32 2e 30 30 f7 |.~...Rn...2.00.|

    ah notice - so
    Zoom G1X Four == 6e 00 0d
    Zoom B1X Four == 6e 00 0f
    Interesting - so I was getting the ID wrong thiking it was 6e ...

    Anyhow use a RPI they are dirt cheap, maybe by now someone has officially ported Ctrlr to pi but it not standard amidi can play the Sysex or CCs. And the fact I get a response in the -r shows the Zoom can send the data back if it wasnt to.

    But for sure you can send remote commands to it - add some buttons via a GPIO or use a touchscreen and GUI on the Pi to send commands - not so worried about state of the pedal - it should be what my touchscreen tells it to be!
  5. wt.neto

    wt.neto New Member


    I use a footswitch with midi out, one Zoom Ms50g and one Zoom G1 four. Between then I have a raspberry pi3 B+ with Alsa connections that allows the footswitch to change patches in boots Zooms. Works fine. The command out is sent to both Zooms, so both changes at same time, but it´s not a issue for me.

    The GREAT problem is: the footswitch sends only PC and CC commands (the channel doesn´t matter, all work the same). With PC I can switch all patches in Ms50g, but only ten patches 0 to 9 (with performs one bank). That´s a shame!

    I´d been doing some research and tried to send hex to G1 and found that the command send from the foot only delivers what is equivalent to the last 2 digits of a hex.


    In Ms50g I can send PC01 to PC50, what seems to be what the foot does, everything works!

    In G1four I can send only PC01 (B02000C001 in hex) to PC09 (B02000C009) in order to change path 10 to 19. To move forward I need to send B02001C001 to B02001C009 to change 20 to 29 and so on.

    What I need?

    I need a translator (running without user interactions) and a script in raspberrypi that could read a PC20 to PC50, translate and send the proper hex, in this case B02004C001 to B02005C001, to G1. This translator cannot translate messages to Ms50, only to G1.

    Any ideas or suggestions on how to do it???
  6. shooking_sybase

    shooking_sybase New Member

    If you notice above I have how to send the PC
    pi@raspberrypi:~ $ amidi -p "hw:2,0,0" --send-hex "b0 20 00 c0 09"
    turn to preset 19
    pi@raspberrypi:~ $ amidi -p "hw:2,0,0" --send-hex "b0 20 01 c0 00"
    turn to preset 20
    pi@raspberrypi:~ $ amidi -p "hw:2,0,0" --send-hex "b0 20 01 c0 01"
    turn to preset 21

    Can you post details of what your non zoom pedal capabilities are? The make and model would help.

    I ported Ctrlr to run on Raspberry Pi 3 a while back. But I recently (on my YT) detailed one way you can build on a Pi4. They are quite cheap and a lot more capable than a Pi3. I WISH Atom would let me check in fix to main Ctrlr.

    Anyhow with Ctrlr the world is your lobster :)
    You could create some new buttons, read them via GPIO, write amidi like the above (10 LEDs an Inc / Dec to show the 10 banks. Let your midi pedal do the 1-10 or let it count to 100. Determine with another footswitch if you want to send to both Zoom. One or other ... The Pi can be made to do the right thing. Either from shell scripts (I give example on YouTube and will be checking them in soon to GitHub), python, ctrlr ...
  7. bigtopfrank

    bigtopfrank New Member

    hey, i know this is an older thread, but i signed up just to post here.

    i got a zoom gce-3 unit, and i've had some success getting midi changes to the device, thanks to a lot of hard work by others!

    using the usual zoom 'who the *** are you' command:
    F0 7E 00 06 01 F7
    you can get a response of:
    F0 7E 00 06 02 52 6E 00 10 00 31 2E 32 30 F7

    And sending program changes will change between the stored patches:
    C0 00
    F0 C0 00 F7

    i'm trying to figure out whether you can edit individual effects, but i haven't had much luck figuring that out so far. i'll post anything else i might find along the way.

    just thought i'd post what i'd found here, in case others are looking for a midi solution for the gce-3! my plan is to get a pi zero into the rig with some rotary encoders, even if it just selects the saved patches from guitar lab, without the ability to change effect parameters, that's still a pretty good solution for a portable pocket effects unit!

    oh, edit! - this is working with gce-3 firmware 1.20, untested with 1.00 as i upgraded it as soon as i got it, but it should.
  8. shooking_sybase

    shooking_sybase New Member

    hi please check out https://github.com/shooking/ZoomPedalFun for collection of other's work I found on related topic (Zoom Sysex)

    The Wiki has sections (https://github.com/shooking/ZoomPedalFun/wiki) on the B1On plus the B1XFour.

    There are links to my YouTube videos where I take people thru experiments on reverse engineering these pedals.
    To be fair I got stuck at the UI part - works well from command line but most GUIs have a blocking thread - midi is also blocking.
    So if you are controlling from a uController and displaying to an LCD it might work out better for you.

    My current plan is to get a decent tablet or old mini PC (uSFF) and use touchscreen with ToneLib - which works well with all of my pedals.
  9. bigtopfrank

    bigtopfrank New Member

    That's a great help, thanks shooking. Some links in your git I hadn't found yet.

    Played around a bit more just now and it seems the GCE-3 responds to parameter changes exactly the same as the G1four (so far, anyway).

    I'll have a bit more of a play in the next few days and see what I can come up with. Be happy to help with your project in anyway I can too, I'm thinking of my pi set up a little differently to yours, because unfortunately ToneLib doesn't work with the GCE-3 yet. Fingers crossed it might soon. It seems it should pretty easily if it's set up the same way as other zoom pedals.
  10. shooking_sybase

    shooking_sybase New Member

    For sure I would LOVE to just use the Pi4 and Iiyama touch screen. The way the Zoom "interacts" seems to mean making a state machine for Ctrlr - and this was proving tricky.

    My rationale for the ToneLib is simply a cheap tablet or a cheap Celeron type PC (or i5 uSFF) would interface with the Touchscreen then it just works.

    Funnily enough I am looking back that the B1On right now ... I couldnt quite work out how to send FX change. Gonna give it another try.

    What is a GCE-3? And external interface? I forgot to add the program change into wiki for G1XFour. People were asking about it.
  11. bigtopfrank

    bigtopfrank New Member

    Yes, an external interface/hardware DSP processor with all the patches and effects from the G3, G5n G1four, B1 and A1. But I bought it as a portable pocket amp, as there's been a gap in the market for years.

    It's actually quite a nifty little thing, but it has no buttons at all, so when playing away from the computer, plugged into a powerbank, it only plays the first patch that you had saved from guitar lab.

    It cops a lot of flack in reviews for being so non-interactive, but just adding a couple of buttons to it will fix that completely.
    Last edited: Jul 27, 2021
    shooking_sybase likes this.
  12. shooking_sybase

    shooking_sybase New Member

    Interesting. Well I suspect if you can ping unit to get device ID (for example B1On is 0x65) then one of two parameter change message might work.

    I have details of those messages on my github wiki.
  13. shooking_sybase

    shooking_sybase New Member

    So I got one (GCE-3) and started making videos here:

    As you said the GCE-3 identifies itself as
    F0 7E 00 06 02 52 6E 00 10 00 31 2E 32 30 F7
    6E 00 01 00 with 1. 20 firmware (I updated - as you also found the 1.0 was not so good)

    Anyhow in the above I show if you set it to the B1XFour mode then all the B1XFour command can be used to determine that complete state of the pedal. This is dynamite info.

    Today I was playing with it different modes.

    I will write up about the GCE3 on my wiki sometime next week

    The WICKED thing about these stand alone is they store the COMPLETE pedal.
    So as you said, B0 0x B0 20 Cy command can change the patches.
    The wiki shows how to change FX M's parameter N's value
    I show how to get ASCII decription of the parameters
    And the JSON gives the midi parameters (including max).

    I havent tried setting to some of the more esoteric modes (graphic equalizers) - I bet they have some funky fonts!

    On free tip.
    Not all modes behave the same.
    So a B1XFour has 50 patch (10 to 59) and these are MSB biases. IE 10 c0 ... c9 per bank. Use MSB to move to next 10
    But the G5 is odd ... 200 patches but LSB and 4 per slot (0 ...3). Not all pedals send LSB

    How do you know?
    Well use

    F0 52 00 6E 44 F7 - get me info about num patches and banks
    xx yy => yy * 128 + xx total patches
    xx yy
    nn per bank
    F0 52 00 6E 43 32 00 78 05 32 00 0A 00 00 00 01 00 00 00 01 01 00 00 00 00 00 00 00 00 F7

    So in the above 32 00 => 00 32 == 50 slots and 00 0A => 10 per slot (ie from a B1X mode)

    Once change as
    F0 52 00 6E 46 00 00 00 00 00 00 F7
    F0 52 00 6E 46 00 00 00 00 01 00 F7
    F0 52 00 6E 46 00 00 00 00 02 00 F7
    F0 52 00 6E 46 00 00 00 00 03 00 F7
    F0 52 00 6E 46 00 00 00 00 04 00 F7
    F0 52 00 6E 46 00 00 00 00 05 00 F7
    F0 52 00 6E 46 00 00 00 00 06 00 F7
    F0 52 00 6E 46 00 00 00 00 07 00 F7
    F0 52 00 6E 46 00 00 00 00 08 00 F7
    F0 52 00 6E 46 00 00 00 00 09 00 F7 <== 0A
    F0 52 00 6E 46 00 00 01 00 00 00 F7
    F0 52 00 6E 46 00 00 01 00 01 00 F7
    F0 52 00 6E 46 00 00 01 00 02 00 F7

    Where as B3n is like this:

    F0 52 00 6E 44 F7
    xx yy => yy * 128 + xx patches.
    xx yy
    nn in bank
    F0 52 00 6E 43 16 01 78 05 16 01 03 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F7
    01 16 = 128 + 16 + 8 == 150
    and 3 means 0 to 2 then bank is spent

    GC5 does apparently read patches in 3's
    F0 52 00 6E 46 00 00 00 00 00 00 F7
    F0 52 00 6E 46 00 00 00 00 01 00 F7
    F0 52 00 6E 46 00 00 00 00 02 00 F7 <= 03
    F0 52 00 6E 46 00 00 01 00 00 00 F7
    F0 52 00 6E 46 00 00 01 00 01 00 F7
    F0 52 00 6E 46 00 00 01 00 02 00 F7
    F0 52 00 6E 46 00 00 02 00 00 00 F7
    F0 52 00 6E 46 00 00 02 00 01 00 F7
    F0 52 00 6E 46 00 00 02 00 02 00 F7
    F0 52 00 6E 46 00 00 03 00 00 00 F7
    F0 52 00 6E 46 00 00 03 00 01 00 F7
    F0 52 00 6E 46 00 00 03 00 02 00 F7
    F0 52 00 6E 46 00 00 04 00 00 00 F7
    F0 52 00 6E 46 00 00 04 00 01 00 F7
    F0 52 00 6E 46 00 00 04 00 02 00 F7

    (the pedal is pulling in the patches at that point - I can decode B1On, B1X and might give these other pedals a go).

    I found a lot more - will be making more YouTubes/adding to my wiki.

  14. bigtopfrank

    bigtopfrank New Member

    that's all dynamite information, thanks shooking.

    seems like you've found a little bit more than i have, only one tiny thing i've found so far is the LSB and MSB for volume that is stored in patches. if you switch to edit mode, you can then control the patch volume, but i'm unable to find a global volume for the unit via sysex. [edit: nope, after watching your vid, you know this!]

    i've jazzed up a little webmidi interface so far, which is really buggy; for some reason with the gce-3 it disconnected from webmidi and stops responding, could just be that i haven't closed ports properly. but i've also started work on a single push-pull rotary interface with a pi zero and eink screen. that actually works pretty well so far, i'll more than likely throw my code on github at some point, but i'll let you know if i find anything that you haven't. (which i doubt!)
    Last edited: Aug 10, 2021
    shooking_sybase likes this.
  15. bigtopfrank

    bigtopfrank New Member

    i'm just halfway through that video, you've made some great headway, some great info in there! i didn't even think of looking at mungewell's code to see how it worked. seems you're pretty chuffed with the pedal - glad you like it - and i'm secretly glad i'm not the only person around who realises how adaptable these boxes can be!
    shooking_sybase likes this.
  16. shooking_sybase

    shooking_sybase New Member

    Pretty much decode the GCE-3.
    You can find a Python GUI to control it.
    You can use Mungwell's zoom-zt2 to add FX but I think there is a bug for A1XFOUR MDL (guitar models). On my code I have added in ability to add Looper and Rhythm.

    I will be adding in Rhythm control.
    I still need to work in the looper.

    Guitar Lab 7 now also seems to be able to recognise injected FX on GCE-3 and G5n.

    Oh I need to add in the "switch model". I know how to achieve it. But not added the specific code.

    If you plug any of modern "n" Zoom pedals or GCE-3 I work out the model and render.the needful. On a Pi4 with am Iiyama touchscreen monitor I can control the Zoom without having to bend over - tricky at.my age.

    I played G5n with B1XFOUR FX Plusnet me.acoustic A1XFOUR models last week - works well. Videos on my YouTube channel.

    Enjoy and call our any additional features you might want.
  17. Sascha41

    Sascha41 New Member

    regarding G1on and your work at GitHub:

    To understand how 1-controller works it is possible to get the sources of it when you download & install it:
    there is a file "G1.nw" which is a zip-archive of the sources.
    After unzipping one can find the interesting javascript-sources under "\app\includes\js"
    (functions.js, main.js, midi.js, settings.js)

    Maybe this could help ?

    Best regards, Sascha
  18. shooking_sybase

    shooking_sybase New Member

    Sounds promising @Sascha41

    I managed to work out how to read much more of the B1On ZDL. Bit busy at weekend but will try your suggestion - for sure i will be back. Worked outbhow to change the GCE-3. Even the rhythm ... just the looper now.

    For the most part I have been using my G5n either than coding it. Time to get back into the code.