In diesem Guide lernst du, einfach einen RGB beleuchteten Midi Controller mithilfe eines Raspberry Pi Pico zu bauen.
In der digitalen Musikwelt spielen MIDI-Controller eine zentrale Rolle, und mit ein wenig Bastelfreude kannst auch du dir deinen eigenen Controller erschaffen. Mit diesem praktischen Leitfaden begleite ich dich Schritt für Schritt durch den Aufbau eines MIDI-Controllers unter Verwendung eines Raspberry Pi Pico und eines RGB Keypads. Dieses Projekt bietet dir nicht nur die Möglichkeit, dein Heimstudio zu erweitern, sondern auch die Freude am Selbermachen. 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
- Raspberry Pi Pico
- Raspberry Pi Pico RGB Keypad Base
- Stiftleisten
- USB Kabel
- Lötstation
- Thonny IDE
- CircuitPython Firmware & Libraries
- Piano 10 (für Windows 10) oder Ähnliches
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
- Zuallererst installierst du die Entwicklungsumgebung Thonny IDE. Nutze dafür diesen Link.
- Als nächstes lötest du die Stiftleisten mithilfe einer Lötstation auf das Board.
- Wenn das geschafft ist, schließt du das RGB Keypad an deinen Raspberry Pi Pico an.
- 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.
- Anschließend lädst du die CircuitPython Bibliotheken herunter. Wir nutzen für dieses Projekt das Bundle for Version 7.x.
- 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.
- Jetzt öffnest du noch die Datei code.py mit Thonny IDE und kopierst den Code. Lass das Skript ausführen und speichere das Ganze.
- 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.
Abschlussgedanken zum MidiController
Mit diesen Schritten hast du nicht nur einen funktionalen MIDI-Controller erschaffen, sondern auch einen visuell beeindruckenden Begleiter für deine musikalischen Abenteuer. Dieser Leitfaden ist dein Sprungbrett in die Welt der elektronischen Musikinstrumente und eröffnet dir neue Wege, deine musikalischen Ideen auszudrücken. Zögere nicht, mit dem Code zu experimentieren und ihn an deine Wünsche anzupassen. Es ist Zeit, deine Kreativität freien Lauf zu lassen und die Musik spielen zu lassen!
Hallo Fabio,
ich habe heute das RGB Keypad erhalten, zusammengebaut, die notwendigen Libraries und Dateien geladen und deinen Code ausprobiert.
Die Tasten funktionieren (leuchten schön, wenn ich drücke), aber beim Midi hakt etwas.
Es wird kontinuierlich ein Note-Off-Befehl gesendet. Die unteren 4 Tasten werden gesendet, aber nach dem Loslassen klingen die Töne, als ob ein Note-Off-Befehl fehlt. Die anderen 12 Tasten erzeugen nur einen ganz kurzen Ton. Gerne schicke ich dazu auch ein kurzes Video.
Da die Farben zeigen, dass das Drücken der Tasten klar erkannt wird, denke ich, da ist ein Problem im Code.
Kannst du helfen?
Beste Grüße
Norbert
Hallo Zusammen,
der Fehler liegt im Code in der vorletzten Zeile:
– midi.send(NoteOff(32 i, 0)) # If not held, send note off –
Hier bitte anstatt 32, 36 eintragen….
Beste Grüße
Andreas