Raspberry Pi Pico: Mini-Soundboard mit DFPlayer Mini
Ein Soundboard ist eine Oberfläche, in der viele Regler, Schalter und Taster eingelassen sind, um Audio-Quellen zu bearbeiten, zu schneiden und zu mischen. Manche sagen auch Mischpult dazu. Die gibt es in verschiedenen Ausbaustufen. In diesem einfachen Anwendungsfall haben wir einfach nur 3 Taster, die eine bestimmte Audiodatei abspielen sollen, wenn sie gedrückt werden.
Als Audio-Player verwenden wir einen DFPlayer Mini. Das ist ein Mini-MP3-Player mit integriertem MicroSD-Kartenslot und Verstärker zur Audio-Ausgabe auf einem Lautsprecher. Mit dem Raspberry Pi Pico wollen wir den DFPlayer Mini über die serielle Schnittstelle steuern.
Aufbau und Bauteile
- DFPlayer Mini
- Speicherkarte
- Lautsprecher
- Taster
- GPIO-Belegung (Pinout)
Raspberry Pi Pico | DFPlayer Mini | Lautsprecher | ||
---|---|---|---|---|
Pin 40 | VCC / +5V | Pin 1 | VCC | |
Pin 24 | GPIO18 | Pin 16 | Busy | |
Pin 38 | GND | Pin 7 | GND | |
Pin 22 | GPIO17 / UART0 / RX | Pin 3 | TX | |
Pin 21 | GPIO16 / UART0 / RX | Pin 2 | RX | |
Pin 6 | SPK + | + | ||
Pin 8 | SPK - | - |
Schnell und einfach alle Bauteile zusammen bestellen
MicroPython-Bibliothek für den DFPlayer
Die Software-seitige Ansteuerung erfolgt über die serielle Schnittstelle. Damit der DFPlayer Mini etwas tut, zum Beispiel einen Titel abspielen, muss er einen Code über die serielle Schnittstelle übermittelt bekommen. Hilfreich ist es, man verwendet eine Software-Bibliothek, die bestimmte Steuerungscodes bereits mit einem Programmierbefehl kombiniert haben. So Dinge, wie Play, Pause, Laut, Leise, usw.
Die folgende MicroPython-Bibliothek muss heruntergeladen und mit dem Dateinamen „picodfplayer.py“ auf dem Raspberry Pi Pico gespeichert werden.
Programmcode
Der Programmcode initialisiert den DFPlayer Mini über eine UART-Schnittstelle und die Busy-Leitung. Über den Zustand der Busy-Leitung ermitteln wir im Programmcode, ob gerade ein Titel gespielt wird, oder nicht. Über die UART-Schnittstelle bekommt der DFPlayer Mini seine Steuerungskommandos gesendet.
Das DFPlayer Mini braucht nach der Verbindung mit der Stromversorgung etwa 500 bis 1.500 ms, bis er seine Speicherkarte vollständig indiziert hat. Wie lange das dauert, ist abhängig von der Anzahl der Dateien auf der Speicherkarte. Bei mehreren hundert Titeln kann es etwas dauert, bis der DFPlayer Mini Kommandos entgegennehmen kann. Aus diesem Grund ist nach der Initialisierung eine kleine Pause eingebaut.
Weil am Anfang die Lautstärke auf dem höchsten Wert eingestellt ist, wird sie im Programmcode zuerst auf einen mittleren Wert eingestellt.
Dann kommen die Funktionen, die einen bestimmten Titel (Track) mit einem Kommando abspielen. Danach folgt die Initialisierung der Taster und welche Funktion sie aufrufen sollen.
# Bibliotheken laden import time from picozero import Button from picodfplayer import DFPlayer # Initialisierung DFPlayer (UART, TX-Pin, RX-Pin, Busy-Pin) player = DFPlayer(0, 16, 17, 18) time.sleep(1) player.setVolume(15) # Lautstärke einstellen: 0 bis 30 # Funktion: Abspielen von Titel 1 def track1(): print('Taster: Links') player.playTrack(1,1) # Funktion: Abspielen von Titel 2 def track2(): print('Taster: Mitte') player.playTrack(1,2) # Funktion: Abspielen von Titel 3 def track3(): print('Taster: Rechts') player.playTrack(1,3) # Taster: Links btn1 = Button(21) btn1.when_pressed = track1 # Taster: Mitte btn2 = Button(20) btn2.when_pressed = track2 # Taster: Rechts btn3 = Button(19) btn3.when_pressed = track3
Dieser Programmcode hat den Nachteil, dass bei jedem Druck auf einen Taster der laufende Titel abgebrochen und der neue Titel abgespielt wird. Bei einem Soundboard möchte man das vielleicht nicht, um eine Fehlbedienung zu vermeiden.
Im folgenden Programmcode wird ein neuer Titel erst dann abgespielt wenn der laufende Titel vollständig abgespielt wurde.
# Bibliotheken laden import time from picozero import Button from picodfplayer import DFPlayer # Initialisierung DFPlayer (UART, TX-Pin, RX-Pin, Busy-Pin) player = DFPlayer(0, 16, 17, 18) time.sleep(1) player.setVolume(15) # Lautstärke einstellen: 0 bis 30 # Funktion: Abspielen von Titel 1 def track1(): if player.queryBusy() == False: print('Taster: Links') player.playTrack(1,1) # Funktion: Abspielen von Titel 2 def track2(): if player.queryBusy() == False: print('Taster: Mitte') player.playTrack(1,2) # Funktion: Abspielen von Titel 3 def track3(): if player.queryBusy() == False: print('Taster: Rechts') player.playTrack(1,3) # Taster: Links btn1 = Button(21) btn1.when_pressed = track1 # Taster: Mitte btn2 = Button(20) btn2.when_pressed = track2 # Taster: Rechts btn3 = Button(19) btn3.when_pressed = track3
Hinweis: Mit diesem Aufbau und Programmcode ist es nicht vorgesehen, das Abspielen der Audio-Dateien zu beenden oder zu unterbrechen. Das Beenden des Programmcodes hat keinen Einfluss auf den DFPlayer Mini. Der lässt den aktuellen Titel unabhängig vom Mikrocontroller weiterlaufen. Zum Beenden der laufenden Audioausgabe musst Du den Lautsprecher oder gleich die Stromversorgung (VCC) zum DFPlayer Mini entfernen/abziehen/abklemmen.
Erweiterung
Denkbar ist, dass Du den Aufbau und Programmcode und damit das Mini-Soundboard um weitere Taster und Titel erweiterst.
Weitere verwandte Themen:
- Raspberry Pi Pico: Farbsteuerung für RGB-LED programmieren
- Raspberry Pi Pico: Lichtsteuerung für WS2812-RGB-LED-Modul programmieren
- Raspberry Pi Pico: Drehschalter / Rotary Encoder ansteuern (KY-040)
Teilen:
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Für Ihre Fragen zu unseren Online-Workshops mit dem Raspberry Pi Pico besuchen Sie unseren PicoTalk (Online-Meeting). (Headset empfohlen)