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

Update: The reader Andreas Schröder has changed the project a little and supplemented some functions. You can find the text and sketch at the end of the post.

Many radio stations can be heard as a MP3 stream over the Internet. Since the microcontroller ESP32 has WLAN skills on the one hand and, on the other hand, can convert the digital data stream into an analog signal with two built-in digital/analog converters, it offers itself as an ideal solution. In addition, a battery power supply, an audio amplifier, two speakers, a display for the transmitter display and an input device for the transmitter setting is required. The whole thing is rounded off with a housing from the 3D printer.

Required hardware

Number Component annotation

1

ESP32 Development Board

 

1

Audio amplifier 3W

 

1

speaker

 

2

Resistance 4.7 KOHM

 

2

Resistance 22 KOHM

 

1

Resistance 10 kohm

 

1

Elko 1000UF / 10V

 

1

3.7V battery 2000mAh

 

1

Loader

 

1

DC-DC Step Up Converter

 

1

LCD display with I2C interface

 

1

Distributor Encoder

 

1

Lochraster plate 50x70

 

2

Spring strips 19-pin

 

1

Park bar 3-pin

 

1

 Park bar 4-pin

 

1

Pin bar 5-pin

 

2

Turntons for 6mm axis

 

Several

Jumper cable female too female

 

1

Housing front part from the 3D printer

 

1

Housing back from the 3D printer

 

1

Lid for battery protection from the 3D printer

 

various

Fastening screws 2.2mm

 

 

circuit

 

Important!
If the Rotary Encoder is not used, the PIN 34 of the ESP32 must still be connected to the 10 co-cock resistance with 3.3V.

The ESP32 is built up on a 50x70 mm hole grid plate with the resistances and pen strips for the periphery.


The figure shows the assembly and wiring on the underside

wiring

First of all, the loader's battery connection is connected to the input of the DC-DC Step Up converter. Note the polarity! The battery is also soldered via a suitable connector with the battery input of the loader. Now the output voltage of the converter with the blue potentiometer should be set to approx. 5.2 V. To do this, either a battery must be connected or the loader's USB input must be connected to a USB network.

If the voltage is set, the output of the converter can be connected to the supply receipt of the audio amplifier. There are two soldering points on the back of the amplifier, the plus connection is switched over the switch of the volume potentiometer.

 amplifier underside

This connection is used to supply the ESP32 and the display so that the device can be switched off completely via the potentiometer.
Now the connections to the control board can be made on the hole grid plate. It is best to use jumper wires with two female plugs. You need a 3-pin connection from the audio output to the amplifier, a 4-pin to the display and a 5-pin to the Rotary Encoder.

Important NOTE!
The loudspeakers should not be attached or staked out when switched on, since inductive tension peaks could destroy the amplifier outputs.

If the housing presented in the blog post is used, battery, loader, DC/DC converter and the control board come to the baking tarpaulin. The speakers, the amplifier, the Rotary Encoder and the display come to the front tarpaulin. The lid is used to secure the battery.

 baking tarpaulinassembly

software

In order for the sketch to be compiled, the Arduino IDE must be prepared accordingly. By default, Arduino IDE supports a large number of boards with different microcontrollers, but not the ESP32. So that you can create and upload programs for these controllers, a software package for the support must therefore be installed.

First you have to communicate the Arduino IDE where you can find the additional data required. To do this, open the Preferences in the File menu. In the preset window there is the input field called "Additional board administrator URLS". If you click on the icon to the right of the input field, a window in which you can open the URL https://dl.espressif.com/dl/package_esp32_index.json for the ESP32 can enter. Version 2.0.0 or higher of the ESP32 package should not be used for this project, since these versions have problems related to the ESP8266audio library!

Now choose the board management in the Arduino IDE under tool → board.

A window opens in which all available packages are listed. In order to narrow down the list, you enter "ESP32" in the search field. Then you only get an entry in the list. Install the "ESP32" package.

ESP32 Lib
For the display you need a library that can be installed via the Arduino library management. This is the library "Liquidcrystal I2C".

Liquid Crystal Lib

Another library is required for the Rotary Encoder. Her name is "Aiesp32rotary Coder".

Rotary Encoder Lib 

The core of this project is the library "ESP8266audio".

 audio lib

This library enables various digital input currents to be read, decoding and reproducing them using various output channels. As an entrance, the program memory, the internal RAM can be used by an SD card, an HTTP stream or an ICY stream. The icy stream is typically used by internet radios.
WAV, MOD, MIDI, Flac, AAC and MP3 files can be decoded. MP3 is required for the web radio. The output can finally be made in memory, files or I2S. There is a special feature for the ESP32. The I2S Output can be output on the internal digital analog converter. An analog stereo signal is then available at the output pins of the DAW (PIN 25 and PIN 26). This feature is used in the present project.

If all libraries are installed, the sketch can be compiled and uploaded to the hardware.

The sketch

#include <Wifi.H> 
// Includes from ESP8266audio
#include "AudioFileesourceiSstream.h" // input stream
#include "AudioFileesourcebuffer.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 "AiesP32rotaryScoder.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 Behavior
//#define rotary_encoder_steps 1
//#define rotary_encoder_steps 2
#define Rotary_encoder_steps 4

// Structure for Station List
type struct {
  char * url;  // stream url
  char * Surname; // station name
} station;

#define Ward 24 // Number of Stations in Tzhe List

// Station List Can Easily Be Modified to Support Other Stations
station wardlist[Ward] Progmem = {
{"http://icecast.ndr.de/ndr/ndr2/niedersachsen/mp3/128/stream.mp3","NDR2 Lower Saxony"},
{"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/br3/live/mp3/low","Bayern 3"},
{"http://dispatcher.rndfnk.com/hr/hr3/live/mp3/48/stream.mp3","Hessen3"},
{"http://stream.antentne.de/antne","Antenne Bayern"},
{"http://stream.1a-webradio.de/saw-deutsch/","Radio 1a German hits"},
{"http://stream.1a-weibradio.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","Bavaria Classic"},
{"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/antnebrandenburg/live/mp3/mid","Antenne Brandenburg"},
{"http://wdr3-live.iceCasttssl.wdr.de/wdr/wdr3/live/mp3/128/stream.mp3","WDR3"},
{"http://wdr2-aachenundregion.iceCasttssl.wdr.de/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 90s"},
{"http://mp3.hitradiort1.c.nmdn.net/rt1rockwl/livestream.mp3","RT1 Rock"}};

// Buffer size for stream buffering
const intimately Preallocatebuffersize = 80*1024;
const intimately PreallocateCodecsize = 29192;         // MP3 Codec Max Mem Needed
// pointer to preallocated memory
void *Preallocatebuffer = ZERO;
void *PreallocateCodec = ZERO;

// Instance of Preferences
Preferences Pref;
// Instance for Rotary Encoder
AISP32Rotary code rotary = AISP32Rotary code(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
// Instance for Audio Components
Audio *decoder = ZERO;
Audio filesourceistream *file = ZERO;
Audio filesource buffer *buff = ZERO;
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 curing = 0;   // Index for current selected station in station list
uint8_t act = 0;   // Index for current station in station list used for streaming 
uint32_t liability = 0;  // Time of Last Selection Change

// Callback function wants to 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 instantences
void stop playing() {
  IF (decoder)  {
    decoder->Stop();
    delete decoder;
    decoder = ZERO;
  }
  IF (buff)  {
    buff->close();
    delete buff;
    buff = ZERO;
  }
  IF (file)  {
    file->close();
    delete file;
    file = ZERO;
  }
}

//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")) curing = Pref.gut("station");
  IF (curing >= Ward) curing = 0;
  // Set Active Station to Current Station 
  // Show on display and start streaming
  act = curing;
  show station();
  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.remaining start();
  }
  // Read events from Rotary Encoder
  rotary_loop();

} 

Sketch to download

Before compiling, the SSID and the password must be set for the WLAN. At the beginning of the sketch is a list of 24 German radio stations. You can edit or expand them as you like to hear your desired program. A maximum of 100 stations can be defined.

After uploading, the program can be started. The channel list can be scrolled with the Rotary Encoder. If you press the button of the Rotary Encoder, the station that has just been displayed is set as active. This selection is saved in the flash, so that after a power break, the program is started again with the selected transmitter. The station that has just been reproduced is displayed on the display by a preceding loudspeaker symbol.

Finished device

Have fun with the internet radio

Post as a PDF

Update from our reader Andreas Schröder

(thanks at this point)

With a cut black film on white housing, it looks really good.

Because this is not tingling and screwing up, I expanded the code to include the following:

1. An automatic AP mode with a lack of WLAN connection, which then queries the access data via web server.

2. In normal operation, the transmitter list can be maintained via a web front end. Would like to have provided the code, screenshots and the plotter file for the film here.

WIRELESS INTERNET ACCESS

The WLAN configuration is held in the internal flash memory. This can be configured using the web interface. The configuration process is as follows:

  • Charge the saved login data

  • Attempt to make connections (display shows "WLAN")

  • If that is not possible

    • Change to AP mode and create the WLAN "WebRadio"

    • Expect the data entry under http://192.168.4.1

    • Restart with new data

==> The whole thing is repeated until a connection is possible

 

 

Transmitter list

The list of stored transmitters can above http: // be adjusted.

 

Sketches download

 

Plotter file (silhouette format)

DisplaysEsp-32Projekte für anfängerStromversorgung

292 comentarios

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.

Christian De Monte

Christian De Monte

Hallo,
Habe den Radio auch nachgebaut.
Ich habe folgendes Problem: Wenn ich den Rotary Encoder Drehe gibt es immer Störgeräusche und auch beim Drücken.
Gibt es eine Lösung dafür?
Gruß Christian

Andreas Wolter

Andreas Wolter

@Michael: der Link selbst funktioniert. Zumindest ist die Quelle erreichbar.
Sie müssen diesen Link in die Zeile in den Voreinstellungen der Arduino IDE unten zu den Boardverwalter-URLs hinzufügen.
Anschließend müssen Sie unter Werkzeuge → Board → Boardverwalter den ESP32 suchen. Der müsste dann dort auftauchen und sich auch installieren lassen.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Michael

Michael

bei mir funktioniert dieser Link: https://dl.espressif.com/dl/package_esp32_index.json für den ESP32 leider nicht?

Gerald Lechner

Gerald Lechner

@Werner Herzig: Die Fehlermeldung “load prohibited” besagt, dass die Versorgungsspannung auf Grund zu hoher Last einbricht. Das Verhalten des Displays ist richtig. Wenn Sie mit dem Encoder einen anderen Sender gewählt haben, müssen Sie den Knopf des Encoders drücken, dann bleibt der Sender und sollte gespielt werden. Das beschriebene Brummen deutet darauf hin, dass die Verbindung zwischen den Ausgangs-Pins 25/26 und dem Verstärker nicht in Ordnung ist. Die Meldungen vom seriellen Monitor können einfach mit Copy und Paste in den Kommentar kopiert werden.
@Siegfried: Mit ESP32 Version 2.0.5 kann wie Sie schon festgestellt haben nur die Version 1.9.7 von ESP8266Audio kompiliert werden. Warum es in diesem Fall zu einem Reboot kommt, kann ich nicht sagen. Ich hatte das Problem auch manchmal. Das ließ sich aber mit einer externen Stromversorgung des Verstärkers normalerweise beheben.

Siegfried

Siegfried

@Werner Herzig: ich hatte die gleiche Ansage im seriellen Monitor und hab das ESP32 Board auf die Version 1.0.6 zurückgestellt und seit dieser Aktion läuft es bei mir (Die Bibliothek ESP8266Audio auf Version 1.9.5 stellen)

Versuch mal

Gruß

Siegfried

Siegfried

Hallo Gerald,

Ich hab noch einmal probiert:
Mit der Kombination ESP32 Version 1.0.6 und ESP8266Audio version 1.9.5 : alles perfekt

Mit ESP32 version 2.0.5 und ESP8266Audio Version 1.9.5 kommt eine Fehlermeldung beim kompilieren (error in der Bibliothek ESP8266Audio)

Mit ESP32 Version 2.0.5 und ESP8266Audio wird kompiliert und dann zeigt er sekündlich Kontakt zum Sender und spielt kurz an, bricht ab und meldet sich wieder an und das in kurzen Abständen immer fort … hier habe ich den Verstärker abgeklemmt und die Stromversorgung auf extern umgestellt inkl 4000 myF Kondensator … alles hilft nichts … es ändert sich beim Verhalten nichts

Ich habe die Arduinoversion 1.8.18 und einen ESP32 -S von Delivery und habe die CPU Frequenz auf 160 MHz eingestellt

Fazit: ich würde mich schon interessieren, warum es so nicht läuft, aber ich habe trotzdem ein Webradio 👍

Siegfried

Siegfried

Update:

Hallo Gerald!

Es funktioniert! Aber ich habe in der ESP Boardverwaltung die Version 1.0.6 gewählt und sofort funktioniert das Radio.
Die Bibliothek ESP8266 hat die Version 1.9.5
Mit der 1.9.7 funktioniert es bei mir auch nicht.

Ich werde trotzdem noch einmal Deinen Tip probieren und mit der neuesten ESP32 Version und der getrennten SV

Mal sehen was passiert

Gruß und Danke für das Projekt.

Siegfried

Werner Herzig

Werner Herzig

Hallo Herr Lechner
Ich habe jetzt das Display und den Verstärker angeschlossen. Das Display zeigt das Lautsprechersymbol und den Sender NDR2 Niedersachsen an.Hören kann ich nix,außer starkem Brummen und Knacken. Wenn ich den Encoder mehrmals hin und herdrehe zeigt das Display auch andere Sender an, das aber nur ganz kurz, dann wechselt es wieder auf NDR. Das Display zeigt den Sendernamen ca 4 Sekunden an und geht für ca 1 Sekunde aus um dann wieder NDR anzuzeigen. Und das rhytmisch. Der serielle Monitor zeigt mir auch Fehler an. Ich weiß aber nicht wie ich den seriellen Monitor in die E-Mail einfügen kann. Z.B Guru Meditation Error:Core 1 panic’ed (LoadProhibited) Exception was unhandled. Und weiter E(1084)gpio: gpio_set_level(226):GPIO output gpio_num error.
Kann mir da jemand helfen?
Gruß Werner

Gerald Lechner

Gerald Lechner

Das ist ein Problem mit der Stromversorgung. Der Verstärker zieht teilweise hohe Stromspitzen, die den ESP32 zum Absturz bringen. Probieren Sie den Verstärker über ein eigenes Netzteil zu versorgen. Die Versorgung des ESP32 sollte dann über das IUSB Kabel erfolgen. Achtung, die 5V Verbindung zwischen Verstärker und ESP32 Modul sollte dann entfernt werden.

Siegfried

Siegfried

Hallo Experten,

ich habe nun auch den Versuch unternommen und das Radio auf einem Steckbrett nachgebaut. Ich kann kompilieren und nach dem Hochladen habe ich kurzzeitige Aktivitäten aus dem Lsp vernommen: Sprache o.ä..
Der ESP bricht die Verbindung aber nach wenigen Sekunden ab und baut die Verbindung neu auf.

Im Monitor erscheint folgende Aussage:
19:01:32.958 → ets Jun 8 2016 00:22:57
19:01:32.958 →
19:01:32.958 → rst:0×1 (POWERON_RESET),boot:0×13 (SPI_FAST_FLASH_BOOT)
19:01:33.005 → configsip: 0, SPIWP:0xee
19:01:33.005 → clk_drv:0×00,q_drv:0×00,d_drv:0×00,cs0_drv:0×00,hd_drv:0×00,wp_drv:0×00
19:01:33.005 → mode:DIO, clock div:2
19:01:33.005 → load:0×3fff0030,len:1344
19:01:33.005 → load:0×40078000,len:13836
19:01:33.005 → load:0×40080400,len:3608
19:01:33.005 → entry 0×400805f0
19:01:34.352 → E (1036) gpio: gpio_set_level(226): GPIO output gpio_num error
19:01:34.352 → Connecting to WiFi
19:01:34.492 → …Connecting to WiFi
19:01:35.492 → Connected
19:01:35.620 → Gespeicherte Station 0 von 25
19:01:35.620 → Active station http://icecast.ndr.de/ndr/ndr2/niedersachsen/mp3/128/stream.mp3
19:01:40.662 → sourcebuffer created – Free mem=134120
19:01:40.662 → created decoder
19:01:40.662 → Decoder start…
19:01:40.662 → MP3 done

Ich werde aus dieser Aussage nicht schlau, vielleicht kann mir jemand einen Tip geben.
Die ESP32 laufen in anderen Projekten mit dem WLan (z.B. OpenWeatherMap).

Kurzzeitig schein die Verbindung auch zu funktionieren, aber es gibt ständig diese Abbrüche.
Die Bibliotheken sind alle auf dem neuesten Stand (hier im Block gab es dazu schon einige Hinweise)

Auch habe ich meine ESP Module schon gewechselt und sehe immer gleiche Reaktionen.

Danke vorerst

Siegfried

Gerald Lechner

Gerald Lechner

Hallo Herr Herzig, ich nbehme an, Sie haben den Original Sketch aus dem Beitrag und nicht den erweiterten von Herrn Schröder heruntergeladen. Bei diesem Sketch ist kein Webzugriff vorgesehen. Die Zugangsdaten SSID und Passwort sind als Konstante im Programm kodiert. Wenn kein Display angeschlossen ist, werden Sie nichts sehen. An den Pins 25 und 26 sollten aber die analogen Audiodaten anliegen. Damit eine Einstellung über Web erfolgen kann, brauchen Sie die erweiterte Version von Herrn Schröder. Den Download dazu finden Sie nach der Beschreibung der Sernderlisten Einstellung.

Werner Herzig

Werner Herzig

Hallo. Ich habe das Radio auf einem Breadboard aufgebaut. Nur ESP32 und Drehgeber. Wenn ich im seriellen Monitor schaue,dann bleibt er bei der Meldung "Decoder start "hängen. Ein betätigen des Encoders bewirkt nichts. Auch kann ich keine Verbindung über WLAN herstellen. In der Fritz Box sehe ich zwar einen Eintrag ESP32 arduino, kann mich aber nicht verbinden. Ich müßte doch trotz des fehlenden Verstärkers eine Verbindung herstellen können. Oder liege ich da falsch? Kann mir jemand helfen
MfG Werner

stefan trzesniowski

stefan trzesniowski

Bis heute keine Antwort, ist schon ein wenig schwach…..

Stefan Trzesniowski
Mai 29, 2022 at 20:35pm

Hallo in die Runde, großen Dank an die Entwickler. Jetzt kämpfe ich mit der Erweiterung von Andreas oder habe ich was falsch gelesen?
Char nnn10 ist danach nur nnn. Was mache ich da falsch. Die Originalversion läuft seit Wochen:-)

// set additional sender (more than 20) with flash-values or defaults
int se=20;
char nnn10;
while (se < STATIONS) {
sprintf(nnn, “n%d”, se+1);
strcpy(stationlist[se].name, sender.getString(nnn, “NDR2 Niedersachsen”).c_str());
sprintf(nnn, “u%d”, se+1);
strcpy(stationlist[se].url, sender.getString(nnn, “http://icecast.ndr.de/ndr/ndr2/niedersachsen/mp3/128/stream.mp3”).c_str());
se++;
}
Danke an die Profis Stefan

Carsten

Carsten

Vielen Dank, Andreas! Der Tipp mit der Deaktivierung der Brownout Detection (Kommentar 28. August) war ein Volltreffer – keine Reset-Loop mehr beim Einschalten! Wirklich super, da wäre ich alleine nie drauf gekommen…

Stefan Mühlbauer

Stefan Mühlbauer

Hallo zusammen
funktioniert nun bei mir, hatte zu viele alte Libs in der IDE Installation.
Gibt es schon neue Updates.
Danke für das Projekt.
LG
Stefan

Stefan Mühlbauer

Stefan Mühlbauer

Hallo zusammen
bei mir bricht das compilieren auch mit dieser Fehlermeldung ab.

lcdisplay:5:32: error: invalid conversion from ‘int’ to ‘t_backlighPol’ [-fpermissive]

LG
Stefan

Patrice Seibel

Patrice Seibel

Hallo Gerald,
Ich entschuldige mich für den Fehler beim Vornamen.
MfG
Patrice

Patrice Seibel

Patrice Seibel

Hallo Gerhard,
Vielen Dank für den Link zur asynchrone Webserver Bibliothek.
Ich habe einige Probleme, es unter Platform IO zu implementieren, aber ich werde die Lösung finden.
Inzwischen habe ich die Basisversion der Software um einige Features erweitert.
- ein Ein-/Aus-Taster,
- eine Taste zum Ein-/Ausschalten der backlight (Energie sparen),
- ein Taster zum automatischen Abschalten des Webradios (15, 30, 60 und 120 min),
- die automatische Abschaltung des Webradios bei zu geringer Akkuspannung,
- NTP-Datum und -Uhrzeit.
Meine Kenntnisse in C und C++ reichen nicht aus, um das ursprüngliche Programm zu modifizieren, also habe ich eine Eigenheit des ESP32 ausgenutzt. Der ESP32 hat 2 Kerne (Kern 1 für Setup und Loop und Kern 0 wird nicht verwendet).
Alle zusätzlichen Funktionen sind in Core 0 implementiert (Diese Vorgehensweise stört das Internetradioprogramm so wenig wie möglich).
Da die zusätzlichen Funktionalitäten nahezu unabhängig voneinander sind, besteht keine Notwendigkeit, MUTEX zu verwenden (Es war nur notwendig, die Chronologie der Anweisungen des Setup() ein wenig zu ändern).
Schade, dass wir kein Foto machen können.
Wissen Sie, warum viele Internet links nicht funktionieren?
Ein Bild des Webradio-Bildschirms (http://psl.ibidouille.net/Images_forum/webRadio01.png)
MfG
Patrice

Gerald Lechner

Gerald Lechner

@Patrice: Der asynchrone Webserver von https://github.com/me-no-dev/ESPAsyncWebServer und Asynchron TCP von https://github.com/me-no-dev/ESPAsyncTCP.
@Edgar: Mit dem ESP8266 geht das Projekt in der Form nicht, da der ESP8266 keinen internen Digital/Analog Wandler besitzt. Mit einem I2S fähigen Verstärker und einigen kleinen Programmänderungen könnte es gehen. Allerdings könnte auch der Speicher knapp werden.
@Dennis: Damit man auf !92.168.4.1 zugreifen kann, muss zuerst in den WLAN-Einstellungen des Smartphones euine Verbindung mit dem Accesspoint hergestellt werden.
@Andreas Kühn: Das Umschaltgeräusch ist wirklich störend, ich werde mal den Vorschlag mit dem Abschalten der Ausgänge einbauen und testen.
@Thommy: Das mit der Uhrzeit ist eine gute Idee. Vielleicht bringe ich eine neue verbesserte Version, in der dann das und andere Ideen eingebaut werden könnten.

Wolfhard Jording

Wolfhard Jording

Korrektur: Ich habe die Arduino App auf einen neuen Rechner installiert und alle Einstellungen wie im Blog beschrieben gemacht. Jetzt kann ich es kompilieren und auch auf den ESP32 schreiben. Die andere Arduino App war wohl zu vermurkst.

Wolfhard Jording

Wolfhard Jording

Ich habe mir den Bausatz von AZ-Delivery mit einem ESP32-WROOM-32 gekauft. Ehe ich alles zusammenbaue, habe ich den Scetch webradio kompiliert. Dort erhalte ich immer folgende Fehlermeldung:
exit status 1
Fehler beim Kompilieren für das Board ESP32 Dev Module.
Ungültige Bibliothek C:\Users\wjord\Documents\Arduino\libraries\RTClib in keine Header-Dateien (.h) in C:\Users\wjord\Documents\Arduino\libraries\RTClib gefunden gefunden
Ich arbeite immer noch mit Arduino 1.8.19
Was kann ich tun?

Rob

Rob

Hallo Andreas,

sehr schönes Projekt, vielen Dank!
Ich habe leider festgestellt, dass einige neue Sender das Radio zum Absturz bringen. Ich habe das Problem bis zur Funktion void MDCallback(…) zurückverfolgen können. Das String Handling ist leider kaputt und führt zum Absturz (Guru Meditation) sobald die Funktion aufgerufen wird. Ich habe die Funktion einfach durch die ursprüngliche von Earle Philhower ersetzt, damit geht es problemlos und es wird in der Konsole sogar der Titel angezeigt:
void MDCallback(void *cbData, const char *type, bool isUnicode, const char *str)
{
char title96;
const char *ptr = reinterpret_cast<const char *>(cbData);
(void) isUnicode; // Punt this ball for now
(void) ptr;
if (strstr_P(type, PSTR)) {
strncpy(title, str, sizeof(title));
title[sizeof(title)-1] = 0;
} else {
// Who knows what to do? Not me!
}
Serial.printf(“METADATA: ‘%s’\n”, title);
}
Danke und viele Grüße,
Rob

Patrice Seibel

Patrice Seibel

Hallo,
Vielen Dank für das Teilen dieses wunderbaren Projekts.
Ich habe es mit Audiobibliotheken 1.9.5 und ESP32 1.0.6 getestet und es funktioniert.
Ich habe es mit der Audiobibliothek 1.9.5 und der ESP32-Bibliothek 1.0.6 getestet und es funktioniert.
Ich habe auch ein Test mit den Versionen 1.9.7 und 2.0.4 gemacht.
Ich möchte die Version mit dem Webinterface testen, finde aber die ESPAsyncWebServer Bibliothek nicht. Wo kann es heruntergeladen werden?
Ich entschuldige mich für mein etwas raues Deutsch, es ist nicht meine Muttersprache.
MfG aus Frankreich

Edgar

Edgar

Ich hab mir nicht alle Kommentare angeschaut und stelle meine Frage auf die Gefahr hin, dass es schon jmd gefragt hat:
Ist der Sketch auch für den ESP8266 nutzbar. Von denen hab ich noch ein-zwei daheim rumfliegen und würde das Projekt gerne damit versuchen. Mit der HW komm ich parat, aber Programmiertechnisch bin ich naoch absoluter Laie.

Dennis

Dennis

@Andreas Schröder

Ich habe deinen Sketch bei mir auf dem Radio hochgeladen alles Funktioniert soweit gut ich Kann die Senderlist editieren und es läuft.

Mein Problem ist aber, dass ich die AP Seite nicht aufrufen kann. Ich habe versucht zu Simulieren, dass keine Verbindung besteht indem ich den WLAN-Router ausgestöpselt hab. Im Seriellen Monitor wird dann der Server gestartet und die IP 192.168.4.1 erstellt. geb ich die Adresse im Handy oder PC ein, kommt nur die Meldung, dass die Seite nicht erreichbar ist.
Die Bibliotheken hab ich soweit alle Runtergeladen und eingebunden.

Was mach ich Falsch bzw. Fehlt mir?

MfG Dennis

frank

frank

Hallo
Zu der wichtigen Mitteilung vom 11.08.2022
Mit der Hardware ein AZ Wemos D1 Mini ESP32, sowie der ESP8266Audio Bibliothek 1.9.5 und der ESP32-Package Version 1.0.6 ist alles OK.
Mit der ESP8266Audio Bibliothek 1.9.7 und der ESP32-Package Version 2.0.4 kommt der folgende Fehler und dann ein Guru Meditation Error:
E (1038) gpio: gpio_set_level(226): GPIO output gpio_num error

Der EspExceptionDecoder-2.0.2 der Arduino IDE zeigt das Problem der ESP32-Package Vers. 2.0.4 mit der ESP8266Audio(1.9.7) Bibliothek.
Gibt es eine Lösung für das Problem ?

Decoding stack results
0×4015254d: _svfprintf_r at /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vfprintf.c line 1528
0×401570e6: vsnprintf_r at /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vsnprintf.c line 70
0×40157122: vsnprintf at /builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/stdio/vsnprintf.c line 40
0×400e7c8a: Print::printf(char const*, …) at /home/frank/.arduino15/packages/esp32/hardware/esp32/2.0.4/cores/esp32/Print.cpp line 55
0×400d47d7: MDCallback(void*, char const*, bool, char const*) at /home/frank/arduino_beispiele/testreihen/test-offen/esp-radio/ESPwebRadio/audio.ino line 31
0×400d5518: AudioFileSourceICYStream::readInternal(void*, unsigned int, bool) at /home/frank/Arduino/libraries/ESP8266Audio/src/AudioStatus.h line 44
0×400d4d72: AudioFileSourceHTTPStream::readNonBlock(void*, unsigned int) at /home/frank/Arduino/libraries/ESP8266Audio/src/AudioFileSourceHTTPStream.cpp line 79
0×400d4c79: AudioFileSourceBuffer::fill() at /home/frank/Arduino/libraries/ESP8266Audio/src/AudioFileSource.h line 34
0×400d4c1b: AudioFileSourceBuffer::read(void*, unsigned int) at /home/frank/Arduino/libraries/ESP8266Audio/src/AudioFileSourceBuffer.cpp line 145
0×400d5985: AudioGeneratorMP3::Input() at /home/frank/Arduino/libraries/ESP8266Audio/src/AudioGeneratorMP3.cpp line 138
0×400d5aff: AudioGeneratorMP3::loop() at /home/frank/Arduino/libraries/ESP8266Audio/src/AudioGeneratorMP3.cpp line 223
0×400d34f7: loop_audio() at /home/frank/arduino_beispiele/testreihen/test-offen/esp-radio/ESPwebRadio/audio.ino line 95
0×400d3797: loop() at /home/frank/arduino
beispiele/testreihen/test-offen/esp-radio/ESPwebRadio/ESPwebRadio.ino line 86
0×400e8e4d: loopTask(void*) at /home/frank/.arduino15/packages/esp32/hardware/esp32/2.0.4/cores/esp32/main.cpp line 50

Andreas Kühn

Andreas Kühn

Hallo Gerald Lechner und Andreas Schröder

meine Hochachtung für diesen Job!!! Hat im Prinzip auf Anhieb funktioniert. Ich habe anstelle des LCD-Displays ein OLED-Display verbaut (war gerade greifbar), die entsprechende Programmänderung ist wegen der übersichtlichen Aufteilung in funktionale Teile ja kein Hexenwerk..
Ein paar Anmerkungen:
1.) @Gerald Lechner:
das Umschalten von einem Stream auf einen Anderen verursacht sehr laute Geräusche (Brummen/Knattern), bevor der “neue” Stream ausgegeben wird – das stört sehr! Ist das nur bei mir so? Ich hätte für dieses Problem gern eine Lösung. Als Quick&Dirty-workaround könnte ich mir z.B. vorstellen, vor dem “stopPlaying()” die beiden Ausgangs-Pins des DAW (Pin 25 und Pin 26) als Eingänge umzuschalten und nach den “startUrl()” ggf. mit Verzögerung wieder zurück als Analogausgänge zu schalten. Könnte soetwas funktionieren?
2.) @Andreas Schröder
Die Erweiterung der Funktion “setup_senderList()” (siehe Kommentar vom 09. Mai) lässt sich nicht kompilieren, und ich bin in Sachen Programmierung nicht so firm, dass ich selbst herausfinden könnte, was da passiert bzw. nicht passiert. Bitte um Hinweise.
3.) @beide Profis
Welchen Bedingungen müssen die URLs von Streams genügen, damit die Dekodierung startet? Beim “MDR Aktuell” verursacht die URL “http://avw.mdr.de/streams/284340-0_mp3_low.m3u” z.B. diesen 10-Sekunden-Überlauf, ohne Dekoderstart.
4.) Carsten (Kommentar 17. August)
Ich hatte bei einem anderen Projekt ein vergleichbares Problem: das Einschalten des WLAN verursachte bei mir einen Spannungseinbruch, der die brownout-detection anspringen lies. Meine Lösung dafür war: am Anfang der setup()-Routine brownout auszuschalten
(CLEAR_PERI_REG_MASK(RTC_CNTL_BROWN_OUT_REG, RTC_CNTL_BROWN_OUT_ENA); //disable brownout detector)
und am Ende der setup()-Routine (ggf. mit delay) wieder einzuschalten
(SET_PERI_REG_MASK(RTC_CNTL_BROWN_OUT_REG, RTC_CNTL_BROWN_OUT_ENA); // enable brownout detection)
Vielleicht hilft das!

Thommy

Thommy

Ich habe das Radio nachgebaut und hab auf anhieb alles hinbekommen. Nun habe ich ein wenig im Sketch geschaut und habe dabei die NTP Abfrage gefunden, die aber leider nicht weiter benutzt wird. Es wäre doch schön wenn anstelle des Sendernamens nach einer Weile die aktuelle Uhrzeit und das Datum angezeigt würde. Was haltet ihr davon?

Carsten

Carsten

Hallo,
auch von mir vielen Dank für das tolle Projekt. Ich habe das Radio ohne Akku und Laderegler aufgebaut, da mir ein 5V Direktbetrieb genügt. Ich gehe mit den 5V Eingangsspannung von USB direkt auf die Versorgungs-Pins des Verstärkers. Ansonsten ist mein Aufbau identisch, einfach nur ohne Laderegler und Akku. Das Problem das ich habe: beim Einschalten läuft der Esp in einer Reset-Schleife (LED blinkt), Display flackert im gleichen Takt. Wenn ich mit abgezogenen Lautsprechern einschalte, startet der ESP normal, ich kann dann auch die Lautsprecher kontaktieren und das Radio spielt und lässt sich normal bedienen. Ich verstehe nur nicht, wo das Einschaltproblem herkommt. Ist das evtl. ein Versorgungsproblem von USB (Strom zu gering) und braucht man den Akku, um die Einschaltspitzen zu überbrücken? Könnte das mal bitte einer ohne Akkuversorgung nachstellen – wenn es bei Euch funktioniert, dann muss ich wohl irgendein HW Problem haben, und würde mal anfangen den Verstärker tauschen. Danke!

Gerald Lechner

Gerald Lechner

WICHTIGER HINWEIS:*********************
Es gibt neue Erkenntnisse zur Kompatipilität zwischen ESP32 Packages und ESP8266Audio Bibliothek. Die Version 1.9.5 der Audio-Bibliothek funktioniert nur mit dem ESP32-Package Version 1.0.6. Die aktuelle Version der Audio-Bibliothek 1.9.7 funktioniert jetzt auch mit der aktuellen Version 2.0.3 oder neuer, des ESP32-Package!!

@Johann Auerbäck: Die Bibliothek für die Anzeige ist “LiquidCrystalI2C von Marco Schwartz in der Version 1.1.2” mit dieser Bibliothek klappt das Kompilieren. Allerdings muss in den Voreinstellungen der Arduino IDE der Punkt “Compiler-Warnungen” auf “keine” gestellt werden, da diese Bibliothek auf Grund eines falschen Eintrags im properties File eine Compiler-Warnung generiert, die ignoriert werden kann.
@KDU300: Ich denke, dass das Problem am Stream liegt. Für den ersten Funktionstest sollte unbedingt eine der vorgegebenen Stream-URLs verwendet werden, da diese getestet wurden.
@Thomas: Sie benutzen eine sehr alte Version des bESP32 Package (Version 1.0.4) in der es die Funktion isKey() noch nicht gab. Sie sollten die aktuellste Version 2.0.4 benutzen. Beachten Sie bitte auch den wichtigen Hinweis am Beginn dieses Kommentars.

Deja un comentario

Todos los comentarios son moderados antes de ser publicados