MIDI is a standard known by musicians and instruments all over the world. The basic twist on regular serial has helped studios around the world to work more efficiently. [Kevin] wanted to try sending MIDI data wirelessly, but rather than the typical Bluetooth solution, decided to use the humble nRF24L01 instead.
The circuitry used is simple: [Kevin] simply wired up two Arduino Unos with nRF24L01 radio modules, which communicate over SPI. Alternatively, an even quicker solution is to use a Keywish Arduino RF Nano, which packs a nRF24L01 on board. One Arduino can then be hooked up to a MIDI OUT port on an instrument, and it will send out MIDI signals wirelessly. The second Arduino can then be plugged into a MIDI IN port and repeat out what it receives over the air.
The real work was in the firmware, which takes MIDI data and packages it in a suitable form to send out over the nRF24L01. The system can operate in a one-to-one mode, emulating a single MIDI cable, or a multicast mode, where one sender transmits information to many receivers.
It’s a neat hack and one we could imagine would be useful in some fun performance situations. We’ve seen others do work on wireless MIDI interfaces for Eurorack hardware, too. Video after the break.
I worked on a similar project with USB-midi dongles (some cheap WCH based ones were unreliable) connected to an openwrt router:
https://github.com/ZyreApps/DeMidi
So that several pianos could play at the same time, connected to a Linux PC with a synthetizer:
https://mobile.twitter.com/zeromq/status/693153922270232578
https://mobile.twitter.com/zeromq/status/693153578438004736
I made a wireless midi transmitter using esp32 and it’s espnow library.
Need to make a board on kicad…would only take a weekend and then a couple weeks from jlcpcb.
https://github.com/physiii/wireless-midi
Cool. What is the latency on this hack?
There is some discussion in the linked blog post, especially in “part 2”. In short, if everything is working well, it seems pretty good!
But it is very dependent both on having a good, reliable link between nodes (that isn’t ever broken) and having all nodes replying with acknowledgements in good time. Basically it can run with no acknowledgements or retries in a “fire and forget” mode, and assuming the data gets through, it is very timely, but you will lose messages from time to time. Or it can run with auto-acknowledgements and retries, but if there are problems, the stream gets held-up until it has managed to successfully send. The actual sending protocol is very inefficient at the moment, so that needs to be sorted out too which will improve things a little.
There are many trade-offs if someone goes this route, and it isn’t a particularly reliable channel at the moment. It is experimental, and mostly a “bit of fun”, but do feel free to have a play and let me know how you get on.
In summary, it largely works, but I’ve found nothing here to invalidate this comment from https://opguides.info/music/midi/:
“Look, I’m not going to say you can’t do wireless or networked midi. You definitely can. It’s just that there’s always something that goes wrong.”
:)
Kevin
Hi ! I’m glad I found this project. I find it fantastic. Please help me. I ordered two nano-rf. I want to use midi tx and midi rx with 5 pin serial. No usb. Thanks
Well, hopefully everything you’ll need is in the linked blog post… if you get stuck I suggest comment there!
Good luck.
Kevin