Creative Commons images are CC BY-NC-SA 3.0


added to your
shopping cart

In stock 50 in stock
19.95 1+ units
17.96 10+ units
15.96 100+ units

Description: The MIDI Shield board gives your Arduino access to the antiquated, but still widely used and well supported MIDI communication protocol, so you can control synthesizers, sequencers, and other musical devices. The MIDI protocol shares many similarities with standard asynchronous serial interfaces, so you can use the UART pins of your Arduino to send and receive MIDI's event messages.

The MIDI Shield provides an opto-isolated MIDI-IN port as well as a MIDI-OUT port. The MIDI Shield can be mounted directly on top of an Arduino, connecting the MIDI-IN to the Arduino's hardware RX pin and the MIDI-OUT to TX. Potentiometers are connected to analog pins 1 and 2, and can be used to control volume, pitch, tone or anything else you'd like. Also connected on the shield are three momentary push buttons (connected to D2-4), a reset button, and green and red stat LEDs. The RUN/PROG switch allows you to program the Arduino over serial without having to remove the shield.

Note: The MIDI Shield does not come with the through-hole MIDI connectors or trimpots soldered on. All of these components (2 MIDI connectors and 2 trimpots) are included with the product, however

Note: When using this shield with the Arduino Pro you will have to bypass the TX/RX resistors on the Pro to get enough current to the shield.


Comments 57 comments

  • hi folks, might I be able to add this to a makey makey so I can use the makey as a midi controller ? thanks, bd

  • Any chance of an update to the example sketch that runs under arduino_1.0?

    • replace

      void Midi_Send(byte cmd, byte data1, byte data2) { Serial.print(cmd, BYTE); Serial.print(data1, BYTE); Serial.print(data2, BYTE); }


      void Midi_Send(byte cmd, byte data1, byte data2) { Serial.write(cmd); Serial.write(data1); Serial.write(data2); }

  • Does this come with the headers for the Arduino board or no?

    • Just got this kit. Apparently it doesn’t come with header pins. This would have been really nice to know so I could have ordered some with it.

      • I ordered the shield with headers for a breakout board, apparently I was lucky to get enough headers for both the shield and the breakout board, which is a couple more than charged, thanks Sparkfun! The desctiption should specify that headers are not included though. Seems like we humans tend to think headers are included :)

  • There’s a typo in this. Where it says “antiquated, but” - that should say “brilliant, and” k thnx

  • Can we add something like a button array to it ??

  • Pin 2 on the MIDI Out connector should be connected to ground per the MIDI Hardware Specification.

  • Gah! No plans to make any more?!?! Sad!

    This was a cool unit. I bought one a couple years ago and have used it in several projects. I finally wrote up a description of one of my projects (a MIDI Clock to Trigger converter, see: and came back to this page so that I put a link from my page to Sparkfun’s product. That’s when i see that you don’t make it any more.

    Say it ain’t so! Make a comeback Sparkfun MIDI Shield!

  • Whats the maximum current output from these ? About 60mA?

    We want to use these to drive relays

  • Just curious, why no isolation on the MIDI-OUT port?

  • Just as a warning to others who might make the same mistake I did: for whatever reason, the Arduino designers decided to use a different spacing between the different groups of .1" headers other than .1". This means you can’t take a shield and plug it into a breadboard in order to use it with a non-Arduino micro-controller. Very unfortunate design choice (deliberate or otherwise).

    • Legend has it that when the first Arduino was made, those headers were supposed to be on 0.1" centers; but there was a layout mistake that went unnoticed until the first boards arrived, and now it’s the “standard” so it can’t be fixed.

      Because of this situation, we do have this handy part that might help you in your quest.

  • I stupidily soldered it with male headers… What should I do?

    • If you are trying to remove the headers, just use a desoldering iron. Not expensive. Seems to work better than a solder sucker for unsoldering repeatedly.

  • Would be fine to have a “delete post” button btw.

  • Just posted some basic code on bitbucket to pipe MIDI from this shield straight to the Music Instrument Shield, using a Leonardo and a little pin re-wiring (moving the buttons to 8,9,10, to avoid conflict). Makes a cheap (~$75), no-frills, hackable midi sound module.

  • What’s the license on the example sketch?

  • Trying to get MIDI input to work with this shield on an UNO V3 board. I’m kind of new to this, so guessing it could be something really simple. MIDI output is working fine. MIDI input just seems to be dead. Assuming it could be a bad solder joint, but everything looks good.

    What I need to know is:

    • Is there a simple sketch I can use to test MIDI input on this shield?

    • What pins should I test with my meter to validate my connections? I get a positive reading if I test Pin4 on my MIDI Out against the TX line from the shield - should I get the same on Pin4 of my MIDI In against the RX line (I don’t)?

    • What does the RUN/PROG switch do? My MIDI Out tests work in either mode.

    • Quick update: I used the code found in the link below to test MIDI input: *

      though I added a simple led 13 blink routine to the ‘if (Serial.available())’ loop, as well as one in the startup. When I upload the code in PRG mode, I see the initial startup blink routine (5 slow blinks), but nothing when I try MIDI input (still in PRG mode). Of course, when I switch to RUN mode, the LED blinks continuously and rapidly.

      I’ve uploaded other simple non-MIDI routines (simple LED blinks) that appear to work fine in both PRG or RUN modes.

      • Is there a potential problem with the shield?
      • Should I see any activity on the MIDI shield LEDs? How do I even access/program the MIDI shield LEDs?
  • We’ve developed a compatible USB Shield. Take a look at

  • I’m not familiar with processing code, and I’m finding it very hard to figure out what’s going wrong with the provided “example sketch”. Can anyone provide an example sketch that is 1.0.2 compliant?

  • I have the same problem with mayhem9 {Example Sketch does not seem to be 1.0 compliant: Midi_Shield.cpp: In function ‘void Midi_Send(byte, byte, byte)’: Midi_Shield.pde:-1: error: ‘BYTE’ was not declared in this scope As of Arduino 1.0, the ‘BYTE’ keyword is no longer supported. Please use Serial.write() instead.} There is no way I can work with this shield. Anyone any thoughts?

    • It’s pretty much a direct substitution. IE Change ‘Serial.print(cmd, BYTE);’ to ‘Serial.write(cmd);’ etc. For example, ‘Serial.write(0x90); Serial.write(0x24); Serial.write(0x7F);’ sends note-on for a low ‘C’ at max velocity.

  • Hi. When I mount the shield onto the Arduino board, the power cuts out, and I lose my com port to connect. When I remove the shield, power comes back on and I can connect to the board (but not using shield). Help!

    • Have you checked for solder bridges? A multimeter with a continuity beeper is my favourite way, but just a multimeter set to the lowest resistance scale works.

  • Would this hardware be compatible with a 3.3V device like a LeafLabs Maple or one of the 3.3V Arduinos?

    • To partly answer my own question, the schematic is mostly free of active components (meaning it would work at 3V) except for the optoisolator. Looking up that part number, it looks like it should work fine at 3V. Great. I would love to get some confirmation, though.

      • I tried the MIDI shield with my Maple. After a bit of fiddling, it seems to work fine. Good. note that I’ve only used it to receive MIDI messages from my keyboard. That worked fine. I have not tried to send MIDI messages.

  • Can someone please change the description above? MIDI is not a powerfull protocol. At all. In fact, it is realy crappy and pretty stupid/simple. It has been around since the ‘70s because all the synth manufacturers could/can not decide on a common standard(!! boohoo) For the last 20 years or so there have been many attempts to bring synth communication to modern levels but all have failed because of propietryness. And that is why MIDI is still relevant. It is a sad story realy.

  • Example Sketch does not seem to be 1.0 compliant:

    Midi_Shield.cpp: In function ‘void Midi_Send(byte, byte, byte)’: Midi_Shield.pde:-1: error: ‘BYTE’ was not declared in this scope

    As of Arduino 1.0, the ‘BYTE’ keyword is no longer supported. Please use Serial.write() instead.

  • I bought the Midi Shield I use with the new Uno. It works fine when connected to my keyboard. I encounter some problems using the push button, probably because of their ‘no state’ when not pushed (no resistor to the Vcc).

  • These colorful buttons fit perfectly on this kit.

  • Sparkfun, I’m concerned about safety of this shield. The ground pour extends on BOTH sides of the optoisolator to within a few tens of mils of pins. To maintain isolation between the MIDI device and the Arduino, there should be a few 100 mills separation. Ouch guys.

  • Hello. I’m hoping somebody can answer my questions. So far I’ve gotten the shield to send midi note on/off with the buttons anc control note number and velocity with the pots. I’d like to implement more midi features, but the sample sketch has no explanations for the midi functions it uses nor is there any info on the applet the sketch comes with. I’d like to use the Arduino MIDI Library v3.1 ( since it has an extensive Reference ( Questions: Will I need to always include the applet from the sample sketch on new sketches? Does the applet folder contain data that is required for the basic function of the shield? I’m new to all of this (except for having to use midi devices for years), so I could really use some advice. Thanks.

  • I’m trying to build a foot pedal that will allow me to send MIDI “note on” information to a sampler at fixed velocity (127, if 127 is maximum). The information would be sent when a momentary switch is pressed and will stop sending when it is released. I also want this pedal to be able to send the same information if a different MIDI note is needed, so I would be able to move up, say from note 1, to note 20, without changing the velocity. This would enable me to trigger different loops with my sampler with my foot throughout my set.
    With this MIDI shield would this be possible? Also, whenever I look, throughout the open source projects that people are making which use Arduino boards, no one ever mentions the board model they have used and there are quite a few!
    Basically I am trying to build a similar design to the Midi Mouse, of a similar size, but allows me to send MIDI note information, as the Midi Mouse doesn’t seem to (and anyway, is rather over-priced).

  • The schematics shows MIDI out connector pin 4 wired to the TX pin on the Arduino, pin 5 wired to Vcc and pin 2 was left unconnected. While in the Arduino MIDI tutorial pin 5 is connected to TX, pin 4 to Vcc and pin 2 to ground. Someone knows why?

    • There are two things going on here. Sparkfun’s parts library is usually excellent, but the person who did the MIDI connector (Din 5) really messed it up this time. Most pins are mislabeled - what they call 4 is actually 5 and what they call 5 is 4. Also pins 1, 2, and 3 are switched around. As for pin 2 - I think they just forgot to connect it to ground (they tried to fix this with the MIDI Breakout, where pin 2 is connected to ground, but because of the part mislabeling they actually grounded the wrong pin!)

  • midi works at a non standard baud rate.. how do you set things up to get that baud rate?
    change crystal on the arduino?

    • You do not have to make any hardware changes. Just initialize the serial port with the correct baud rate:
      Make sure that you turn the on-board switch to “PROG” when you upload your code and to “RUN” when you are done uploading.

  • Real easy to use, works flawlessly! Soldering on the MIDI connectors is a snap. As noted, headers are not included, need to order those separately. The board includes some extra LEDs (the blinking lights in my application surprised me.. :) ). There’s 2 pots and 3 push buttons which are all optional, works fine without those soldered in.
    One note: You might want to disconnect the MIDI cable when programming the device, it looks like there’s some bytes sent out to the MIDI OUT (even with the little switch set in PROG) that arrive at connected MIDI gear. My patch bay gets in a weird state whenever I upload a new sketch.
    (Not related to the product, but The MIDI example in the Arduino software (0021) has a space missing in the for statement in line 32, after int there should be a space.)

  • I have this board. But I was hoping I could decode the midi and send the information via the TX pin or any of the D2-D13 pins. Looking at the Arduino Sketch provided, how could I use the Midi In and sending information via these pins.
    Any help or tips is appreciated

  • So then is there a way to program the arduino to act as a class compliant midi interface over USB? This could then pull double duty talking to MIDI, and carrying it back to the pc.

    • Unfortunately, no. It’d require some sketchy driver hacking, which has to be done on every system that you want to use the device with. The problem lies in the fact that the FTDI chip on the Arduino uses the USB port as a pseudo-Serial port, not a USB port. I hear the Teensy works well for USB-MIDI, though.

  • Nice. Any chance we could get a DMX version of this?

Related Products