Raspberry Pi Pico: MP3-Dateien abspielen (mit CircuitPython)
Ein Raspberry Pi Pico hat leider keine GPIOs, die sich als analoge Ausgänge konfigurieren lassen. Man kann also nicht einfach so Töne oder sogar Audio-Dateien abspielen. Allerdings gibt es einen Umweg über die Ausgabe von PWM-Signalen. Darüber ist es möglich, mit ganz einfachen Mitteln und spielend leicht MP3-Dateien mit dem Raspberry Pi Pico abzuspielen. Dafür eignet sich schon ein kleiner Lautsprecher (Mono) vom Typ KY-006. Für ernsthafte Anwendungen und Experimente wäre ein richtiger Lautsprecher mit z. B. 1 Watt / 8 Ohm und einem zusätzlichen Verstärker-Modul zu empfehlen.
Der hier verwendete Programmcode benötigt zum Abspielen der MP3-Dateien die CircuitPython-Firmware, weil dort bereits ein MP3-Decoder enthalten ist. Mit MicroPython funktioniert der verwendete Programmcode nicht.
Die Kombination aus Raspberry Pi Pico und CircuitPython ermöglicht in nur wenigen Schritten kreative Sound-Projekte. Nur eine Sache muss man dabei beachten, dass der Speicher des Raspberry Pi Pico nicht besonders groß ist und nur kleine MP3-Dateien oder ganz wenige auf dem Pico gespeichert werden können.
Aufbau und Bauteile
Raspberry Pi Pico | KY-006 | |
---|---|---|
Pin 3 | GND | - |
Pin 1 | GPIO 0 | S |
Hinweis: Der KY-006 ist nicht wirklich für die Tonausgabe von MP3-Dateien geeignet. Er rauscht, knackt, knarzt und schnarrt, je nach dem was genau abgespielt wird. Zum Testen ist das sicherlich ausreichend. Ernsthafte Anwendungen benötigen einen Verstärker und einen richtigen, zum Verstärker und zur Anwendung passenden Lautsprecher.
Schnell und einfach alle Bauteile zusammen bestellen
MP3-Dateien zum Abspielen
Grundsätzlich eignen sich fast alle MP3-Dateien. Übliche MP3-Dateien mit Mono und Stereo, bis 64 kBit/s und 8 kHz bis 24 kHz werden unterstützt.
Um sicher zu sein, abspielfähige Dateien zu verwenden, bieten wir hierzu ein paar geeignete Dateien zum Download an, die direkt mit einem Dateimanager auf den Pico kopiert werden können.
Programmcode für CircuitPython: Eine einzelne MP3-Datei abspielen
Wenn es darum geht, eine einzelne Datei abzuspielen, dann reichen folgende Zeilen aus.
- Zuerst werden die erforderlichen Bibliotheken geladen.
- Dann wird der GPIO 0 (Pin 1) als Ausgang für ein PWM-Audio-Signal initialisiert.
- Anschließend wird die Datei für den MP3-Decoder ausgewählt.
- Und danach wird die Datei abgespielt.
- Die Endlosschleife dient hier dazu, das Ende des Abspielens zu erkennen. Alternativ bestünde die Möglichkeit den Pico während des Abspielens etwas anderes machen zu lassen.
Nach dem Ausführen des Programmcodes wird die Datei (im Verzeichnis mp3) sofort abgespielt.
# Bibliotheken laden import board from audiomp3 import MP3Decoder from audiopwmio import PWMAudioOut # Initialisierung: GPIO 0 (Pin 1) als PWM-Audio-Ausgang audio_out = PWMAudioOut(board.GP0) # MP3-Datei auswählen mp3 = MP3Decoder('mp3/pico.mp3') # MP3 abspielen print('Abspielen') audio_out.play(mp3) # Ausführung während dem Abspielen while audio_out.playing: pass print('Ende')
Hinweis: Wenn Du keinen Ton hörst, dann prüfe bitte, ob der Lautsprecher mit den richtigen Pins verbunden ist, die im Programmcode stehen. Desweiteren solltest Du berücksichtigen, dass die Lautstärke sehr leise ist und man nur dann etwas hört, wenn man sich den Lautsprecher direkt ans Ohr hält. Laute Umgebungsgeräusche können diese Tonausgabe sehr leicht übertönen.
Programmcode für CircuitPython: Mehrere MP3-Dateien hintereinander abspielen
Wenn man mehrere Dateien hintereinander abspielen will, muss der Programmcode um eine Schleife und eine Liste mit den Dateinamen ergänzt werden.
# Bibliotheken laden import board import audiomp3 import audiopwmio # Initialisierung: GPIO 0 (Pin 1) als PWM-Audio-Ausgang audio_out = audiopwmio.PWMAudioOut(board.GP0) # MP3-Dateien mp3dir = 'mp3/' mp3files = ['pico.mp3','restaurant.mp3'] # Wiederholung for filename in mp3files: print('Abspielen:', filename) # Datei auswählen mp3 = audiomp3.MP3Decoder(open(mp3dir + filename, 'rb')) # Abspielen audio_out.play(mp3) # Ausführung während dem Abspielen while audio_out.playing: pass print('Ende')
Ergänzungen
Wer den Aufbau durchführt und den Programmcode ausprobiert, wird zwei Dinge bemängeln.
- Die Audio-Ausgabe ist sehr leise: Das liegt daran, dass der Strom, den ein GPIO-Ausgang liefern kann, nicht besonders groß ist. Deshalb muss der das Ausgangssignal (Strom) zur Ausgabe auf einem Lautsprecher verstärkt werden.
- Am Anfang und am Ende des Abspielen knackt es manchmal: Letzten Endes ist diese Art der Tonverarbeitung nur eine Notlösung, deren auditive Wahrnehmung nicht gefallen muss.
PWM-Signal verstärken
Um die Audio-Ausgabe sinnvoll nutzen zu können, muss das PWM-Signal (Strom) verstärkt werden. Man muss also den GPIO mit einem Verstärker (Eingang) verbinden und am Verstärker (Ausgang) den Lautsprecher anschließen. Hierfür eignen sich verschiedene Audio-Verstärker-Module.
Weitere verwandte Themen:
- Raspberry Pi Pico: Tonausgabe mit Buzzer KY-006
- Raspberry Pi Pico: MP3-Audioausgabe mit DFPlayer Mini
- Raspberry Pi Pico: Summer einschalten und ausschalten
- Raspberry Pi Pico: MP3, Musik, Sprache und Audio
Frag Elektronik-Kompendium.de
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.
Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.