Bluetooth LE MIDI Controller
You will be redirected back to this guide once you sign in, and can then subscribe to this guide.
Get Arduino IDE
For this project you will need version 1.6.X of the Arduino IDE with the Adafruit Arduino Board Manager proxy added to your Arduino preferences. If you haven’t configured the proxy yet, check out our guide on setting up your Arduino IDE to use the proxy.
Install Libraries
You will need to install a few things using the new Arduino Library and Board Managers. First, open up the Arduino Library Manager under the Sketch->Include Library menu. Select the Manage Libraries. item from the menu.
You will need to use the search box to find and install these three libraries:
Install Adafruit AVR Boards
You’ll need to installthe Adafruit AVR boards to add support for the Adafruit Feather 32u4 Bluefruit LE. Open the Arduino Boards Manager under the Tools->Board->Boards Manager. menu item.
Use the search box to find and install the Adafruit AVR boards.
Select Feather Board
Next, select the Adafruit Feather 32u4 board in the Tools>Board menu. Then, under the Tools->Port->Serial ports menu, select /dev/cu.usbmodem (Adafruit Feather 32u4).
Run Example Sketch
OK, now it’s time to open the example sketch and upload the code to the Adafruit Feather board. Select nble_neopixel_mpr121 under the File->Examples->FifteenStep menu. Then, click the upload button
If everything goes as expected, you will see a Done Uploading message at the bottom of the window.
This guide was first published on Feb 15, 2017. It was last updated on Jul 15, 2016.
This page (Software) was last updated on Jul 15, 2016.
Your browser does not support the video tag. This links to the guide Glowing Bottle Castle and Capacitive Touch Piano.
Your browser does not support the video tag. This links to the guide NeoPixel Matrix Snowflake Sweater.
Your browser does not support the video tag. This links to the guide NeoPixel LED Necklace Insert with USB Charging.
Your browser does not support the video tag. This links to the guide 3D Printed Daft Punk Helmet with Bluetooth .
Your browser does not support the video tag. This links to the guide Getting Started with MyoWare Muscle Sensor.
Your browser does not support the video tag. This links to the guide Green Goblin Pumpkin CPB Ornament.
OUT OF STOCK NOTIFICATION
You have been successfully subscribed to the Notification List for this product and will therefore receive an e-mail from us when it is back in stock!
For security reasons, an e-mail has been sent to you acknowledging your subscription. Please remember that this subscription will not result in you receiving any e-mail from us about anything other than the restocking of this item.
If, for any reason, you would like to unsubscribe from the Notification List for this product you will find details of how to do so in the e-mail that has just been sent to you!
Bluetooth LE MIDI
This is for MIDI over Bluetooth. There’s also a module for Wired MIDI.
Bluetooth Espruino devices like Puck.js can be programmed to appear as any type of Bluetooth LE device, and this includes a Bluetooth LE MIDI controller.
Joe Bowbeer and George Mandis did the original work on this. However it’s now been converted into the ble_midi (About Modules) module to make it easier to use.
You can simply use the module as follows:
var midi = require("ble_midi"); midi.init(); setWatch(function() < // When a button is pressed. digitalPulse(LED,1,10); // midi.send(channel, controller, value); midi.send(0, 60, 100); >, BTN, < repeat:true, edge:"rising", debounce:10 >);
Then when you next connect to your Puck.js device it will be treated as a MIDI instrument. When you press the button, a MIDI command will be sent using the send function.
You can then even use the Web MIDI APIs to receive the MIDI data inside a web page!
Note: Because of the way advertising data is modified to allow the long BLE UUID to be transmitted, this will change the name of the Puck.js device to PuckCC .
Note: You may require a Mac for this work automatically.
midi.send sends a ‘control change’ command. Often you’ll want to send a midi.noteOn(0,note,velocity) or midi.noteOff(0,note,0) command instead.
Receiving MIDI
When notes are sent to the midi device, the raw MIDI message is output in midi event which you can handle with midi.on(‘midi’, . ) .
The example below echoes received MIDI events back one 5th higher, as well as lighting LED3 if the note sent has any velocity value.
var midi = require("ble_midi"); midi.init(); midi.on('midi', function(data) < var cmd = data[2] & 0xF0; // command var chn = data[2] & 0x0F; // channel switch(cmd) < case 0x80: // noteOff case 0x90: // noteOn var num = data[3]; // note number var val = data[4]; // note velocity if (val) LED3.set(); else LED3.reset(); midi.cmd(cmd+chn, num+7, val); break; >>);
Reference
Channels sent to these functions are zero-based, so channel 0 in a function call actually represents channel 1 .
// Turns the device into a MIDI controller exports.init = function () < . >// Sends a raw MIDI command exports.cmd = function (cmd, d1, d2) < . >// Send a 'control change' (0xB0) MIDI command exports.send = function (channel, controller, value) < . >// Send a 'note on' (0x90) MIDI command exports.noteOn = function (channel, note, velocity) < . >// Send a 'note off' (0x80) MIDI command exports.noteOff = function (channel, note, velocity)
This page is auto-generated from GitHub. If you see any mistakes or have suggestions, please let us know.
© 2017 Pur3 Ltd (Printable Version) π
Bluetooth LE MIDI Controller
You will be redirected back to this guide once you sign in, and can then subscribe to this guide.
In this guide, I’ll show you how I built this strange looking MIDI controller. It doesn’t look like your typical drumpad or keyboard, but it does have similar functionality just like any standard MIDI controller. It features six capacitive touch pads that trigger MIDI notes. Tap one of the pads, and it plays a note. It also features a step sequencer so you can record and playback a pattern. The 16 NeoPixel ring displays a glowing dot for each step which also follows the beat of a given tempo. It can also change settings, such as pitch, tempo, shuffle, length, velocity and even MIDI channel.
This project is based off of Todd Treece’s Capacitive Touch Drum Machine. Todd’s project uses an Arduino, MPR121 touch capacitive sensor and a strip of 16 NeoPixel LEDs to make a simple drum machine that you can use to control MIDI devices and virtual instruments. This project is built on top of that sketch and adds BLE connectivity. The future is here!
The Feather 32u4 Bluefruit LE features the NRF51 chipset which supports Bluetooth low-energy. This means it can act like a HID keyboard, or in our case, send and receive MIDI notes over BLE. The MPR121 capacitive touch sensor features touch detection, so we can connect conductive materials to it. The Feather listens for any touches from the capacitive touch sensor and sends MIDI notes whenever a pin is pulled low or high.
3D Printed or CNC Milled? If you want to build this project, you have the option of 3D printing the capacitive touch pads using conductive PLA or CNC mill them out of conductive material like 6061 aluminum. The choice is yours! I tried both, and I really like the look and feel of aluminum capative touch pads.
If you don’t like the look of this project, but you still like the idea of building your own MIDI controller, you can re-use the code, components and circuit diagram to base your own MIDI controller from. Instead of using a NeoPixel ring, go for a strip. Or fabricate your own. Don’t like the shape or material of the pads? Make your own! Use copper foil tape, bare conductive paint or any electrically conductive material (how about fruits?).
If you want to build this project, I suggest you walk through the following guides below to get a better understanding of the components and libraries.
I used the following parts to build this project.
You’ll need the following tools and supplise to build this project.
- Soldering Iron & Solder
- Tweezers
- Panavise Jr.
- Third Helping Hands
- Copper Foil Tape
- Heat Shrink Pack
- 30AWG silicone cover wire
- Wire Strippers
- Diagonal Flush Snips
- Conductive PLA (for 3D printing touch pads)
- 4x 4-40 3/8 (or M3 — .5) machine screws
This guide was first published on Feb 15, 2017. It was last updated on Jul 15, 2016.
This page (Overview) was last updated on Jul 15, 2016.