Midi Controller mit Raspberry Pi Pico

Midi Controller mit Raspberry Pi Pico

Audio / Sound, Dev. Boards, Raspberry Pi
18 November 2021

In diesem Guide lernst du, einfach einen RGB beleuchteten Midi Controller mithilfe eines Raspberry Pi Pico zu bauen.

MIDI-Controller spielen in der Musik und vor allem in Tonstudios eine signifikante Rolle. Dank dem MIDI-Standard (Musical Instrument Digital Interface) lassen sich elektronische Instrumente ganz einfach miteinander verknüpfen, indem Informationen zwischen den verschiedenen Modulen ausgetauscht werden. Der MIDI-Controller dient dabei als Schnittstelle zwischen Audio-Software und Audio-Hardware. Bei dem kompakten Steuermodul handelt es sich im Grunde genommen um ein simpel aufgebautes Eingabegerät, das über eine Tastatur verfügt. Durch Betätigung der einzelnen Tasten werden MIDI-Signale an ein vorher definiertes Ziel gesendet und verarbeitet. Mit der richtigen Software hast du anschließend die Möglichkeit, die erzeugten Sounds digital zu bearbeiten.

Du würdest gerne selbst mit einem MIDI-Steuergerät experimentieren und dir mit wenigen Handgriffen dein eigenes Home-Studio einrichten? Kein Problem! Wir zeigen dir, wie du dir mithilfe deines Raspberry Pi Pico und eines RGB Keypads im Nu deinen eigenen MIDI-Controller bauen kannst.

Das brauchst du für dein Vorhaben

WARENKORB

Alle für dieses Projekt notwendigen Artikel landen mit einem Klick auf den Button direkt in deinem Warenkorb, sofern sie in unserem Shop verfügbar sind. Kontrolliere daher deinen Warenkorb genau!

MIDI-Controller mit Raspberry Pi Pico bauen: Schritt für Schritt erklärt

  1. Zuallererst installierst du die Entwicklungsumgebung Thonny IDE. Nutze dafür diesen Link.
  2. Als nächstes lötest du die Stiftleisten mithilfe einer Lötstation auf das Board.
  3. Wenn das geschafft ist, schließt du das RGB Keypad an deinen Raspberry Pi Pico an.
Midi Controller Raspberry Pi Pico Aufbau
  1. Lade nun die CircuitPython Firmware herunter und installiere sie. Wir haben für das Projekt die Version CircuitPython 7.0.0 verwendet. Um die Installation durchzuführen, hältst du die BOOTSEL-Taste gedrückt und schließt gleichzeitig das Micro-USB-Kabel an den Rechner an. Die Firmware legst du in dem Ordner „RPI-RP2“ ab.
  2. Anschließend lädst du die CircuitPython Bibliotheken herunter. Wir nutzen für dieses Projekt das Bundle for Version 7.x.
  3. Wenn der Download beendet ist, entpackst du die ZIP-Datei, öffnest den Ordner /adafruit-circuitpython-bundle-7.x-mpy…/lib und kopierst die Bibliotheken adafruit_bus_device, adafruit_midi und adafruit_dotstar.mpy in den Ordner /CIRCUITPY/lib.
  1. Jetzt öffnest du noch die Datei code.py mit Thonny IDE und kopierst den Code. Lass das Skript ausführen und speichere das Ganze.
Code für Midi Controller Raspberry Pi Pico
  1. Zu guter Letzt testest du deinen MIDI-Controller. Starte dazu das Tool Piano 10 und klicke auf GENERAL MIDI. Aktiviere den MIDI Support und wähle als MIDI Input die Option „CircuitPython usb_midi.ports[*]“.
import time
import board
import busio
import usb_midi

import adafruit_midi
from adafruit_midi.note_off import NoteOff
from adafruit_midi.note_on import NoteOn
from adafruit_bus_device.i2c_device import I2CDevice
import adafruit_dotstar

from digitalio import DigitalInOut, Direction, Pull


# RGB MIDI controller example for Pimoroni RGB Keypad for Raspberry Pi Pico

# Prerequisites
#
# Requires Adafruit CircuitPython: https://learn.adafruit.com/getting-started-with-raspberry-pi-pico-circuitpython
#
# Also requires the following CircuitPython libs: adafruit_midi, adafruit_bus_device, adafruit_dotstar
# (drop them into the lib folder)
#
# Save this code in code.py on your Raspberry Pi Pico CIRCUITPY drive


# Pull CS pin low to enable level shifter
cs = DigitalInOut(board.GP17)
cs.direction = Direction.OUTPUT
cs.value = 0

# Set up APA102 pixels
num_pixels = 16
pixels = adafruit_dotstar.DotStar(board.GP18, board.GP19, num_pixels, brightness=0.1, auto_write=True)

# Set up I2C for IO expander (addr: 0x20)
i2c = busio.I2C(board.GP5, board.GP4)
device = I2CDevice(i2c, 0x20)

# Set USB MIDI up on channel 0
midi = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=0)

# Function to map 0-255 to position on colour wheel
def colourwheel(pos):
    if pos < 0 or pos > 255:
        return (0, 0, 0)
    if pos < 85:
        return (255 - pos * 3, pos * 3, 0)
    if pos < 170:
        pos -= 85
        return (0, 255 - pos * 3, pos * 3)
    pos -= 170
    return (pos * 3, 0, 255 - pos * 3)

# List to store the button states
held = [0] * 16

# Keep reading button states, setting pixels, sending notes
while True:
    with device:
        # Read from IO expander, 2 bytes (8 bits) correspond to the 16 buttons
        device.write(bytes([0x0]))
        result = bytearray(2)
        device.readinto(result)
        b = result[0] | result[1] << 8

        # Loop through the buttons
        for i in range(16):
            if not (1 << i) & b:  # Pressed state
                pixels[i] = colourwheel(i * 16)  # Map pixel index to 0-255 range
                if not held[i]:
                    midi.send(NoteOn(36 + i, 100))  # If not already held, then send note
                held[i] = 1
            else:  # Released state
                pixels[i] = (0, 0, 0)  # Turn pixel off
                midi.send(NoteOff(32 + i, 0))  # If not held, send note off
                held[i] = 0  # Set held state to off

Falls du zusätzliche Inspiration brauchst, findest du hier Projektideen.

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 5 / 5. Anzahl Bewertungen: 6

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Kommentare

  1. Hallo Fabio,

    danke für den Beitrag. Der Link zum CircuitPython Firmware fehlt und unter Punkt stellt sich die Frage welcher Code hier copiert werden soll?

Hinterlasse ein Kommentar

XHTML: Sie können diese Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>