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.

  1. 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.
  2. 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.

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

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

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

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.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren