You Can Send MIDI Over I2C If You Really Need To - Hackaday
Maybe your like
The Musical Instrument Digital Interface has a great acronym that is both nice to say and cleanly descriptive. The standard for talking to musical instruments relies on a serial signal at 31250 bps, which makes it easy to transmit using any old microcontroller UART with a settable baud rate. However, [Kevin] has dived into explore the utility of sending MIDI signals over I2C instead.
With a bit of hacking at the Arduino MIDI library, [Kevin] was able to get the microcontroller outputting MIDI data over the I2C interface, and developed a useful generic I2C MIDI transport for the platform. His first tests involved using this technique in concert with Gravity dual UART modules. After he successfully got one running, [Kevin] realised that four could be hooked up to a single Arduino, giving it 8 serial UARTS, or, in another way of thinking, 8 MIDI outputs.
At its greatest level of development, [Kevin] shows off his I2C MIDI chops by getting a single Raspberry Pi Pico delivering MIDI signals to 8 Arduinos, all over I2C. All the Arduinos are daisy-chained with their 5V and I2C lines wired together, and the system basically swaps out traditional MIDI channels for I2C addresses instead.
There’s not a whole lot of obvious killer applications for this, but if you want to send MIDI data to a bunch of microcontrollers, you might find it easier daisy-chaining I2C rather than hopping around with a serial line in the classic MIDI-IN/MIDI-THRU fashion.
We’ve seen [Kevin]’s work before too, like the wonderful Lo-Fi Orchestra. Video after the break.
11 thoughts on “You Can Send MIDI Over I2C If You Really Need To”
-
MIDIBox did that before. I made this module: http://ucapps.de/mbhp_usb_pic.html Here’s my version: https://www.elektroda.pl/rtvforum/topic2435767.html It was designed to work with these modules over I2C: http://ucapps.de/mbhp_iic_midi.html I designed PCBs for them, but never got around to making them. As I never got around to making case for the MIDI-USB bridge. Maybe someday I’ll finish this…
Report comment Reply -
MIDI isn’t just for music. Google Don Lancaster MIDI and you’ll find a ton of non-music things to do with it.
Report comment Reply -
You can send MIDI even in morse code, or postman letter. Nothing new here.
Report comment Reply-
Somebody did the work so you don’t have to.
Report comment Reply-
Well I was printing out my MIDI messages, posting them and scanning them back in, but then I decided putting sheet music in the post had a better latency for keyboard playing, albeit with a bit of a delay as you had to batch the notes up and send them in one go to reduce jitter. Scanning it in was quite tricky on reception though, so eventually I cut out the “middle person” and got a musician to play it instead.
I have found that if you switch over to a full orchestral score, then the bandwidth is fantastic, especially for the price of a stamp, plus it has the added bonus you can read it on the train when you receive it. Getting an orchestra to decode it at the other end is left as an exercise for the reader…
(No, I don’t quite know why I sent MIDI over I2C either… but “just because” was a good enough answer for me :))
Kevin
Report comment Reply-
Never mind the negative vibes, Kevin! I enjoyed reading your article, especially since I was somewhat in the same boat some time ago and I could have used this solution and your enhancement of the 47 effects MIDI library. I had an Arduino Mega running the show, communicating with a Pi running QLC+. Also, some SPI display and a DMX-out needed to be driven and I was quickly out of usable IO on the Pi. Internal communication now goes over software serial on the Pi, less-than-optimal. I2C comms could have been useful!
Also, your experiments with nRF24+MIDI are an interesting read! As an accessory to the above project, I’m sending commands to up to 5 slaves, of which at least one of them translates the commands back to Program Changes and Control Changes. nRF packets of up to 32 bytes payload are more efficient than sending single MIDI bytes, as you have found out ;)
Report comment Reply-
Haha – yes! I need to optimise my RF24L01 layer… that is the next job :)
Thanks for your comments – that sounds like an interesting application.
Aside: I think I did see the MidiBox stuff, but it looked more like a non-MIDI intra-module link to me, sending messages specific to the Teletype, but maybe I was getting it confused with i2cmidi from here: https://github.com/attowatt/i2c2midi
Either way, PIC programming and custom PCBs is quite a long way away from simply messing around with an Arduino. And having it as a transport layer for the standard Arduino MIDI library makes routing applications fairly trivial.
But it is all very experimental. I wouldn’t attempt to use it for anything significant… maybe that would be the point at which to investigate MIDIBox more fully.
Kevin
Report comment
-
-
-
-
-
This is great! I’m thinking of using midi over i2c for a poor mans synthesizer stack project
Report comment Reply-
Great! Do drop me a line if you do it :)
But please do note my warnings about the experimental nature of the code and the limitations – especially around addressing and so on. Also I’ve not done any testing with anything else sharing the bus…
In short – do have a play and let me know how you get on, but please don’t rely on it for anything significant.
Kevin
Report comment Reply
-
-
Hi Kevin.
The Kikgen Labs did that 3 years before…You can stack until five STM31F103 to get a 16×16 In Out midi usb interface. Check the projet on Github. UsbMidiClick4x4
Report comment Reply -
The KikGen labs project is here : https://github.com/TheKikGen/USBMidiKliK4x4
Report comment Reply
Leave a ReplyCancel reply
Please be kind and respectful to help make the comments section excellent. (Comment Policy)
This site uses Akismet to reduce spam. Learn how your comment data is processed.
Search Search for: Never miss a hack Follow on facebook Follow on twitter Follow on youtube Follow on rss Contact us Subscribe If you missed it-
Creating User-Friendly Installers Across Operating Systems
8 Comments -
Ask Hackaday: Solutions, Or Distractions?
12 Comments -
PCB Design Review: TinySparrow, A Module For CAN Hacking, V2
9 Comments -
Belting Out The Audio
17 Comments -
Ore Formation: A Surface Level Look
9 Comments
-
FLOSS Weekly Episode 858: YottaDB: Sometimes The Solution Is Bigger Servers
No comments -
Why LLMs Are Less Intelligent Than Crows
45 Comments -
Keebin’ With Kristina: The One With The C64 Keyboard
1 Comment -
Linux Fu: The SSD Super Cache
12 Comments -
Hackaday Links: December 7, 2025
17 Comments
-
Creating User-Friendly Installers Across Operating Systems
8 Comments -
Ask Hackaday: Solutions, Or Distractions?
12 Comments -
PCB Design Review: TinySparrow, A Module For CAN Hacking, V2
9 Comments -
Belting Out The Audio
17 Comments -
Ore Formation: A Surface Level Look
9 Comments
-
FLOSS Weekly Episode 858: YottaDB: Sometimes The Solution Is Bigger Servers
No comments -
Why LLMs Are Less Intelligent Than Crows
45 Comments -
Keebin’ With Kristina: The One With The C64 Keyboard
1 Comment -
Linux Fu: The SSD Super Cache
12 Comments -
Hackaday Links: December 7, 2025
17 Comments
- Bob the builder on Creating User-Friendly Installers Across Operating Systems
- Piotrsko on Why LLMs Are Less Intelligent Than Crows
- Foldi-One on Failed 3D Printed Part Brings Down Small Plane
- anonymouse on Production KiCad Template Covers All Your Bases
- Eric on TinyCore Board Teaches Core Microcontroller Concepts
- Martin on TinyCore Board Teaches Core Microcontroller Concepts
- Elliot Williams on Bridging RTL-433 To Home Assistant
- David Kuder on Creating User-Friendly Installers Across Operating Systems
- El Gru on PCB Design Review: TinySparrow, A Module For CAN Hacking, V2
- Foldi-One on Failed 3D Printed Part Brings Down Small Plane
Tag » Arduino I2c Midi
-
Arduino I2C MIDI - YouTube
-
Get Midi Values To Print On An I2c Screen With Control Surface
-
How To Use 2 Arduinos Connected Via I2C With Midi-USB
-
Arduino I2C MIDI Interface – Part 2
-
Arduino I2C MIDI Interface - Simple DIY Electronic Music Projects
-
I2c2midi – A DIY Module That Translates I2C To MIDI - Tech
-
Lab: MIDI Output Using An Arduino - NYU ITP
-
How To Make An Arduino Sound Synthesizer With MIDI Interface
-
Simple DIY Electronic Music Projects - School And College Listings
-
MIDI Shield Hookup Guide - Sparkfun Learn
-
F8R 8 Channel Fader Bank With CV, I2C, And MIDI
-
Midi-clock · GitHub Topics
-
Arduino-nano · GitHub Topics