I was very fortunate enough to be made one of the prototype versions of Helen Leigh Steer/Imogen Heaps amazing Mini.mu gloves, it uses micro:bit to create a gestural controller and is aimed at getting younger people into the more fun/physical things that coding and tech can do. I’ve been pushing what this little, cheap product can do and have already had great success in connecting it up to physical instruments and puredata.
I struggled getting the micro:bits connecting via radio/serial and into puredata, I definitely couldn’t have managed it using the micro:bits blocks editor which is the easiest/user friendliest way to start coding. So, I found a work around which I thought would be useful for anyone else wanting to connect micro:bits to puredata.
This works with 2 micro:bits, communicating over radio, sending MIDI data into Puredata. This obviously limits you to the range of MIDI values, but is more than enough to get some really great results.
Head here for the code for the microbit connected to your computer: https://makecode.microbit.org/_4hFVXm4zRD85
And here for the code that goes on your gloves microbit: https://makecode.microbit.org/_imoPhUAvzeY5
Now, before you open up puredata, you’ll need two more small programmes to make this work. All the documentation for the MIDI library is in here, and it mentions the need for a bridge between serial and our midi devices, so Hairless MIDI is the first thing you need. This converts incoming Serial data into MIDI packages. The second thing you’ll need is loopMIDI, which is a brilliant programme that acts as a virtual connection for MIDI devices. I use this one to make PureData and Reaper talk to each other too.
So, your two other programmes will look like this:


So, now you have all this set up, you can open up puredata, select loopMIDI as a MIDI input device and use [notein] as your method of recieving data.
With each sensor sending data via a different midi channels, you can seperate all the incoming data using the [notein 1] or [notein 2] objects.
Obviously, you can do whatever you want with the incoming data, and I’ll be posting a few more complex patches soon (once I’ve made them) showing the potential of mini.mu and puredata.
Here is my most recent PureData patch that uses only the glove to control step sequencers, sample playback length and starting position and basic controls like tempo/loop length.
NOTE/UPDATE:
There may be some other issues with connecting things together if you’re on not Windows 10 or on Macs, but thanks to Neill Bogie, there may be work arounds:
Instructions for mac users (LoopMIDI is windows-only, so mac users must enable their IAC Driver):
https://gist.github.com/nbogie/309848134aede2e57ee80a4b752b0294#file-mini-mu-to-pd-on-mac-mdWindows versions prior to windows 10, users will first need to install the mbed windows serial port driver before Hairless MIDI Bridge will see the microbit as a COM port, following these instructions: https://os.mbed.com/docs/latest/tutorials/windows-serial-driver.html … (Making sure to have the microbit connected during install). Source: microbit support https://support.microbit.org/support/solutions/articles/19000022103-how-do-i-use-the-serial-port-with-a-micro-bit-on-windows
Also, for windows versions prior to windows 10, users will first need to install the mbed windows serial port driver before Hairless MIDI Bridge will see the microbit as a COM port, following these instructions: https://os.mbed.com/docs/latest/tutorials/windows-serial-driver.html … (Making sure to have the microbit connected during install). Source: microbit support https://support.microbit.org/support/solutions/articles/19000022103-how-do-i-use-the-serial-port-with-a-micro-bit-on-windows
Here are some alternative instructions for mac users (LoopMIDI is windows-only, so mac users must enable their IAC Driver):
https://gist.github.com/nbogie/309848134aede2e57ee80a4b752b0294#file-mini-mu-to-pd-on-mac-md Feel free to integrate these into this tutorial however, if you want.
Going further:
Looking again at the makecode MIDI library docs, there’s a nice way to set up client and bridge so that you can just write MIDI code on the client (glove) microbit(s) and not have to keep changing the bridge when you want to add more aspects to the stream of data.
I’ve broken it out into separate programs.
This goes on your bridge microbit:
https://makecode.microbit.org/_bVdR919toUD3
and then use the following as a starting point for your glove microbit(s):
https://makecode.microbit.org/_gpC7fsikRbEW
… then you can simply call ANY of the MIDI functions from the glove microbit, and they’ll be forwarded directly to serial by the bridge microbit, with no further changes necessary to the bridge microbit!
For the curious: the grayed out code in the start block is essential on the glove microbit. It says: hey midi library, whenever you get told to do midi stuff, I actually want you to send the message over radio! The reason it is grayed is that it’s (necessarily) written in a form of javascript that can’t currently be broken down into blocks. But it is still run by the microbit, so don’t delete it!
Anyway, this should speed up prototyping a LOT!
Thanks for sharing. It is very helpful!
Do you know if it is possible to send data from puredata to microbit in order to control a servo?
That is an interesting question! I’m sure there is a way but I have not looked into it. What sort of project are you planning? There may be a simpler method already tried and tested.
You commented about being limited to certain values with the radio. I’ve not seen this mentioned anywhere else. Could you elaborate?
I couldn’t find a way to send more than one value per MIDI Channel. Strictly speaking MIDI was never designed for this kind of communication, so my way of connecting microbit to puredata is a bit hacked together!
BUT, you can have multiple MIDI channels on one microbit sending different sensor data. So it is possible to have pitch and roll and buttons and all sorts being sent.
Does this have to do with the size of the data packets?
Nope. Not at all. MIDI is designed for simple musical communication so just isn’t designed to handle more than a few basic messages. Serial data would be way better to handle this but I didn’t have time to figure out the puredata side of that. OSC would probably work nicely too but again, i didn’t have time and it would involve more in depth coding.
I’m thinking about ways to use this in an educational setting. I’ve just spent a few hours with the microbit so there is still more to discover. Having the control input split across multiple channels would probably work ok in Pure Data. though OSC would be simpler to process in PD.
You can have multiple microbits sending info into one PD patch too. Which is useful for groups of people.