# What is Web MIDI & BLE MIDI?

## Overview

https://youtu.be/NgIzSxTmQYA

## Musical Instrument Digital Interface

The MIDI protocol was created way back in 1983 as a way for musical instruments to communicate digitally. Still alive and well today, MIDI has been adapted to work with new hardware over the years, but the core language of MIDI remains unchanged - note on/off messages, controller values, etc.

![](https://cdn-learn.adafruit.com/assets/assets/000/066/489/medium800/bluefruit___ble_5pinDIN_USB.jpg?1543292305 5-pin DIN connector on the left, ubiquitous USB-A on the right)

For years, the venerable **5-pin DIN connector** was pretty much the only way to send MIDI messages between hardware devices, but that began to change when **USB-MIDI** was introduced in 1999. Today, USB-MIDI is by far the most common way to send MIDI messages (though DIN connectors have had a boutique resurgence of late). Beyond USB, MIDI has been adapted to other means of transport as well. Let’s take a look at two of them …

# What is Web MIDI & BLE MIDI?

## Web MIDI

![](https://cdn-learn.adafruit.com/assets/assets/000/066/379/medium800/bluefruit___ble_Screen_Shot_2018-11-23_at_9.19.36_PM.png?1543026060 Web Audio MIDI Synthesizer)

The [Web MIDI API](https://webaudio.github.io/web-midi-api/) was created to allow web applications to respond to MIDI controller inputs. In practical terms, this means a user with a MIDI keyboard can create music without specialized synthesizer or recording software installed on their computer. And it’s a two-way street - MIDI messages can also be sent from the web browser to MIDI-capable applications or devices attached to a user's computer.&nbsp;Currently, Web MIDI is [supported](https://caniuse.com/#search=web%20midi) by [Chrome](https://www.google.com/chrome/), [Opera](https://www.opera.com/), and Android web browsers.

With so many MIDI-capable hardware devices out there, Web MIDI further blurs the line between local & web applications. Moving beyond standard keyboard/mouse/touchscreen input, web authors can create experimental and accessible content that employs familiar musical interfaces.

```auto
function onMIDIMessage (message) {
    var frequency = midiNoteToFrequency(message.data[1]);
 
    if (message.data[0] === 144 &amp;&amp; message.data[2] &gt; 0) {
        playNote(frequency);
    }
 
    if (message.data[0] === 128 || message.data[2] === 0) {
        stopNote(frequency);
    }
}
```

Coding a **javascript** -based web app with Web MIDI support is similar to standard implementations in non-web environments.&nbsp; Check out [this tutorial](https://code.tutsplus.com/tutorials/introduction-to-web-midi--cms-25220) to get started.

## Links

- [Chrome Music Lab: Song Maker](https://experiments.withgoogle.com/song-maker)
- [Web Audio MIDI Synthesizer](https://webaudiodemos.appspot.com/midi-synth/index.html)
- [Web Audio Drum Machine](http://webaudiodemos.appspot.com/MIDIDrums/index.html)
- [Blokdust](https://blokdust.com/)
- [drum-machine (with source code)](https://glitch.com/~drum-machine)

Next, we'll look at how you can program a **Circuit Playground Express** &nbsp;to act a as a MIDI controller for **Web MIDI apps**.

# What is Web MIDI & BLE MIDI?

## Simple MIDI Controller

![](https://cdn-learn.adafruit.com/assets/assets/000/067/010/medium800/bluefruit___ble_CPX.jpg?1543888361)

You can interact with any Web MIDI app using a **Circuit Playground Express** programmed to function as a **basic MIDI controller**. This project uses the Circuit Playground Express's built-in **buttons** and **light sensor** to trigger **notes** and **modulation control**.

## What you'll need
### Circuit Playground Express

[Circuit Playground Express](https://www.adafruit.com/product/3333)
 **Circuit Playground Express** is the next step towards a perfect introduction to electronics and programming. We've taken the original Circuit Playground Classic and made it even better! Not only did we pack even more sensors in, we also made it even easier to...

Out of Stock
[Buy Now](https://www.adafruit.com/product/3333)
[Related Guides to the Product](https://learn.adafruit.com/products/3333/guides)
![A Black woman's manicured hand holds a round microcontroller with lit up LEDs.](https://cdn-shop.adafruit.com/640x480/3333-05.jpg)

### USB cable - USB A to Micro-B

[USB cable - USB A to Micro-B](https://www.adafruit.com/product/592)
This here is your standard A to micro-B USB cable, for USB 1.1 or 2.0. Perfect for connecting a PC to your Metro, Feather, Raspberry Pi or other dev-board or microcontroller

Approximately 3 feet / 1 meter long

In Stock
[Buy Now](https://www.adafruit.com/product/592)
[Related Guides to the Product](https://learn.adafruit.com/products/592/guides)
![USB cable - USB A to Micro-B - 3 foot long](https://cdn-shop.adafruit.com/640x480/592-01.jpg)

## Arduino IDE setup

Follow the [steps on this page](https://learn.adafruit.com/adafruit-arduino-ide-setup/arduino-1-dot-6-x-ide) to download and **install** the **Arduino IDE & support for Adafruit boards** on your computer. Then install support for the Circuit Playground Express by [following the steps here](https://learn.adafruit.com/adafruit-circuit-playground-express/set-up-arduino-ide).

![](https://cdn-learn.adafruit.com/assets/assets/000/067/006/medium800/bluefruit___ble_midiusb-library.jpg?1543887981)

Once installed, **open** Arduino and choose **Tools** -\> **Sketch** -\> **Manage Libraries** from the top menu. In the new window that appears, type **MIDIUSB** in the search field. Select the **MIDIUSB library** from the results and **install** the latest version.

## Code

Create a **new sketch** in **Arduino** and delete the starter code&nbsp;that appears inside of it.&nbsp; **Copy the code seen below,** &nbsp; **paste** it into that new blank sketch and **save** it.

```auto
#include &lt;Adafruit_CircuitPlayground.h&gt;
#include "MIDIUSB.h"

bool leftButtonPressed;
bool rightButtonPressed;
bool noteOneOn;
bool noteTwoOn;

void setup() {
  CircuitPlayground.begin();
}

void loop() {
  
  leftButtonPressed = CircuitPlayground.leftButton();
  rightButtonPressed = CircuitPlayground.rightButton();

  //Control note one based on left button
  if (leftButtonPressed &amp;&amp; !noteOneOn) {
    noteOn(0, 60, 100);
    noteOneOn = true;
  } 
  else if (!leftButtonPressed &amp;&amp; noteOneOn) {
    noteOff(0, 60, 100);
    noteOneOn = false;
  }

  //Control note two based on right button
  if (rightButtonPressed &amp;&amp; !noteTwoOn) {
    noteOn(0, 64, 100);
    noteTwoOn = true;
  } 
  else if (!rightButtonPressed &amp;&amp; noteTwoOn){
    noteOff(0, 64, 100);
    noteTwoOn = false;
  }

  //Use light sensor as a modulation control
  int value = CircuitPlayground.lightSensor();  //value from 0-1024
  value = value/8;  //scale to 0-127 for MIDI CC
  controlChange(0, 1, value); //send as MIDI modulation control
  
}

void noteOn(byte channel, byte pitch, byte velocity) {
  midiEventPacket_t noteOn = {0x09, 0x90 | channel, pitch, velocity};
  MidiUSB.sendMIDI(noteOn);
}

void noteOff(byte channel, byte pitch, byte velocity) {
  midiEventPacket_t noteOff = {0x08, 0x80 | channel, pitch, velocity};
  MidiUSB.sendMIDI(noteOff);
}

void controlChange(byte channel, byte control, byte value) {
  midiEventPacket_t event = {0x0B, 0xB0 | channel, control, value};
  MidiUSB.sendMIDI(event);
}
```

Connect **Circuit Playground Express** to your **computer** using a **micro USB cable**.

In Arduino's top menu, go to **Tools -\> Board** , and choose **Adafruit Circuit Playground Express** from the list. Then go to **Tools -\> Port** and choose the port which includes **(Adafruit Circuit Playground Express)** in the name.

Upload the code to your board by going to **Sketch -\> Upload** , or pressing the **Upload**  **button** in the sketch window.

## Play
![](https://cdn-learn.adafruit.com/assets/assets/000/067/014/medium800thumb/bluefruit___ble_Web_MIDI_demo-animated_gif.jpg?1543889216)

Install [Google Chrome](https://www.google.com/chrome/?brand=CHBD&gclid=EAIaIQobChMIlvbihaOE3wIVBobICh1TCwyuEAAYASAAEgK5CvD_BwE&gclsrc=aw.ds) on your computer, if you don't have it already. **Launch Chrome** and open the **Web Audio Synthesizer** by going to the following address:&nbsp;

[https://webaudiodemos.appspot.com/midi-synth/index.html](https://webaudiodemos.appspot.com/midi-synth/index.html)

![](https://cdn-learn.adafruit.com/assets/assets/000/067/004/medium800/bluefruit___ble_cpx_midi_controls.jpg?1543887918)

Each of Circuit Playground Express's two **main buttons** will trigger a **note to play** on the synthesizer and the **light sensor** is used as a **modulation**  **controller** - wave your hand over the light sensor to modulate a note's sound.

# What is Web MIDI & BLE MIDI?

## BLE MIDI

![](https://cdn-learn.adafruit.com/assets/assets/000/066/491/medium800/bluefruit___ble_BLE_MIDI.jpg?1543295718)

[BLE MIDI](https://www.midi.org/specifications-old/item/bluetooth-le-midi) makes MIDI wireless, by sending MIDI messages over a Bluetooth Low Energy connection - which makes it a great solution for art & performance applications. The latest versions of Windows and MacOS, & iOS support the BLE MIDI standard.

https://youtu.be/jWRpEvneEDI

## Mobile Devices

BLE MIDI is a good fit for **smartphones & tablets** which are usually lacking in the hardware connectivity department. Many mobile music apps such as Apple's [Garageband](https://www.apple.com/ios/garageband/) include support for BLE MIDI devices, and Android users can add support using [third-party apps](https://learn.adafruit.com/wireless-untztrument-using-ble-midi/android).&nbsp;

![](https://cdn-learn.adafruit.com/assets/assets/000/066/492/medium800/bluefruit___ble_feather-nrf52.jpg?1543296207)

## Latency

Because of Bluetooth Low Energy's limitations, BLE MIDI messages will take longer to arrive at their destination compared to a wired MIDI connection. The time will vary based on circumstances such as signal strength, proximity, etc., but you can expect a BLE MIDI message to have about **10-20 milliseconds (ms)** of latency between the time a message is sent and when it is received. This is significant when compared to USB MIDI's **~3ms** latency.

## Links

- [Bluefruit nRF52 - BLEMidi](https://learn.adafruit.com/bluefruit-nrf52-feather-learning-guide/blemidi)
- [Bluetooth LE MIDI Drumpad](https://learn.adafruit.com/bluetooth-le-midi-controller/overview)
- [Wireless UNTZtrument](https://learn.adafruit.com/wireless-untztrument-using-ble-midi/overview-uniontownlabs)

Next, we'll look at how to program a **Feather Bluefruit nRF52** board for use as a **BLE MIDI controller**.

# What is Web MIDI & BLE MIDI?

## BLE MIDI Controller

![](https://cdn-learn.adafruit.com/assets/assets/000/067/018/medium800/bluefruit___ble_BLE-MIDI-header2.jpg?1543891509)

You can create a BLE MIDI controller using a&nbsp; **Feather Bluefruit nRF52** &nbsp;and some&nbsp; **basic components** &nbsp;on a&nbsp; **breadboard**. This is a great way to experiment with BLE MIDI control on a mobile device such as an **iOS** or **Android** phone.

## What you'll need
### Part: Trim Pots
quantity: 2
Breadboard trim potentiometer - 10K
[Trim Pots](https://www.adafruit.com/product/356)

### Part: Feather Bluefruit nRF52
quantity: 1
Adafruit Feather nRF52 Bluefruit LE - nRF52832
[Feather Bluefruit nRF52](https://www.adafruit.com/product/3406)

### Part: Breadboard
quantity: 1
Full sized breadboard
[Breadboard](https://www.adafruit.com/product/239)

### Part: Hook-up Wire
quantity: 1
Hook-up Wire Spool Set - 22AWG Solid Core - 6 x 25 ft
[Hook-up Wire](https://www.adafruit.com/product/1311)

### Part: Wire Strippers
quantity: 1
Hakko Professional Quality 20-30 AWG Wire Strippers - CSP-30-1
[Wire Strippers](https://www.adafruit.com/product/527)

### Part: Buttons
quantity: 4
Tactile Switch Buttons (12mm square, 6mm tall) x 10 pack
[Buttons](https://www.adafruit.com/product/1119)

### Part: USB cable
quantity: 1
USB cable - USB A to Micro-B - 3 foot long
[USB cable](https://www.adafruit.com/product/592)

### Part: LiPo Battery
quantity: 1
Lithium Ion Polymer Battery - 3.7v 500mAh
[LiPo Battery](https://www.adafruit.com/product/1578)

## Wiring
![](https://cdn-learn.adafruit.com/assets/assets/000/066/991/medium800/bluefruit___ble_blemidicontroller-breadboard_diagram1.png?1543880846)

Mount the **Feather** , **buttons** , and **trim pots** on a breadboard and use&nbsp; **jumper wire** to make the connections shown in the diagram above.

After translating that diagram into reality, you should have something like this …

![](https://cdn-learn.adafruit.com/assets/assets/000/066/993/medium800/bluefruit___ble_nrf52-breadboard1.jpg?1543884346)

The 3-pin strips of male headers seen above the trim pots are in no way necessary and were simply added for mechanical stability.

Once everything's wired up, **connect the Feather**  **to your computer** using the **micro USB cable**.

![](https://cdn-learn.adafruit.com/assets/assets/000/066/994/medium800/bluefruit___ble_nrf52-usb.jpg?1543884389)

## Arduino IDE setup

Follow the [steps on this page](https://learn.adafruit.com/adafruit-arduino-ide-setup/arduino-1-dot-6-x-ide) to download and **install** the **Arduino IDE** &nbsp;on your computer. Then install support for the Feather Bluefruit nRF52 by [following the steps here](https://learn.adafruit.com/bluefruit-nrf52-feather-learning-guide/arduino-bsp-setup).

![](https://cdn-learn.adafruit.com/assets/assets/000/066/995/medium800/bluefruit___ble_MIDI-library-for-nrf52.jpg?1543885223)

Once installed, **open** Arduino and choose **Tools** -\> **Sketch** -\> **Manage Libraries** from the top menu. In the new window that appears, type **MIDI** in the search field. Scroll down in the results to **MIDI Library by Forty Seven Effects,** select it and **install** the latest version.

## Code

Create a **new sketch** in **Arduino** and delete the starter code&nbsp;that appears inside of it.&nbsp; **Copy the code seen below,** &nbsp; **paste** it into that new blank sketch and **save** it.

```auto
/*********************************************************************
 * Simple MIDI controller for the Feather Bluefruit NRF52
  uses potentiometers connected to pins 2(A0) &amp; 3(A1)
  + four momentary pushbuttons connected to pins 16, 15, 7, &amp; 11

  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  MIT license
*********************************************************************/

/* For BLE MIDI Setup
   https://learn.adafruit.com/wireless-untztrument-using-ble-midi/overview
*/

#include &lt;bluefruit.h&gt;
#include &lt;MIDI.h&gt;

BLEDis bledis;
BLEMidi blemidi;

// Create a new instance of the Arduino MIDI Library, and attach BluefruitLE MIDI as the transport.
MIDI_CREATE_BLE_INSTANCE(blemidi);

int buttons[4] = {16, 15, 7, 11}; //pin numbers for each attached button
int notes[4] = {57, 62, 66, 69};  //note each button will play
bool noteStates[4] = {false};     //keep track of the play state of each note

int modPot = 2;  //analog pin A0
int pitchPot = 3;  //analog pin A1
int lastModVal;
int lastPitchVal;

void setup(){
  
  Serial.begin(115200);
  while ( !Serial ) delay(10);   // for nrf52840 with native usb

  //set input modes for buttons
  for (int i = 0; i &lt; 4; i++) {
    pinMode(buttons[i], INPUT_PULLUP);
  }

  Serial.println("Adafruit Bluefruit52 MIDI over Bluetooth LE Example");

  // Config the peripheral connection with maximum bandwidth
  Bluefruit.configPrphBandwidth(BANDWIDTH_MAX);

  Bluefruit.begin();
  Bluefruit.setName("Bluefruit52 MIDI");
  Bluefruit.setTxPower(4);

  // Setup the on board blue LED to be enabled on CONNECT
  Bluefruit.autoConnLed(true);

  // Configure and Start Device Information Service
  bledis.setManufacturer("Adafruit Industries");
  bledis.setModel("Bluefruit Feather52");
  bledis.begin();

  // Initialize MIDI, and listen to all MIDI channels, will also call blemidi service's begin()
  MIDI.begin(MIDI_CHANNEL_OMNI);

  // Attach the handleNoteOn function to the MIDI Library. It will
  // be called whenever the Bluefruit receives MIDI Note On messages.
  MIDI.setHandleNoteOn(handleNoteOn);

  // Do the same for MIDI Note Off messages.
  MIDI.setHandleNoteOff(handleNoteOff);

  // Set up and start advertising
  startAdv();

  // Start MIDI read loop
  Scheduler.startLoop(midiRead);
}

void startAdv(void){
  
  // Set General Discoverable Mode flag
  Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);

  // Advertise TX Power
  Bluefruit.Advertising.addTxPower();

  // Advertise BLE MIDI Service
  Bluefruit.Advertising.addService(blemidi);

  // Secondary Scan Response packet (optional)
  Bluefruit.ScanResponse.addName();

  //Start Advertising
  Bluefruit.Advertising.restartOnDisconnect(true);
  Bluefruit.Advertising.setInterval(32, 244);    // in unit of 0.625 ms
  Bluefruit.Advertising.setFastTimeout(30);      // number of seconds in fast mode
  Bluefruit.Advertising.start(0);                // 0 = Don't stop advertising after n seconds
}

void handleNoteOn(byte channel, byte pitch, byte velocity){
  
  // Log when a note is pressed.
  Serial.printf("Note on: channel = %d, pitch = %d, velocity - %d", channel, pitch, velocity);
  Serial.println();
}

void handleNoteOff(byte channel, byte pitch, byte velocity){
  
  // Log when a note is released.
  Serial.printf("Note off: channel = %d, pitch = %d, velocity - %d", channel, pitch, velocity);
  Serial.println();
}

void loop(){
  
  // Don't continue if we aren't connected.
  if (! Bluefruit.connected()) {
    return;
  }
  // Don't continue if the connected device isn't ready to receive messages.
  if (! blemidi.notifyEnabled()) {
    return;
  }

  //check pot values
  int modVal = analogRead(modPot);
  int pitchVal = analogRead(pitchPot);
  pitchVal = map(pitchVal, 0, 1023, -8000, 8000);
  modVal = modVal / 8;

  //send new mod value if it has changed
  if (lastModVal != modVal) {
    Serial.print("modWheel = ");
    Serial.println(modVal);
    MIDI.sendControlChange(1, modVal, 1);
    lastModVal = modVal;
  }

  //send new pitch value if it has changed
  if (lastPitchVal != pitchVal) {
    Serial.print("pitchBend = ");
    Serial.println(pitchVal);
    MIDI.sendPitchBend(pitchVal, 1); //pot value sent as pitch bend
    lastPitchVal = pitchVal;
  }

  //check all buttons
  for (int i = 0; i &lt; 4; i++) {

    bool buttonPressed = !digitalRead(buttons[i]);

    //send note on if button pressed and note is off
    if (buttonPressed &amp;&amp; !noteStates[i]) {
      Serial.print("Button pressed: ");
      Serial.println(i);
      MIDI.sendNoteOn(notes[i], 100, 1);
      noteStates[i] = true;
    }
    //send note off if button released and note is on
    else if (!buttonPressed &amp;&amp; noteStates[i]) {
      Serial.print("Button released: ");
      Serial.println(i);
      MIDI.sendNoteOff(notes[i], 100, 1);
      noteStates[i] = false;
    }
  }

  delay(100);
}

void midiRead(){
  
  // Don't continue if we aren't connected.
  if (! Bluefruit.connected()) {
    return;
  }

  // Don't continue if the connected device isn't ready to receive messages.
  if (! blemidi.notifyEnabled()) {
    return;
  }

  // read any new MIDI messages
  MIDI.read();
}

```

## Upload code

**Connect** your Feather to your computer using a **micro USB cable**. From Arduino's top menu, go to&nbsp; **Tools** -\> **Board** &nbsp;and choose&nbsp; **Adafruit Bluefruit nRF52832 Feather** from the list that appears **.**

Next, go to **Tools -\> Port** and choose the&nbsp; **SLAB\_USBtoUART** port.

Finally, go **Sketch** -\> **Upload** or click the **right-facing arrow button** to upload the sketch to your **Feather**.

## Go Wireless
![](https://cdn-learn.adafruit.com/assets/assets/000/067/020/medium800/bluefruit___ble_nrf52-lipo2.jpg?1543893333)

In order to make this a truly wireless test - **disconnect the USB cable** from the Feather and **attach the LiPo battery** to Feather's JST port. You'll know Feather is up and running if you see the **flashing blue LED**.

## iOS
![](https://cdn-learn.adafruit.com/assets/assets/000/066/951/medium800/bluefruit___ble_garageband1.jpg?1543795490)

Using your iPad or iPhone, download & install&nbsp;[Garageband from the App Store](https://itunes.apple.com/us/app/garageband/id408709785?mt=8). Launch the app and create a new project. When prompted, choose the&nbsp; **piano keyboard** &nbsp;as the first track instrument.

![](https://cdn-learn.adafruit.com/assets/assets/000/066/947/medium800/bluefruit___ble_garageband2.jpg?1543793388)

In the main track arrangement view, tap the **wrench icon** in the upper right corner of the screen. From the **Settings** menu that appears, choose **Advanced** , then **Bluetooth MIDI Devices**. The app will scan for available Bluetooth MIDI devices - choose **Bluefruit52 MIDI** from the results list.

Once the device is paired, you should be able to control Garageband's piano from your breadboard MIDI controller.

## Android

On your Android device, open the Play Store and download both&nbsp;[MIDI BLE Connect&nbsp;](https://play.google.com/store/apps/details?id=com.mobileer.example.midibtlepairing)& [General MIDI Synth.](https://play.google.com/store/apps/details?id=net.volcanomobile.sonivoxeasmidi)

![](https://cdn-learn.adafruit.com/assets/assets/000/066/948/medium800/bluefruit___ble_android1.png?1543793865)

Open MIDI BLE Connect & tap the **BLUETOOTH SCAN** button. Choose **Bluefruit52 MIDI** from the results list.

![](https://cdn-learn.adafruit.com/assets/assets/000/066/950/medium800/bluefruit___ble_android3.jpg?1543794157)

Next, open the **General MIDI** app, tap the **small triangle icon** at the top, and choose **Bluefruit52 MIDI** from the list.&nbsp;Once the device is paired, you should be able to control **General MIDI's** piano synth from your breadboard BLE MIDI controller.

## Play
![](https://cdn-learn.adafruit.com/assets/assets/000/067/019/medium800/bluefruit___ble_nrf52-breadboard1-b_w-skitch.jpg?1543892588)

Each **pushbutton** will **trigger a note** , and the **potentiometers** control **pitch bend** and **modulation**. You can easily expand this project by adding more buttons and soldering the components to a [protoboard](https://www.adafruit.com/product/1606) for more durability.

https://youtu.be/oLFXImK3Sqw


## Featured Products

### Adafruit Feather nRF52 Bluefruit LE

[Adafruit Feather nRF52 Bluefruit LE](https://www.adafruit.com/product/3406)
The **Adafruit Feather nRF52 Bluefruit** is another easy-to-use all-in-one Bluetooth® Low Energy board, with a native-Bluetooth® chip, the nRF52832!&nbsp; It's our take on an 'all-in-one' Arduino-compatible + Bluetooth® Low Energy with built in USB and...

Out of Stock
[Buy Now](https://www.adafruit.com/product/3406)
[Related Guides to the Product](https://learn.adafruit.com/products/3406/guides)
### Adafruit 8x8 NeoTrellis Feather M4 Kit Pack

[Adafruit 8x8 NeoTrellis Feather M4 Kit Pack](https://www.adafruit.com/product/1929)
We've upgraded our popular UNTZtrument with a total make-over, and it's been reborn as the NeoTrellis 8x8 Kit pack. This open-source 8x8 Grid Controller Kit with a&nbsp;super-specifically-laser-cut enclosure turns four panels of 4x4 NeoTrellis's into a handheld Feather M4...

Out of Stock
[Buy Now](https://www.adafruit.com/product/1929)
[Related Guides to the Product](https://learn.adafruit.com/products/1929/guides)
### Adafruit HELLA UNTZtrument! Open-Source 16x8 Grid Controller Kit

[Adafruit HELLA UNTZtrument! Open-Source 16x8 Grid Controller Kit](https://www.adafruit.com/product/1999)
Build and customize your very own open-source button grid controller based on the Adafruit Trellis with the UNTZtrument kit **HELLA UNTZtrument KIT**! Designed by PaintYourDragon, this DIY kit comes with delicious translucent button pads, controller pads, diffused white LEDS and a...

No Longer Stocked
[Buy Now](https://www.adafruit.com/product/1999)
[Related Guides to the Product](https://learn.adafruit.com/products/1999/guides)
### Adafruit NeoTrellis M4 with Enclosure and Buttons Kit Pack

[Adafruit NeoTrellis M4 with Enclosure and Buttons Kit Pack](https://www.adafruit.com/product/4020)
So you've got a cool/witty name for your band, a Soundcloud account,&nbsp;[a 3D-printed Daft Punk helmet](https://learn.adafruit.com/3d-printed-daft-punk-helmet-with-bluetooth)...&nbsp;so what could be missing from your road to stardom? The **NeoTrellis M4 Kit...**

Out of Stock
[Buy Now](https://www.adafruit.com/product/4020)
[Related Guides to the Product](https://learn.adafruit.com/products/4020/guides)
### Adafruit NeoTrellis M4 Mainboard - featuring SAMD51

[Adafruit NeoTrellis M4 Mainboard - featuring SAMD51](https://www.adafruit.com/product/3938)
We got a big ol' blender and tossed in an ItsyBitsy M4, two NeoTrellis boards and an electret mic amp - turned on the 'mix' button and out came the NeoTrellis M4 - a super fun dev board for anyone who likes to squish buttons, see pretty lights and maybe make a tune or...

In Stock
[Buy Now](https://www.adafruit.com/product/3938)
[Related Guides to the Product](https://learn.adafruit.com/products/3938/guides)
### Breadboard-friendly MIDI Jack (5-pin DIN)

[Breadboard-friendly MIDI Jack (5-pin DIN)](https://www.adafruit.com/product/1134)
To celebrate the 30th Anniversary of the invention of MIDI we're carrying these handy 5-pin MIDI jacks. They're what you see on the back of nearly every synthesizer and drum machine. These are nice sturdy jacks, and breadboard-friendly, with all the pins on 0.1" spacing for easy...

In Stock
[Buy Now](https://www.adafruit.com/product/1134)
[Related Guides to the Product](https://learn.adafruit.com/products/1134/guides)
### Adafruit Feather M0 Bluefruit LE

[Adafruit Feather M0 Bluefruit LE](https://www.adafruit.com/product/2995)
Feather is the new development board from Adafruit, and like its namesake, it is thin, light, and lets you fly! We designed Feather to be a new standard for portable microcontroller cores.

This is the&nbsp; **Adafruit Feather M0 Bluefruit LE** &nbsp;- our take on an...

In Stock
[Buy Now](https://www.adafruit.com/product/2995)
[Related Guides to the Product](https://learn.adafruit.com/products/2995/guides)
### Adafruit Feather 32u4 Bluefruit LE

[Adafruit Feather 32u4 Bluefruit LE](https://www.adafruit.com/product/2829)
Feather is the new development board from Adafruit, and like its namesake it is thin, light, and lets you fly! We designed Feather to be a new standard for portable microcontroller cores.

This is the&nbsp; **Adafruit Feather 32u4 Bluefruit** &nbsp;- our take on an...

In Stock
[Buy Now](https://www.adafruit.com/product/2829)
[Related Guides to the Product](https://learn.adafruit.com/products/2829/guides)

## Related Guides

- [Adafruit Feather M0 Bluefruit LE](https://learn.adafruit.com/adafruit-feather-m0-bluefruit-le.md)
- [Adafruit Circuit Playground Express](https://learn.adafruit.com/adafruit-circuit-playground-express.md)
- [Adafruit NeoTrellis M4 Express](https://learn.adafruit.com/adafruit-neotrellis-m4.md)
- [BOSEbuild Reactive Sound ](https://learn.adafruit.com/bosebuild-reactive-sound.md)
- [Android GBoard Morse Code Control with Circuit Playground Express](https://learn.adafruit.com/android-gboard-morse-code-at-with-circuitplayground-express.md)
- [CircuitPython Made Easy on Circuit Playground Express and Bluefruit](https://learn.adafruit.com/circuitpython-made-easy-on-circuit-playground-express.md)
- [Bunny Ears with MakeCode](https://learn.adafruit.com/bunny-ears-with-makecode.md)
- [Esenciales para CircuitPython](https://learn.adafruit.com/esenciales-para-circuitpython.md)
- [Make it Move with Crickit](https://learn.adafruit.com/make-it-move-with-crickit.md)
- [Jack-o-Theremin](https://learn.adafruit.com/jack-o-theremin.md)
- [NeoTrellis M4 MIDI File Synthesizer](https://learn.adafruit.com/neotrellism4-midi-file-player-synthesizer.md)
- [CircuitPython with Jupyter Notebooks](https://learn.adafruit.com/circuitpython-with-jupyter-notebooks.md)
- [Make It Change: Potentiometers](https://learn.adafruit.com/make-it-change-potentiometers.md)
- [Welcome to CircuitPython!](https://learn.adafruit.com/welcome-to-circuitpython.md)
- [Labo Piano Light FX](https://learn.adafruit.com/labo-piano-light-fx.md)
- [Comparison and Experimentation with Flammable Gas Sensors](https://learn.adafruit.com/gas-sensor-comparison.md)
- [CircuitPython Powered AT Hand-Raiser](https://learn.adafruit.com/at-hand-raiser.md)
- [Drama Piñata](https://learn.adafruit.com/customizable-reusable-pinata.md)
