Internetradio mit ESP32

Mittlerweile können viele Radiosender als MP3-Stream über das Internet gehört werden. Und da der ESP32 sowohl WLAN-fähig ist, als auch mit zwei eingebauten Digital/Analog-Wandlern (DAC) den digitalen Datenstrom in ein Analogsignal umwandeln kann, werden wir dieses Board für ein einfaches Internetradio verwenden.

Verwendete Bauteile

Aufbau

Aufbau des Internetradios mit dem ESP32

Da mein altes Internetradio keine Verbindung mehr herstellen konnten und auch sonst keinen Mucks mehr von sich gab, habe ich das Gehäuse und den verbliebenen Lautsprecher wiederverwendet und mit der obigen Schaltung ausgestattet.
Zum Befestigen des Micro-USB-PCB-Adapters musste noch ein kleiner Winkel gedruckt werden, dessen Vorlage im folgenden zum Herunterladen bereit steht.

Befestigung der USB-Buchse

Vorschau für die Befestigung der USB-Buchse

Befestigung für den Micro-USB-PCB-Adapter am bestehenden Gehäuse (3× M3-Schrauben und Muttern werden zusätzlich benötigt)

usb_mount.scad

Programmierung

Um den folgenden Sketch für den ESP32 kompilieren und hochladen zu können, muss zunächst die Arduino-IDE vorbereitet werden. Es wird die Library ESP8266Audio verwendet, die auch direkt in der Arduino-IDE über den Bibliotheks-Manager geladen werden kann.

ESP8266Audio ermöglicht es, digitale Eingangsströme zu lesen, zu dekodieren und über verschiedene Ausgangskanäle wiederzugeben. Als Eingang, kann auch ein HTTP-Stream oder ein ICY-Stream genutzt werden. Letzterer ist wird typischerweise von Internetradios genutzt. Dekodiert werden können die Formate wav, mod, midi, flac, aac und mp3, wobei in unserem Fall nur mp3 benötigt wird. Die Ausgabe erfolgt dann schließlich über I²S erfolgen. Beim ESP32 kann die I²S-Ausgabe auf den internen Digital-Analog-Wandler (DAC) ausgegeben werden. Die Ausgangs-Pins des DAC sind #25 und #26 und liefern damit ein analoges Stereosignal. In diesem Fall wird aber nur ein einfaches Mono-Signal verwendet.

Für die eigene Verwendung muss im folgenden Sketch noch ssid und password für das eigene WLAN angepasst werden. Außerdem kann die URL für das gewünschte Internetradio verändert werden.

#include <Arduino.h>

#include <WiFi.h>
#include "AudioFileSourceICYStream.h"
#include "AudioFileSourceBuffer.h"
#include "AudioGeneratorMP3.h"
#include "AudioOutputI2S.h"

// Credential of the local WiFi
const char* ssid     = "xxxxxxxxxxxxxxx";
const char* password = "xxxxxxxxxxxxxxx";

// URL of internet radio station
const char *URL = "http://streams.rsa-sachsen.de/80erhits/mp3-192/streams.rsa-sachsen.de";

AudioGeneratorMP3 *mp3;
AudioFileSourceICYStream *file;
AudioFileSourceBuffer *buff;
AudioOutputI2S *out;

void setup()
{
    WiFi.disconnect();
    WiFi.softAPdisconnect(true);
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
    }

    file = new AudioFileSourceICYStream(URL);
    buff = new AudioFileSourceBuffer(file, 2048);
    out = new AudioOutputI2S(0, 1); // use the internal DAC channel 1 (pin25) on ESP32
    mp3 = new AudioGeneratorMP3();
    mp3->begin(buff, out);
}

void loop()
{
    if (mp3->isRunning()) {
        if (!mp3->loop()) {
            mp3->stop();
        }
    } else {
        delay(1000);
    }
}

Weiterführende Ideen

Dies ist nur eine sehr simple Version eines Internetradios mit einem festen Sender, so dass noch viel Spielraum für weiterführende Ideen bleibt, z.B.:

Ein Hinweis von Torsten aus Köln: Wenn man kein Verstärker-Modul verfügbar hat, so kann man auch das Audiosignal über einen 47nF Folienkondensator direkt an PIN25 auskoppeln und dann in einen normalen HiFi-Verstärker leiten. Soll einen kristallklaren Klang haben. Vielen Dank für den Hinweis! 👍

zurück