Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery

UPDATE: Der Leser Andreas Schröder hat das Projekt ein wenig verändert und einige Funktionen Ergänzt. Den Text und Sketch dazu finden Sie am Ende des Beitrags.

Viele Radiosender können als MP3-Stream über das Internet gehört werden. Da der Mikrocontroller ESP32 einerseits WLAN-Fähigkeiten besitzt und andererseits mit zwei eingebauten Digital/Analog-Wandlern den digitalen Datenstrom in ein Analogsignal umwandeln kann, bietet er sich für dieses Projekt als ideale Lösung an. Zusätzlich wird eine Akku-Stromversorgung, ein Audioverstärker, zwei Lautsprecher, ein Display zur Senderanzeige und ein Eingabegerät zur Sendereinstellung benötigt. Abgerundet wird das Ganze mit einem Gehäuse aus dem 3D-Drucker.

Benötigte Hardware

Anzahl Bauteil Anmerkung

1

ESP32 Development Board

 

1

Audio-Verstärker 3W

 

1

Lautsprecher

 

2

Widerstände 4.7 kOhm

 

2

Widerstände 22 kOhm

 

1

Widerstand 10 kOhm

 

1

Elko 1000uF / 10V

 

1

3.7V Akku 2000mAh

 

1

Laderegler

 

1

DC-DC Step Up Converter

 

1

LCD-Display mit I2C Interface

 

1

Drehgeber Encoder

 

1

Lochrasterplatte 50x70

 

2

Federleisten 19-polig

 

1

Stiftleiste 3-polig

 

1

 Stiftleiste 4-polig

 

1

Stiftleiste 5-polig

 

2

Drehknöpfe für 6mm Achse

 

Mehrere

Jumperkabel weiblich zu weiblich

 

1

Gehäuse Frontteil aus dem 3D-Drucker

 

1

Gehäuse Rückseite aus dem 3D-Drucker

 

1

Deckel zur Akku-Sicherung aus dem 3D-Drucker

 

diverse

Befestigungsschrauben 2.2mm

 

 

Schaltung

 

Wichtig!
Sollte der Rotary-Encoder nicht verwendet werden, muss der Pin 34 des ESP32 trotzdem mit dem 10kOhm Widerstand mit 3.3V verbunden werden.

Der ESP32 wird mit den Widerständen und Stiftleisten für die Peripherie auf einer 50x70 mm großen Lochrasterplatte aufgebaut.


Die Abbildung zeigt die Bestückung und die Verdrahtung auf der Unterseite

Verdrahtung

Als erstes wird der Batterieanschluss des Ladereglers mit dem Eingang des DC-DC Step Up Wandlers verbunden. Polung beachten! Der Akku wird über einen geeigneten Steckverbinder ebenfalls mit dem Batterie-Eingang des Ladereglers verlötet. Nun sollte die Ausgangsspannung des Wandlers mit dem blauen Potentiometer auf ca. 5.2 V eingestellt werden. Dazu muss entweder ein Akku angeschlossen oder der USB-Eingang des Ladereglers mit einem USB-Netzgerät verbunden werden.

Wenn die Spannung eingestellt ist, kann der Ausgang des Wandlers mit dem Versorgungseingang des Audioverstärkers verbunden werden. Auf der Rückseite des Verstärkers sind zwei Lötpunkte, wobei der Plus Anschluss über den Schalter des Lautstärkepotentiometer geschaltet wird.

 verstärker unterseite

Dieser Anschluss wird zur Versorgung des ESP32 und des Displays verwendet, damit man über das Potentiometer, das Gerät komplett ausschalten kann.
Nun können die Verbindungen zur Steuerplatine auf der Lochrasterplatte hergestellt werden. Am besten werden dazu Jumper-Drähte mit zwei weiblichen Steckern verwendet. Man benötigt eine 3-polige Verbindung vom Audio-Ausgang zum Verstärker, eine 4-polige zum Display und eine 5-polige zum Rotary-Encoder.

Wichtiger Hinweis!
Die Lautsprecher sollten nicht im eingeschalteten Zustand an- oder abgesteckt werden, da induktiver Spannungsspitzen die Verstärkerausgänge zerstören könnten.

Wird das im Blog-Beitrag vorgestellte Gehäuse verwendet, kommt Akku, Laderegler, DC/DC-Wandler und die Steuerplatine auf die Backplane. Die Lautsprecher, der Verstärker, der Rotary-Encoder und das Display kommen auf die Frontplane. Der Deckel wird verwendet, um den Akku zu sichern.

 backplanezusammenbau

Software

Damit der Sketch kompiliert werden kann, muss die Arduino IDE entsprechend vorbereitet werden. Die Arduino IDE unterstützt standardmäßig eine große Anzahl von Boards mit unterschiedlichen Mikrocontrollern, nicht aber den ESP32. Damit man Programme für diese Controller erstellen und hochladen kann, muss daher je ein Softwarepaket für die Unterstützung installiert werden.

Zuerst müssen Sie der Arduino-IDE mitteilen, wo sie die zusätzlich benötigten Daten findet. Dazu öffnen Sie im Menü Datei den Punkt Voreinstellungen. Im Voreinstellungs-Fenster gibt es das Eingabefeld mit der Bezeichnung „Zusätzliche Boardverwalter URLs“. Wenn Sie auf das Ikon rechts neben dem Eingabefeld klicken, öffnet sich ein Fenster in dem Sie die URL https://dl.espressif.com/dl/package_esp32_index.json für den ESP32 eingeben können. Es sollte für dieses Projekt nicht die Version 2.0.0 oder höher des ESP32 Pakets verwendet werden, da es mit diesen Versionen Probleme im Zusammenhang mit der ESP8266Audio Bibliothek gibt!

Nun wählen Sie in der Arduino IDE unter Werkzeug → Board die Boardverwaltung.

Es öffnet sich ein Fenster, in dem alle zur Verfügung stehenden Pakete aufgelistet werden. Um die Liste einzugrenzen, gibt man im Suchfeld „esp32“ ein. Dann erhält man nur noch einen Eintrag in der Liste. Installieren Sie das Paket „esp32“.

esp32 lib
Für das Display benötigen Sie eine Bibliothek, die über die Arduino Bibliotheksverwaltung installiert werden kann. Das ist die Bibliothek „LiquidCrystal I2C“.

Liquid crystal lib

Eine weitere Bibliothek wird für den Rotary-Encoder benötigt. Ihr Name ist „AiEsp32RotaryEncoder“.

Rotary encoder lib 

Kernstück dieses Projekts ist aber die Bibliothek „ESP8266Audio“.

 audio lib

Diese Bibliothek ermöglicht es verschiedene digitale Eingangsströme zu lesen, zu dekodieren und über verschiedene Ausgangskanäle wiederzugeben. Als Eingang, kann der Programmspeicher, der interne RAM ein Filesystem, eine SD-Karte, ein HTTP-Stream oder ein ICY-Stream genutzt werden. Der ICY-Stream wird typisch von Internet-Radios genutzt.
Dekodiert werden können WAV, MOD, MIDI, FLAC, AAC und MP3 Dateien. Für das Webradio wird MP3 benötigt. Die Ausgabe kann schließlich in Speicher, Files oder I2S erfolgen. Eine Besonderheit gibt es für den ESP32. Der I2S Output kann auf den internen Digital-Analog-Wandler ausgegeben werden. An den Ausgangs-Pins des DAW (Pin 25 und Pin 26) steht dann ein analoges Stereosignal zur Verfügung. Dieses Feature wird im vorliegenden Projekt genutzt.

Wenn alle Bibliotheken installiert sind, kann der Sketch kompiliert und auf die Hardware hochgeladen werden.

Der Sketch

#include <WiFi.h> 
//Includes from ESP8266audio
#include "AudioFileSourceICYStream.h" //input stream
#include "AudioFileSourceBuffer.h"    //input buffer
#include "AudioGeneratorMP3.h"        //decoder
#include "AudioOutputI2S.h"           //output stream
//library for LCD display
#include <LiquidCrystal_I2C.h>
//library for rotary encoder
#include "AiEsp32RotaryEncoder.h"
//esp32 library to save preferences in flash
#include <Preferences.h>

//WLAN access fill with your credentials
#define SSID "************"
#define PSK "*************"

//used pins for rotary encoder
#define ROTARY_ENCODER_A_PIN 33
#define ROTARY_ENCODER_B_PIN 32
#define ROTARY_ENCODER_BUTTON_PIN 34
#define ROTARY_ENCODER_VCC_PIN -1 /* 27 put -1 of Rotary encoder Vcc is connected directly to 3,3V; else you can use declared output pin for powering rotary encoder */

//depending on your encoder - try 1,2 or 4 to get expected behaviour
//#define ROTARY_ENCODER_STEPS 1
//#define ROTARY_ENCODER_STEPS 2
#define ROTARY_ENCODER_STEPS 4

//structure for station list
typedef struct {
  char * url;  //stream url
  char * name; //stations name
} Station;

#define STATIONS 24 //number of stations in tzhe list

//station list can easily be modified to support other stations
Station stationlist[STATIONS] PROGMEM = {
{"http://icecast.ndr.de/ndr/ndr2/niedersachsen/mp3/128/stream.mp3","NDR2 Niedersachsen"},
{"http://icecast.ndr.de/ndr/ndr1niedersachsen/hannover/mp3/128/stream.mp3","NDR1 Hannover"},
{"http://wdr-1live-live.icecast.wdr.de/wdr/1live/live/mp3/128/stream.mp3","WDR1"},
{"http://wdr-cosmo-live.icecast.wdr.de/wdr/cosmo/live/mp3/128/stream.mp3","WDR COSMO"},
{"http://radiohagen.cast.addradio.de/radiohagen/simulcast/high/stream.mp3","Radio Hagen"},
{"http://st01.sslstream.dlf.de/dlf/01/128/mp3/stream.mp3","Deutschlandfunk"},
{"http://dispatcher.rndfnk.com/br/br1/franken/mp3/low","Bayern1"},
{"http://dispatcher.rndfnk.com/br/br3/live/mp3/low","Bayern3"},
{"http://dispatcher.rndfnk.com/hr/hr3/live/mp3/48/stream.mp3","Hessen3"},
{"http://stream.antenne.de/antenne","Antenne Bayern"},
{"http://stream.1a-webradio.de/saw-deutsch/","Radio 1A Deutsche Hits"},
{"http://stream.1a-webradio.de/saw-rock/","Radio 1A Rock"},
{"http://streams.80s80s.de/ndw/mp3-192/streams.80s80s.de/","Neue Deutsche Welle"},
{"http://dispatcher.rndfnk.com/br/brklassik/live/mp3/low","Bayern Klassik"},
{"http://mdr-284280-1.cast.mdr.de/mdr/284280/1/mp3/low/stream.mp3","MDR"},
{"http://icecast.ndr.de/ndr/njoy/live/mp3/128/stream.mp3","N-JOY"},
{"http://dispatcher.rndfnk.com/rbb/rbb888/live/mp3/mid","RBB"},
{"http://dispatcher.rndfnk.com/rbb/antennebrandenburg/live/mp3/mid","Antenne Brandenburg"},
{"http://wdr-wdr3-live.icecastssl.wdr.de/wdr/wdr3/live/mp3/128/stream.mp3","WDR3"},
{"http://wdr-wdr2-aachenundregion.icecastssl.wdr.de/wdr/wdr2/aachenundregion/mp3/128/stream.mp3","WDR 2"},
{"http://rnrw.cast.addradio.de/rnrw-0182/deinschlager/low/stream.mp3","NRW Schlagerradio"},
{"http://rnrw.cast.addradio.de/rnrw-0182/deinrock/low/stream.mp3","NRW Rockradio"},
{"http://rnrw.cast.addradio.de/rnrw-0182/dein90er/low/stream.mp3","NRW 90er"},
{"http://mp3.hitradiort1.c.nmdn.net/rt1rockwl/livestream.mp3","RT1 Rock"}};

//buffer size for stream buffering
const int preallocateBufferSize = 80*1024;
const int preallocateCodecSize = 29192;         // MP3 codec max mem needed
//pointer to preallocated memory
void *preallocateBuffer = NULL;
void *preallocateCodec = NULL;

//instance of prefernces
Preferences pref;
//instance for rotary encoder
AiEsp32RotaryEncoder rotaryEncoder = AiEsp32RotaryEncoder(ROTARY_ENCODER_A_PIN, ROTARY_ENCODER_B_PIN, ROTARY_ENCODER_BUTTON_PIN, ROTARY_ENCODER_VCC_PIN, ROTARY_ENCODER_STEPS);
//instance for LCD display
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
//instances for audio components
AudioGenerator *decoder = NULL;
AudioFileSourceICYStream *file = NULL;
AudioFileSourceBuffer *buff = NULL;
AudioOutputI2S *out;

//Special character to show a speaker icon for current station
uint8_t speaker[8]  = {0x3,0x5,0x19,0x11,0x19,0x5,0x3};
//global variables
uint8_t curStation = 0;   //index for current selected station in stationlist
uint8_t actStation = 0;   //index for current station in station list used for streaming 
uint32_t lastchange = 0;  //time of last selection change

//callback function will be called if meta data were found in input stream
void MDCallback(void *cbData, const char *type, bool isUnicode, const char *string)
{
  const char *ptr = reinterpret_cast<const char *>(cbData);
  (void) isUnicode; // Punt this ball for now
  // Note that the type and string may be in PROGMEM, so copy them to RAM for printf
  char s1[32], s2[64];
  strncpy_P(s1, type, sizeof(s1));
  s1[sizeof(s1)-1]=0;
  strncpy_P(s2, string, sizeof(s2));
  s2[sizeof(s2)-1]=0;
  Serial.printf("METADATA(%s) '%s' = '%s'\n", ptr, s1, s2);
  Serial.flush();
}

//stop playing the input stream release memory, delete instances
void stopPlaying() {
  if (decoder)  {
    decoder->stop();
    delete decoder;
    decoder = NULL;
  }
  if (buff)  {
    buff->close();
    delete buff;
    buff = NULL;
  }
  if (file)  {
    file->close();
    delete file;
    file = NULL;
  }
}

//start playing a stream from current active station
void startUrl() {
  stopPlaying();  //first close existing streams
  //open input file for selected url
  Serial.printf("Active station %s\n",stationlist[actStation].url);
  file = new AudioFileSourceICYStream(stationlist[actStation].url);
  //register callback for meta data
  file->RegisterMetadataCB(MDCallback, NULL); 
  //create a new buffer which uses the preallocated memory
  buff = new AudioFileSourceBuffer(file, preallocateBuffer, preallocateBufferSize);
  Serial.printf_P(PSTR("sourcebuffer created - Free mem=%d\n"), ESP.getFreeHeap());
  //create and start a new decoder
  decoder = (AudioGenerator*) new AudioGeneratorMP3(preallocateCodec, preallocateCodecSize);
  Serial.printf_P(PSTR("created decoder\n"));
  Serial.printf_P("Decoder start...\n");
  decoder->begin(buff, out);
}

//show name of current station on LCD display
//show the speaker symbol in front if current station = active station
void showStation() {
  lcd.clear();
  if (curStation == actStation) {
    lcd.home();
    lcd.print(char(1));
  }
  lcd.setCursor(2,0);
  String name = String(stationlist[curStation].name);
  if (name.length() < 15)
    lcd.print(name);
  else {
    uint8_t p = name.lastIndexOf(" ",15); //if name does not fit, split line on space
    lcd.print(name.substring(0,p));
    lcd.setCursor(0,1);
    lcd.print(name.substring(p+1,p+17));
  }
}

//handle events from rotary encoder
void rotary_loop()
{
  //dont do anything unless value changed
  if (rotaryEncoder.encoderChanged())
  {
    uint16_t v = rotaryEncoder.readEncoder();
    Serial.printf("Station: %i\n",v);
    //set new currtent station and show its name
    if (v < STATIONS) {
      curStation = v;
      showStation();
      lastchange = millis();
    }
  }
  //if no change happened within 10s set active station as current station
  if ((lastchange > 0) && ((millis()-lastchange) > 10000)){
    curStation = actStation;
    lastchange = 0;
    showStation();
  }
  //react on rotary encoder switch
  if (rotaryEncoder.isEncoderButtonClicked())
  {
    //set current station as active station and start streaming
    actStation = curStation;
    Serial.printf("Active station %s\n",stationlist[actStation].name);
    pref.putUShort("station",curStation);
    startUrl();
    //call show station to display the speaker symbol
    showStation();
  }
}

//interrupt handling for rotary encoder
void IRAM_ATTR readEncoderISR()
{
  rotaryEncoder.readEncoder_ISR();
}

//setup
void setup() {
  Serial.begin(115200);
  delay(1000);
  //reserve buffer für for decoder and stream
  preallocateBuffer = malloc(preallocateBufferSize);          // Stream-file-buffer
  preallocateCodec = malloc(preallocateCodecSize);            // Decoder- buffer
  if (!preallocateBuffer || !preallocateCodec)
  {
    Serial.printf_P(PSTR("FATAL ERROR:  Unable to preallocate %d bytes for app\n"), preallocateBufferSize+preallocateCodecSize);
    while(1){
      yield(); // Infinite halt
    }
  } 
  //start rotary encoder instance
  rotaryEncoder.begin();
  rotaryEncoder.setup(readEncoderISR);
  rotaryEncoder.setBoundaries(0, STATIONS, true); //minValue, maxValue, circleValues true|false (when max go to min and vice versa)
  rotaryEncoder.disableAcceleration();
  //init WiFi
  Serial.println("Connecting to WiFi");
  WiFi.disconnect();
  WiFi.softAPdisconnect(true);
  WiFi.mode(WIFI_STA);
  WiFi.begin(SSID, PSK);
  // Try forever
  while (WiFi.status() != WL_CONNECTED) {
    Serial.println("...Connecting to WiFi");
    delay(1000);
  }
  Serial.println("Connected");
  //create I2S output do use with decoder
  //the second parameter 1 means use the internal DAC
  out = new AudioOutputI2S(0,1);
  //init the LCD display
  lcd.init();
  lcd.backlight();
  lcd.createChar(1, speaker);
  //set current station to 0
  curStation = 0;
  //start preferences instance
  pref.begin("radio", false);
  //set current station to saved value if available
  if (pref.isKey("station")) curStation = pref.getUShort("station");
  if (curStation >= STATIONS) curStation = 0;
  //set active station to current station 
  //show on display and start streaming
  actStation = curStation;
  showStation();
  startUrl();
}

void loop() {
  //check if stream has ended normally not on ICY streams
  if (decoder->isRunning()) {
    if (!decoder->loop()) {
      decoder->stop();
    }
  } else {
    Serial.printf("MP3 done\n");

    // Restart ESP when streaming is done or errored
    delay(10000);

    ESP.restart();
  }
  //read events from rotary encoder
  rotary_loop();

} 

Sketch zum Herunterladen

Vor dem Kompilieren muss die SSID und das Passwort für das WLAN gesetzt werden. Am Anfang des Sketchs ist eine Liste mit 24 deutschen Radiostationen. Sie können diese beliebig editieren oder erweitern, um Ihr gewünschtes Programm zu hören. Es können maximal 100 Stationen definiert werden.

Nach dem Hochladen kann das Programm gestartet werden. Mit dem Rotary-Encoder kann durch die Senderliste gescrollt werden. Drückt man den Knopf des Rotary-Encoder, wird der gerade angezeigte Sender als aktiv gesetzt. Diese Auswahl wird im Flash gespeichert, sodass nach einer Stromunterbrechung das Programm wieder mit dem ausgewählten Sender gestartet wird. Die gerade wiedergegebene Station wird im Display durch ein vorangestelltes Lautsprecher-Symbol angezeigt.

Fertiges Gerät

Viel Vergnügen mit dem Internet Radio

Beitrag als PDF

Update von unserem Leser Andreas Schröder

(danke an dieser Stelle)

Mit geschnittener schwarzer Folie auf weißem Gehäuse sieht es echt gut aus.

Weil das auf- und zuschrauben nicht prickelnd ist, habe ich den Code um folgendes erweitert:

1. einen automatischen AP-Modus bei fehlender WLAN-Verbindung, der dann per Webserver die Zugangsdaten abfragt.

2. Im normalen Betrieb kann die Senderliste über ein Webfrontend gepflegt werden. Hätte hier gerne den Code, Screenshots und die Plotterdatei für die Folie bereitgestellt.

WLAN

Die WLAN-Konfiguration wird im internen Flash-Speicher vorgehalten. Diese kann per Weboberfläche konfiguriert werden. Der Konfigurationsablauf ist wie folgt:

  • Laden der gespeicherten Login-Daten

  • Versuch der Verbindungs-Herstellung (Display zeigt „WLAN“)

  • Wenn das nicht möglich ist

    • Wechsel in den AP-Modus und erzeugen des WLANs „WEBRADIO“

    • Erwarten der Dateneingabe unter http://192.168.4.1

    • Neustart mit neuen Daten

==> Das ganze wiederholt sich, bis eine Verbindung möglich ist

 

 

Senderliste

Die Liste der hinterlegten Sender kann über http:// angepasst werden.

 

Sketches Download

 

Plotterdatei (Silhouette-Format)

DisplaysEsp-32Projekte für anfängerStromversorgung

222 Reacties

Gerhard Kündig

Gerhard Kündig

Hallo Gerald
Auch ich habe Probleme mit dem Code. Beide Arduino.ide Versionen (1.8.12 und 2.2.1)kompilieren mir den Sketch, er wird auch hochgeladen, dann aber rebootet das Modul dauernd nach der Zeile «Decoder Start». Nun habe ich die Zeile * (file→RegisterMetadataCB(MDCallback, NULL); )* auskommentiert, was bei mir nicht viel brachte. Mit etwas Glück hört man für ein bis zwei Sekunden den Ton korrekt, dann kratzt es nur noch. Nach all den Kommentaren bin ich auch der Überzeugung, dass die Bibliothek «ESP8266Audio» sich mit dem Board nicht verträgt. Übrigens in der Boardverwaltung findet man die Version esp32-2.0.9 nicht mehr. Also habe ich die beiden höheren Versionen ausprobiert.
Vielleicht stellt jemand im Forum eine funktionierende .bin Datei zur Verfügung, das wäre auch sehr nett. Das Problem zeigt sich bei mehreren ESP32 Node MCU-Modulen identisch.
Gerhard Kündig

Eckmar Schmitz

Eckmar Schmitz

Leider ist die STL Datei für den Deckel nicht zu gebrauchen. Sie ist nicht druckbar. Beim Schaltbild fehlen einige Verbindungen. Auch das ist so unbrauchbar. Wenn möglich korrigieren.

Rene

Rene

Geht leider nicht :(

20:23:37.335 → Connecting to WiFi
20:23:37.433 → …Connecting to WiFi
20:23:38.456 → Connected
20:23:39.542 → Gespeicherte Station 8 von 25
20:23:39.542 → Active station http://dispatcher.rndfnk.com/br/br3/live/mp3/low
20:23:39.805 → sourcebuffer created – Free mem=126696
20:23:39.805 → created decoder
20:23:39.805 → Decoder start…
20:23:40.331 → Guru Meditation Error: Core 1 panic’ed (LoadProhibited). Exception was unhandled.

Jörg Braun

Jörg Braun

Sehr schön, vielen Dank.
Einziges Problem, die Plotter-Datei im Silhouette-Format. Silhouette gibt es auch nur für Windows. www.online-convert.com mochte die Datei bei mir nicht, dafür http://www.ideas-r-us-software.uk/FileConverters/SilhouetteStudioConverter.aspx.
Mit SVG kommt man dann weiter.

Alberto Borsetta

Alberto Borsetta

Is it also possible to share 3D models (.stl or other) for printing of the enclosure? Thanks, Alberto

Michael-S

Michael-S

tolles Projekt, kommt für mich gerade zur rechten Zeit. Wohne in schlechter Empfangslage und hatte bisher analoge Radiosender über Kabel. Jetzt hat Vodafone die analogen Kanäle abgeschaltet und da wäre das ESP32 Webradio – ohne alle externen Komponenten – genau das Richtige (Audio direkt über den Aux Eingang in den AV Receiver).
Leider funktioniert das Decodieren meiner lokalen Sender SWR1 und SWR3 nicht.

Beispiel: liveradio.swr.de/sw282p3/swr1bw/play.mp3 bzw. liveradio.swr.de/sw282p3/swr3/play.mp3
Wenn ich die Adresse im Browser eingebe, wird dieser weitergeleitet:
http://d121.rndfnk.com/ard/swr/swr3/live/mp3/128/stream.mp3?aggregator=web&cid=01FC1X5J7PN2N3YQPZYT8YDM9M&sid=2bRYvGg48qLoJX6kXZ8h821Ooqu&token=b9TBNhKWbE9D53Q7zcaQUtrBvp3_FyBQbG0GHq0BD5Q&tvf=Vv0VhPCkrRdkMTIxLnJuZGZuay5jb20

Mit dem Browser, vlc oder mpv funktioniert das problemlos, aber nicht mit dem ESP32.
Ich hab mal versucht, das mittels ffmpeg “umzuleiten”:
ffmpeg -re -i https://liveradio.swr.de/sw282p3/swr1bw/play.mp3 -vcodec none -acodec copy -ac 2 -b:a 128k -content_type audio/mpeg -f mp3 -listen 1 http://192.168.1.24:8888/stream.mp3
damit entfällt die Umleitung mit den aggregator und cid Paramter, funktioniert mit dem ESP32 aber trotzdem nicht.
Hat jemand eine Idee, wie ich das zum laufen bekomme?
Vielen Dank und Grüße
Michael

Siegfried

Siegfried

@Jörg: Bei SSID dort kommt der WLan Name und PSK ist Dein WLan Passwort und beides in die Anführungszeichen setzen …

Jörg

Jörg

Habe mich soweit durchgekämpft, die ARDUINO Oberfläche meldet Übertragung zu 100% abgeschlossen. Es ist jedoch nur Rauschen zu hören. Im Display erscheint nur die untere Zeile jedoch ist auch diese leer. Bei define PSK weiß ich nicht was ich da eintragen soll, ist das Phase Shift Keying? Was wäre da passend? Für die Bibliothek „LiquidCrystal I2C“ finde ich einige Einträge, ich habe scheinbar nicht die Passende gewählt. Gibt es da eine Empfehlung? Überhaupt stehen manche Versionsnummern gar nicht mehr zur Auswahl.
Wäre sehr froh über Hilfe.

Holger

Holger

Hallo zusammen,
ich finde das Projekt echt gelungen. Noch besser wäre es, wenn eine Sprachsteuerung integriert wäre (ohne irgend eine Cloud-Anwendung zu nutzen). Also keine Alexa o. ä.
Kennt jemand so ein Projekt ?
Gruß Holger

Aust, Jan

Aust, Jan

Ich würde es begrüßen, wenn die passiven Bauteile beim Bausatz dabei wären, zu mindestens die Widerstände und der Kondensator, die man direkt für die Funktion des Ganzen benötigt.

W.Müller

W.Müller

Hallo ihr ESP Radio Programmierer,
ich habe das Projekt auch bei mir umgesetzt und bin total begeistert. Vilen Dank allen, die daran beteiligt waren und sind. Ich habe allerdings ein Problem. Ich möchte neben den reinen Internetradiosender gern auch von meiner Synology (NAS) MP3 streamen. Leider bekomme ich das so nicht hin. Wenn ich z.B statt eines Internetsenders folgenden Eintrag einstelle: “http://192.168.×.x:80/Gruppe – Titel.mp3” funktioniert es einwandfrei. Gebe aich allerdings eine M3U Playlist an, stützt das Programm ab und der ESP startet neu.
Frage:
Wie kann ich auf meinem NAS eine Playlist abspielen?
Herzlichen Dank für Tipps
Wigbert

Alf W.

Alf W.

Gibt es zu diesem Problem noch eine weitere Lösung? —> Ich hatte auch das Problem, dass der Prozessor offenbar immer neu startete. Ich habe den Aufruf (file→RegisterMetadataCB(MDCallback, NULL); ) auch auskommentiert. Damit started der Prozessor nicht immer wieder. Der aktuelle Sender wird abgespielt, ich kann andere Sender wählen – diese werden aber nicht abgespielt – nach ein paar Sekunden wird wieder der erste Sender abgespielt.

Werner Boellmann

Werner Boellmann

P.S. warum den Quelltext auf dem “Schrott” Google-Drive veröffentlichen. Ich lehne es ab mich dort zu registrieren – und ohne Registrierung komt man die Dateien nicht ran.
Ich weiß – die wollen nur unser Bestes. Aber das bekommen die nicht!

Werner Boellmann

Werner Boellmann

|Klaus P.
: MDCallback()
Ich vermute, daß
1. es im MDCallback() zu einem Stack-Overflow kommt,
2. oder/und der Callback im Kontext einer ISR aufgerufen wird.
Zum Testen:
1. Im Callback " char s132, s264;" als static deklarieren. Dann wird der Speicher fest reserviert und nicht auf dem Stack.
2. den Callback als “void IRAM_ATTR” deklarieren.

Klaus P.

Klaus P.

@Gerald Lechner
Ich hatte auch das Problem, dass der Prozessor offenbar immer neu startete. Bei mir hat es geholfen die MDCallback-Funktion und den Aufruf (file→RegisterMetadataCB(MDCallback, NULL); ) zu löschen bzw. auszukommentieren. Vielleicht findet ja jemand die Ursache?

Gerald Lechner

Gerald Lechner

Hallo Manfred
das programm stürzt ab, wenn der MP3 dekoder gestartet wird. Es könnte sein, dass die Versionen von ESP8266Audio und dem ESP32 Package nicht zusammenpassen. Definitiv funktioniert ESP8266Audio Version 1.9.7 zusammen mit dem ESP32 Package Version 2.0.9
Eine weitere Ursache könnte sein, dass der ESP32 zu viel Strom zieht und die Stromversorgung zu schwach ist. Diese Ursache halte ich aber für sehr unwahrscheinlich.

Lampl Manfred

Lampl Manfred

Hallo Gerald
Hier die Ausgabe von seriellen Monitor:

Verbinde mit WiFi ….IP-Adresse per DHCP ist 192.168.0.32
Connected
Webserver ist gestartet
Active station http://icecast.ndr.de/ndr/ndr2/niedersachsen/mp3/128/stream.mp3
sourcebuffer created – Free mem=67928
created decoder
Decoder start…
Guru Meditation Error: Core 1 panic’ed (LoadProhibited). Exception was unhandled.

Core 1 register dump:
PC : 0×4008ae4d PS : 0×00060d30 A0 : 0×80157dfc A1 : 0×3ffcbb50
A2 : 0×00000000 A3 : 0xfffffffc A4 : 0×000000ff A5 : 0×0000ff00
A6 : 0×00ff0000 A7 : 0xff000000 A8 : 0×00000000 A9 : 0×3ffcbf50
A10 : 0×3ffc55e4 A11 : 0×00000588 A12 : 0×0000001c A13 : 0×00000002
A14 : 0×00000000 A15 : 0×00000000 SAR : 0×00000018 EXCCAUSE: 0×0000001c
EXCVADDR: 0×00000000 LBEG : 0×4008ae4d LEND : 0×4008ae5d LCOUNT : 0xffffffff

Gerald Lechner

Gerald Lechner

@Pit: Sie haben im Prinzip recht. Da beide Signalleitungen vom ESP32 als Ausgang betrieben werden ist es aber nicht ganz so kritisch. Ich hatte noch keine Probleme damit.
Die Pullup Widerstände sind 4,7kOhm. wenn man beide Leitungen über 10kOhm mit Masse
verbindet ändert sich die Leerlaufspannung von 5V auf 3.4 V. Spannungsteiler 5 / (4.7 + 10) * 4.7 = 3.4
@Manfred Lampl: Um helfen zu können benötige ich mehr Informationen. Zumindest die Ausgabe vom seriellen Monitor.

Manfred Lampl

Manfred Lampl

Hallo
Habe mit Erfolg den ESP32 geflasht, leider wechselt die Anzeige ständig zwischen WLAN und den 1. Sender in Sekunden Takt hin und her. dh. der ESP bootet ständig …
was kann das sein.
Bitte um Hilfe.
bedanke mich im vorraus für die Unterstützung.
Manfred

Pit

Pit

Hi,
ich finde die Anschaltung des Display es etwas “gefaehrlich” fuer den ESP32,
denn so wie dargestellt wird der I2C ueber die PullUps auf der Display-Interfaceplatine
auf 5V gezogen, der ESP32 mag aber , soweit mir bekannt , keine 5V am GPIO.
Deswegen wuerde ich vorschlagen entweder das Display auf 3V3 oder die PullUps
von der Interfaceplatine entfernen und 2 neue gegen 3V3 in die Schaltung zu integrieren.

Thomas

Thomas

Hallo,
habe das Radio gebaut – läuft mit den meisten der vorbereiteten Sender.
Suche nach einem funktionierenden URL für “Radio SwissClassic”.
Hat den jemand in seiner Liste?
Herzlichen Dank für das tolle Projekt und einen hoffentlich bald spielenden Lieblingssender!
Thomas

Siegfried

Siegfried

@ Waldi65: bei mir gibt es solch Reaktion, wenn der 10 k Widerstand am GPIO 35 zum 3,3 V Anschluss fehlt (Encoder Sender SW muss ja nicht unbedingt angeschlossen sein)

Waldi65

Waldi65

ich bekomme das ding nicht zum laufen. Audio 1.9.5 esp 1.0.6. es wird in einer Schleife rebootet mit folgendem output:
17:52:42.392 → load:0×40080400,len:3600
17:52:42.392 → entry 0×400805f0
17:52:43.770 → Connecting to WiFi
17:52:43.890 → …Connecting to WiFi
17:52:44.880 → Connected
17:52:46.035 → End Serup!
17:52:46.035 → Guru Meditation Error: Core 1 panic’ed (LoadProhibited). Exception was unhandled.
17:52:46.035 →
17:52:46.035 → Core 1 register dump:
17:52:46.035 → PC : 0×400d2fe4 PS : 0×00060b30 A0 : 0×800e22b4 A1 : 0×3ffb2270
17:52:46.035 → A2 : 0×3ffc451c A3 : 0×3ffc4788 A4 : 0×00000000 A5 : 0×00000017
17:52:46.035 → A6 : 0×3ffb8188 A7 : 0×80000001 A8 : 0×800d2fc8 A9 : 0×3ffb2240
17:52:46.068 → A10 : 0×00000000 A11 : 0×0000000a A12 : 0×3ffc4bd4 A13 : 0×00000000
17:52:46.068 → A14 : 0×00000000 A15 : 0×00000001 SAR : 0×0000001f EXCCAUSE: 0×0000001c
17:52:46.068 → EXCVADDR: 0×00000000 LBEG : 0×4008ad31 LEND : 0×4008ad41 LCOUNT : 0xfffffffd
17:52:46.068 →
17:52:46.068 →
17:52:46.068 → Backtrace: 0×400d2fe1:0×3ffb2270 0×400e22b1:0×3ffb2290
17:52:46.068 →
17:52:46.068 →
17:52:46.068 →
17:52:46.068 →
17:52:46.068 → ELF file SHA256: ecf99bcd61080b16
17:52:46.103 →
17:52:46.135 → Rebooting…
17:52:46.135 → ets Jul 29 2019 12:21:46

Oliver Mittelstedt

Oliver Mittelstedt

wann gibt es das set wieder zum kaufen

Günter R.

Günter R.

Nachtrag: Zur nur einkanaligen und verzerrten Ausgabe finde ich nun folgende Fehlermeldung im seriellen Monitor:

Station: 5
Active station Deutschlandfunk

Active station http://st01.sslstream.dlf.de/dlf/01/128/mp3/stream.mp3
sourcebuffer created – Free mem=87248
created decoder
Decoder start…
E (228122) I2S: register I2S object to platform failed
Nachrichten, Deutschlandfunk-Nachrichtenredaktion

Nun verwende ich den ESP-32 Wroom… könnte es Konflikte im Soundmodul der Plattformen geben? Alle anderen Features funktionieren einwandfrei, keine Compiler-Warnungen etc. Die ESP32Audio-Lib funktioniert dabei nur in der Version 1.9.7, alle anderen Versionen versagen.
Vielen Dank für alle Hilfe-Ideen im Voraus
Günter

GuidoJ

GuidoJ

Hallo Geradl und Andreas,
ich habe das Radio seit heute am funktionieren. Ich verwende den update von Andreas. Vielen Dank auf diesem weg für dieses Projekt.

Wo ich am meisten kämpfen musste war, die richtigen Versionen der Boards und LIBs zu finden, das war echt ne Challenge

In der Arduino Umgebung ist es auch schwer nachzuvollziehen, welche LIB am Ende verwendet wird.

Nochmals Danke :-)

Geyer Mario

Geyer Mario

Hallo Gerald,
erstmal vielen Dank für das tolle Projekt.
Habe es nachgebaut, nach ein paar anfänglichen Schwierigkeiten (Fehlermeldungen der Arduino IDE, Kontrast des Display) funktioniert es sehr gut.
Ein Problem habe ich noch. Mit nicht funktionierenden Sendern hängt sich das Radio auf. Ich bekomme es nur mit erneuten Hochladen des Sketches
wieder zum “Laufen”. Ich verwende den Sketch https://drive.google.com/file/d/1p4yQgZXTW-PPM-eKDq0UaH6RVy-SruYn/view?usp=sharing, welcher in der Beschreibung nach dem Sketch zum Download enthalten ist. Kann man das Hochladen umgehen.
Ich bin absoluter Neuling in der “Materie” muss ich noch dazu sagen.

Viele Grüße Mario

Thomas Anton

Thomas Anton

Ich habe den Sketch hochgeladen und habe auch die SSID und Passwort über das Webinterface eingegeben. Nun wechselt die LCD-Anzeige von “WLAN” dann geht die LCD aus dann zeigt sie den “Sendernamen” und wieder aus und wieder “WLAN”. Das geht so im Sekundentakt.
Auch bin ich nur kurzzeitig auf das Webinterface mit meinem Smartphone gekommen, alles eingegeben und gespeichert. Jetzt komme ich nicht mehr in das Webinterface. Das die SSID und Passwort übernommen worden ist zeigt mir so denke ich das die Sender angezeigt werden.??
Oder wo kann ich im Sketch die SSID und Passwort eingeben?

Marvin

Marvin

Hallo zusammen,

erstmal vielen Dank für das coole Projekt. Ich habe das Radio bei mir mittlerweile zum Laufen bekommen und bin auch recht zufrieden. Der einzige Makel den ich noch habe, ist ein leichtes mehr oder weniger “typisches Radiokratzen”, das ja aber eig. bei einem Internetradio eher nicht vorkommen sollte. Nun die Frage, ob das bei anderen auch so ist, woher das kommt und im besten Fall ob es einen Fix dafür gibt.
Vielen Dank im Voraus!

Andreas Wolter

Andreas Wolter

@Richard Mayer: soweit ich weiß, ist das ein bekanntes Problem und wurde bisher auch nicht behoben. Den Workaround, das Leerzeichen durch %20 zu ersetzen, habe ich auch gesehen. Es funktioniert leider meistens nicht. Generell sollten Leerzeichen in der SSID also vermieden werden.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Richard Mayer

Richard Mayer

Hallo,

vielen Dank für die vielen Tipps und den Quellcode.
Leider habe ich in meiner WLAN-SSID ein Leerzeichen und habe damit keiner Verbindung hinbekommen.
Weder die Eingabe im Webinterface noch direkt in der INO-Datei.
Hat jemand noch einen Tipp, wie und an welcher Stelle ich das mit einem Leerzeichen in der SSID hinbekommen könnte oder wie man das irgendwie escapen könnte? Weder mit "\ " noch mit %20 war ich erfolgreich…

Schöne Grüße
Richard

Michael

Michael

Hallo H.Lechner

Ich habe das Radio mit der"alten" Hardware – allerdings mit 4×20 LCD-Display -, und der Software des “neuen” Radios in Betrieb.

Die Änderungen
Zitat:"
#define ROTARY_ENCODER_BUTTON_PIN 34
statt
#define ROTARY_ENCODER_BUTTON_PIN 35

Weiters muss im File audio.ino die Zeile 40 von
out = new AudioOutputI2S();
auf
out = new AudioOutputI2S(0, 1);
geändert werden.
"
habe ich implementiert.

Das “Radiohören” funktioniert eiwandfrei.
Jedoch werden keinerlei Daten (Titel o.ä.) in der 3. Zeile angezeigt. Egal bei welchem Sendestream. Auch werden über den Serial-Monitor keine
“Daten " angezeigt. – Wenn etwas “empfangen” wurde, würde es ja wie in Zeile
76 Serial.printf(" %s\n", title);
im “Sketchteil” audio steht, ausgegeben werden.
Den Tip aus den Kommentaren des “Neuen” Radios
„char title64; //character array to hold meta data message“ im Hauptprogramm ist zu vergrößern, z.B. zu verdoppeln"
habe ich schon befolgt – keine Änderung.
Haben Sie – oder ein anderer “Mitleser” einen Tip oder Idee ? Oder hat “jemand” einen Sender, bei dem Daten empfangen werden ?
@Alex-P: Welche Sender haben bei Dir Funktioniert ?

Gruß Michael

Alex-P

Alex-P

Hallo Herr Lechner. Zunächst herzlichen Dank für dieses schöne Bastelprojekt. Ich habe die Urversion nachgebaut und für eine bessere Klangqualität mit einem externen DAC (UDA1334) nachgerüstet. Das hässliche Brummgeräusch beim Senderwechsel lässt sich dann unterdrücken, indem man den Schalter am Rotary Encoder mit einem Interrupt ausliest und eine Pin für Muting auf HIGH setzt. Erst wenn der neue Stream gestartet ist, wird das Muting wieder freigegeben. Das Auslesen des Titels aus den Metadaten funktioniert bei einigen Stationen einwandfrei. Bei den ARD Sendern gelingt es mir leider nicht. Daher wundert es mich, wie @Andreas Kühn die Titelanzeige in dem Foto (im 2. Advent-Blog) bei dem Sender NDR2 NIEDERSACHSEN geschafft hat. Haben Sie oder andere Mitleser dazu eine Idee?

Gerald Lechner

Gerald Lechner

@Andreas: Die Datei Preferences.h ist Bestandteil des ESP32 Package. Es gibt zwei Möglichkeiten für die Fehlermeldung. Entweder wurde in der Arduion IDE ein falsches Board gewählt. Es muss das “ESP32 Dev Module” sein. Oder das ESP32 Package wurde nicht richtig installiert. Es sollte eine Version ab 2.0.0 sein.

Andreas

Andreas

Bekomme nur dieses:
fatal error: Preferences.h: No such file or directory

Gerald Lechner

Gerald Lechner

@klaus Treutler: Bei der neuen Version (2. Advent) gibt es im Webinterface einen Testbutton um eine URL zu überprüfen, ehe sie gespeichert wird. Damit sollte verhindert werden, dass ein nicht funktionierender Stream zum Absturz führt. Im vierzeiligen Display wird Datum und Uhrzeit, darunter der Stationsname und darunter der Songtitel angezeigt. Die neue Version kann auch mit der alten Hardware genutzt werden. Im File rotary.ino muss in diesem Fall die Pinnummer für den Button auf 34 geändert werden.
#define ROTARY_ENCODER_BUTTON_PIN 34
statt
#define ROTARY_ENCODER_BUTTON_PIN 35

Weiters muss im File audio.ino die Zeile 40 von
out = new AudioOutputI2S();
auf
out = new AudioOutputI2S(0, 1);
geändert werden.

klaus Treutler

klaus Treutler

Ein tolles Projekt, Herr Lechner. Angefangen habe ich mit der ersten Version mit einer bestehenden Arduino IDE. Das crashte solange, bis ich mich entschloss, Arduino neu als portable Version zu installieren. Jetzt bin ich beim “2.Advent update” gelandet. Ist es normal, dass das System hängt, wenn man auf einem nicht funktionierenden Stream landet?
Gibt es eigentlich schon die Möglichkeit, aus dem Stream weitere Infos wie Sendungstitel, Songtitel etc auszulesen. Zwei Zeilen des LCD sind ja noch frei :-)
Grüße aus Herzogenrath und ein gutes Neues Jahr

Michael

Michael

Hallo H. Lechner
Ich habe
#define ROTARY_ENCODER_BUTTON_PIN 34
durch
#define ROTARY_ENCODER_BUTTON_PIN 35
ersetzt.
Die Audio-Ausgabe funktioniert jetzt einwandfrei.

Vielen Dank für Ihre schnelle Hilfe.

In der Hoffnung auf viele neue interessante Projekte wünsche ich einen guten Rutsch ins neue Jahr….

Gerald Lechner

Gerald Lechner

@Eduard Kick, Michael: Ich habe jetzt das Radio mit der alten Hardware noch einmal aufgebaut und die neue Firmware hochgeladen und dann auch den Fehler gefunden. Es muss auch noch im File rotary.ino die Pinnummer für den Button auf 34 geändert werden.
#define ROTARY_ENCODER_BUTTON_PIN 34
statt
#define ROTARY_ENCODER_BUTTON_PIN 35
dann funktioniert alles richtig. Die falsche Pinnummer führte zu unkontrollierten Interrupts, die den Streamablauf störten. Auch das zweizeilige Display funktioniert. Es wird der linke obere Bereich mit 16 Zeichen und 2 Zeilen angezeigt. Alle neuen Features des Webinterface können genutzt werden.

Gerald Lechner

Gerald Lechner

@Eduard Kick, Michael: Ich habe die alte Hardware mit dem neuen Sketch nicht getestet werde das aber machen und dann berichten was eventuell zusätzlich geändert werden muss.

Michael

Michael

Hallo
Ich habe dieses Internet-Radio (mit dem Analogen Verstärker) ohne Probleme in Betrieb genommen – Danke für dieses interessante Projekt.
@Gerald Lechner:
Jetzt habe ich versucht, diese Schaltung mit der Software des “neuen Internet-Radios” in Betrieb zu nehmen.
Den Tipp
" Im File audio.ino muss die Zeile 40 von
out = new AudioOutputI2S();
auf
out = new AudioOutputI2S(0, 1);
geändert werden."
habe ich befolgt. Jedoch habe ich das gleich Probem mit dem “Piepsen” wie @Eduard Kick.
… erst ca. eine halbe Sekunde den Radiostream, und dann dieses “regelmäßige” piepsen und pfeifen.
Da die “erste” Internet-Radio-Version ohne Probleme läuft, schließe ich einen “Verdrahtungsfehler” eigentlich erst einmal aus.
… gibt es vieleicht noch einen Tipp oder Idee woran es liegen kann ?

Auf jeden Fall wünsche ich ein gesundes. glückliches und zufriedenes Weihnachtsfest

Käsebrot

Käsebrot

Würde das Gerät gerne als Internetradio Adapter nutzen und anstelle über die 8bit Dac’s die Audio-Ausgabe über Bluetooth vornehmen.
Ist das möglich?
Grüße
Gerd

Eduard Kick

Eduard Kick

@Gerald Lechner:
Hallo,
vielen Dank für die Rückmeldung. ich habe es noch mal geprüft und dies hinterlegt.
Ja, der sketch aus dem weiterführenden Artikel habe ich verwendet.
Das Piepsen ist immer noch da, und es hört sich an als würde der Stream anfangen und gleich wieder stoppen. deswegen hört sich das wie ein Piepsen an. Nur ich höre ganz kurz mal vokale oder einen miniteil der Musik. Ein anderer ESP32 aus einem anderen Set macht es genau so. Muss ich das Board mit bestimmten Parametern programmieren?
Display ist immer noch ohne Funktion, abgesehen von der Beleuchtung. Und ich habe die Arduino 1.8.19 Version wieder frisch drauf gespielt. Also alle schritte neu. Board und die anderen Codes neu geladen.
Noch irgend einen Tipp parat?

Danke schon mal im voraus.

Gerald Lechner

Gerald Lechner

@Eduard Kick: Wie ich Ihrem Kommentar entnehme haben Sie den Sketch vom Beitrag zum 2. Advent mit der Hardware von diesem Beitrag verwendet. Das sollte grundsätzlich funktionieren. Haben Sie beachtet, dass das die Anzeigefunktionen im neuen Sketch von einem Display mit vier Zeilen und 20 Zeichen ausgeht. Für das zweizeilige Display müssen Änderungen im File display.ino vorgenommen werden. Bei der neuen Version des Sketches erfolgt die Ausgabe über I2S und nicht mehr über den internen DAW des ESP32. Im File audio.ino muss die Zeile 40 von
out = new AudioOutputI2S();
auf
out = new AudioOutputI2S(0, 1);
geändert werden.

Eduard Kick

Eduard Kick

Hallo Zusammen,

bei mir sieht es nach viel Fehlersuche aus als ob es nur noch an Kleinigkeiten liegt.
Der ESP32 kommt zum laufen mit dem Webradio_max sketch und den Anpassungen die hier beschrieben werden.
So nun sehe ich im seriellen Monitor, die Verbindung wird zum Wifi wird aufgebaut und der erste sender geladen. Am encoder drehen, sehe ich das hier die liste hoch und runter geht. Die Versorgungsspannung am
1)Aus dem Lautsprecher höre ich nur einen ca. 1 Sekunden abstand einen Piep on. sehr regelmäßig.
2)Im Display sieht man nur das die Stromversorgung ok ist. mehr auch nicht.

Was ich bis jetzt gemacht habe.
1) mehrmals die Platine neu gelötet.
2) die Arduino IDE reinstalliert und dabei alle Verzeichnisse bereinigt. mit der 1.8.x und 2.05 getestet. Nur bei der Webversion von Arduino bekomme ich den selben Sketch auf den ESP32 und er startet normal. Webserver erreichbar und per seriellen Monitor sieht man das es erfolgreich läuft.

Wie bekomme ich das Piepen weg und das Display zum laufen(Verdrahtungsfehler meinerseits?)? oder liegt es an der Arduino Webversion?

Suche schon Hartnäckig nach dem Fehler und muss wohl total blind sein…. ;-)

Danke im voraus.

Gerald Lechner

Gerald Lechner

@Ulrich Klaas: Ich würde Ihnen das Programm aus dem Blogbeitrag für das neue Internet Radio empfehlen. Diese Version hat zahlreiche Verbesserungen. Es funktioniert auch mit dem analogen Verstärker, wenn die Zeile
out = new AudioOutputI2S();
im Teilprogramm audio.ino durch
out = new AudioOutputI2S(0 , 1);
ersetzen. Falls Sie auch nur das zweizeilige Display benutzen wollen, müssen Sie auch im Tilprogramm display.ino entsprechende Änderungen vornehmen.
Schauen Sie sich den Beitrag einfach mal an.
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/internetradio-mit-esp32-und-max-98357a

Ulrich Klaas

Ulrich Klaas

Hallo,
ich habe das Teil gestern auch recht prompt zum Laufen gebracht nachdem ich gecheckt hatte das es nur mit ESP1.6 funktioniert.
Die Lib 1.97 und ESP2.5 compiliert findet aber den Router nicht sobald ich das LCD in Betrieb nehme. Aber egal.
Schönes Projekt. Wichtig für mich wäre es zu wissen ob es denn inzwischen eine Lösung für das Problem gibt das das Radio bei einem
ungültigen Stream nicht so hoffnungslos abstürzt. Bei einem Neustart lande ich immer wieder auf dem “defekten” Sender und komme nur durch
Löschen der persistenten Daten aus diesem Dilemma wieder raus.

Problem 2 ist kleiner. Wenn ich die Senderliste über das Webinterface ändere ist danach alles völlig chaotisch und ich muss auch da die persistenten Daten löschen.

Gerald Lechner

Gerald Lechner

@wolfgang: Ich habe mal versuchsweise auch mit dem Opus Dekoder kompiliert ging ohne Probleme. Eventuell fehlt bei Ihnen das File
f:\_Eigene Dateien\Wolfgang\Arduino\libraries\ESP8266Audio\src/libogg/ogg/ogg.h
da es der Compiler offenbar nicht findet.

wolfgang

wolfgang

Hielfe – Bekomme leider immer nur diese Fehlermeldung wenn ich die Audiobibliothek einbinde. Habe schon alle Versionen durchgespielt.
In file included from f:\Eigene Dateien\Wolfgang\Arduino\libraries\ESP8266Audio\src/AudioGeneratorOpus.h:26:0,
from f:\_Eigene Dateien\Wolfgang\Arduino\libraries\ESP8266Audio\src\AudioGeneratorOpus.cpp:21:
f:\
Eigene Dateien\Wolfgang\Arduino\libraries\ESP8266Audio\src/opusfile/opusfile.h:109:32: fatal error: ../libogg/ogg/ogg.h: No such file or directory
compilation terminated.

exit status 1

Compilation error: exit status 1

Gerald Lechner

Gerald Lechner

@Christian de Monte: Die Störgeräusche lassen sich leider nicht vermeiden. Normalerweise wird der Encoder aber nicht dauernd verwendet. Der ESP32 hat eine CPU mit zwei Kernen. Beim Internet Radio muss der Web Datenstrom vom Internet über das HTTP Protokoll gelesen werden. Das geschieht im System Thread, der auf dem Kern 0 läuft. Die Anwendung muss den empfangenen Stream decodieren und in den Buffer schreiben, aus dem dann die Daten über DMA ohne zutun der CPU ausgegeben werden. Das Dekodieren erfolgt im Anwendung-Thread der auf Kern 1 läuft. Wenn nun zusätzlich CPU-Zeit für Display und Encoder verwendet werden kommt es zu kurzen Unterbrechungen die akustisch zu hören sind.

Laat een reactie achter

Alle opmerkingen worden voor publicatie gecontroleerd door een moderator

Aanbevolen blogberichten

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery