Aus Raspberry Pi Geek 07/2025

Mini-Webradio mit dem RasPi Pico 2W bauen (Seite 2)

Das soll an dieser Stelle als kurze Skizze des Programmablaufs genügen. Der reale Code für das Webradio ist freilich etwas ausgefeilter und umfasst beispielsweise auch die Ansteuerung des Bildschirms. Das komplette CircuitPython-Webradio-Programm steht im Github-Repository des Autors [4] für Sie zum Download bereit.

Listing 1

MP3-Streams abspielen

buffer = bytearray(bufsize)
decoder = audiomp3.MP3Decoder("dummy.mp3", buffer)
i2s = audiobusio.I2SOut(pin_bclk, pin_wsel, pin_data)
response = requests.get(url, timeout=5, headers={"connection": "close"}, stream=True)
decoder.file = response.socket
i2s.play(decoder)

Listing 2

Button-Verarbeitung

import keypad
keys = keypad.Keys([PIN_PREV, PIN_NEXT, PIN_RELOAD, PIN_MUTE], value_when_pressed=False, pull=True, interval=0.1, max_events=4)
callbacks = [on_prev, on_next, on_reload, on_mute]
[...]
while True:
  event = keys.events.get()
  if event and event.pressed:
    callbacks[event.key_number]()

Ergebnisse

Der Betrieb des Webradios funktioniert überwiegend problemlos, aber nicht immer perfekt. So gibt es Streams, bei denen das Programm mehrere Anläufe benötigt, bis die Wiedergabe gelingt. Das hängt mit den MP3-Frames zusammen, auf die sich der Decoder erst synchronisieren muss. Der Autor hat bis jetzt nur einen einzigen (französischen) Sender gefunden, der überhaupt nicht funktionierte. Hier sendet die Radiostation vermutlich falsche Daten und bringt den Decoder aus dem Tritt.

Tests mit dem Pico W haben ergeben, dass er für Streams mit einer CBR (“constant bitrate”, konstante Bitrate) von 64 Bit funktioniert, darüber kommt er ins Stottern. Allerdings überträgt zumindest in Deutschland kaum noch ein Sender mit einer derart niedrigen Bitrate, obwohl sie für viele Anwendungsfälle absolut ausreichend wäre.

Mit der hierzulande üblichen CBR von 128 oder 256 Bit kommt erst ein Pico 2W problemlos zurecht. Wichtig ist aber, dass Sie möglichst unverschlüsselte Streams nutzen, also mit http:// statt https:// in der URL, denn das Entschlüsseln ist eine echte Performance-Bremse. Ebenfalls gut funktioniert ein System auf Basis eines ESP32-S3 oder eines ähnlich leistungsfähigen Mikrocontrollers. Da CircuitPython fast auf jeder MCU läuft, stellt das auch softwareseitig kein Problem dar.

Ausblick

Das in diesem Artikel vorgestellte Programm unterstützt keine ICY-Metadaten. Diese Infoschnipsel mischen die Sender auf Anforderung unter die eigentlichen MP3-Daten. Die Trennung von MP3-Frames und ICY-Metadaten würde die kleinen Rechner wahrscheinlich überfordern und ist deshalb nicht implementiert. Ähnliches gilt für einen zusätzlichen Softwaremixer für die Lautstärkeregelung. Mit zukünftigen, leistungsstärkeren MCUs dürfte sich das aber in absehbarer Zeit ändern. Der Code auf Github ist zumindest schon darauf vorbereitet.

Fazit

Die Implementation des Webradios war insgesamt eine einfache Sache. Ein fertiges Projekt jenseits des Breadboard-Stadiums erfordert freilich noch etwas mehr Arbeit. Haben Sie irgendwo noch alte Boxen herumliegen, könnten Sie sie upcyceln und die Komponenten einfach einbauen.

Auch die Software beschränkt sich auf ein Minimum und lädt förmlich zum Ändern und Erweitern ein. Moderne Touchscreens können die Senderauswahl erleichtern, ein kleiner Webserver auf dem Pico 2W würde die Fernbedienung per Smartphone erlauben. Der Autor nimmt jederzeit Pull Requests an und verlinkt auch gern von seinem Webradio-Repo auf alternative Projekte. (jlu)

Der Autor

Bernhard Bablok ist im Ruhestand. Wenn er nicht Musik hört oder mit dem Rad respektive zu Fuß unterwegs ist, beschäftigt er sich mit Themen rund um Linux, Programmierung und Kleincomputer. Sie erreichen ihn unter mailto:[email protected].

Glossar

I<+>2<+>S: Inter-IC Sound. Unidirektionale Schnittstelle für serielle digitale Audiodaten. Kommt typischerweise zur Übertragung digitaler Audiodaten mit Puls-Code-Modulation (PCM) zum Einsatz.

ICY

I Can Yell. Summarische Bezeichnung für Metadaten-Tags und Responses im Streaming-Protokoll des Freeware-Mediaservers Shoutcast [5]. Deren Bezeichnungen beginnen alle mit ICY.

Infos

  1. Simple Radio: https://github.com/bablokb/simple-radio
  2. Luxusradio (Teil 1): Bernhard Bablok, “Schmuckstück”, RPG 10/2021, S. 52, https://www.raspi-geek.de/46115
  3. Pirate Audio HAT: https://www.berrybase.de/pirate-audio-hat-fuer-raspberry-pi-mit-eingebautem-lautsprecher
  4. Webradio für Pico und Co.: https://github.com/bablokb/cp-webradio
  5. Shoutcast: https://de.wikipedia.org/wiki/SHOUTcast
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben