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

292 Kommentare

Lars Häuser

Lars Häuser

Hallo zusammen, ich habe das Radio inzwischen den halb fertig. Mit den Arduino Bits war es etwas nervig, aber letztlich hat alles geklappt. Das Platinenlayout ist schwer entzifferbar, aber auch das hat geklappt.

@Andreas Schröder: Haben Sie das 3d Case zufällig mit Autodesk Fusion erstellt und könnten die Fusionen-Dateien zum Bearbeiten zur Verfügung stellen? Denn ich verwende einen anderen Akkutyp und muss das Gehäuse noch etwas umbauen.

Ich nutze aktuell einen einzigen 18650. Dieser reicht aber nicht für genug Strom, um den ESP zu starten. Ich muss es erst kurz an den Strom hängen zum Starten und dann kann ich das Kabel ziehen und alles funktioniert. Daher müssen jetzt zwei rein. Dann sollte es hoffentlich klappen.

Danke und VG
Lars Häuser

Udo

Udo

Hallo!
Ich habe ein Problem das Internet-Radio ans Laufen zu bringen.
Sämtliche Bibliotheken habe ich mehrmals neu installiert. Aufbau mehrmals kontrolliert.
Erhalte bei jedem Hochladen die Meldung: Fehler beim Kompilieren für das Bord ESP32 Dev Module.
Ich weiß mir keinen Rat mehr!
Sollte eigentlich ein “Anfänger-Projekt” ein.

Benno

Benno

Hallo,
ich habe das Problem inzwischen gelöst. Beim Abspeichern muss man die Erweiterung in der IP Adresse löschen.
Bei mir zB “/?play=4” http://192.168.179.7/?play=4.

ronny

ronny

ich habe das Problem das ich die ESPAsyncWebServer.h benötige. Welche Bibliothek muss noch installiert werden? Ich habe einige Bibliotheken probiert aber es kommen immer Fehler.

Benno

Benno

Hallo,
ich habe, dank der vielen Tipps im Blog, das Radio zum laufen gebracht. Leider gelingt es mir nicht die Senderliste dauerhaft zu ändern. Bei jedem Neustart kommt wieder die ursprüngliche Liste.
Viele Grüße
Benno

Richard Derganc

Richard Derganc

Hello. I have difficulties with code. ESP32 start and made a connection to my wifi and after that when the decoder starts there is an error and ESP restarts itself. It is Guru Medidation Error: Core 1 panic’ed….
Can someone help me or at least direct me to the solution?
Thanks in advance,
Richard

Dre van den Elshout

Dre van den Elshout

@Wolf Geldmacher Ich habe versucht, Ihren aktualisierten Code von https://owncloud.womaro.ch/owncloud/index.php/s/gjR4LMZMaRWYWbt herunterzuladen

Allerdings funktioniert der Link bei mir nicht. Wurden die Daten an einen anderen Ort verschoben?

Thomas Dorn

Thomas Dorn

Ok , keine Ahnung warum aber das Ding funktioniert jetzt ( nur für Moderator , den letzten Post nicht veröffentlichen ). Heute neu eingesteckt und funktioniert …
Was ich noch hinzugefügt habe ist ein Timer für das Backlight .
Wenn es das für jemand interessant ist kann ich das gerne posten .

MFG
Th. Dorn

Thomas Dorn

Thomas Dorn

Also ich kann machen was ich will (jetzt eine IDE portable 1.8.19 installiert)
Alle Libraries in den angegeben Versionen installiert .
Das interessiert das Ding nicht , ich bekomme immer so was
-——————————————————————————————————————————————-
Webserver ist gestartet
Open stream at http://stream.antenne.de/antenne
sourcebuffer created – Free mem=135228
Starting decoder at 0×3ffe3d68…
Error 258: Decoding error ‘reserved header layer value’ at byte offset 7593
Error 259: Decoding error ‘forbidden bitrate value’ at byte offset 13337
Error 259: Decoding error ‘forbidden bitrate value’ at byte offset 13337
Error 259: Decoding error ‘forbidden bitrate value’ at byte offset 13337
Error 259: Decoding error ‘forbidden bitrate value’ at byte offset 13337
Error 259: Decoding error ‘forbidden bitrate value’ at byte offset 13337
Error 259: Decoding error ‘forbidden bitrate value’ at byte offset 19081
Error 259: Decoding error ‘forbidden bitrate value’ at byte offset 20517
Error 259: Decoding error ‘forbidden bitrate value’ at byte offset 20517
Error 259: Decoding error ‘forbidden bitrate value’ at byte offset 23389
Error 259: Decoding error ‘forbidden bitrate value’ at byte offset 24825
Error 259: Decoding error ‘forbidden bitrate value’ at byte offset 24825
Error 259: Decoding error ‘forbidden bitrate value’ at byte offset 26261
Error 259: Decoding error ‘forbidden bitrate value’ at byte offset 26261
Error 565: Decoding error ‘bad main_data_begin pointer’ at byte offset 47801

Jemand dazu eine Idee ???

Marcel

Marcel

Hallo,
ich habe inzwischen alles für den Aufbau des Projekts in einer Schüler-AG zusammengestellt bzw. ergänzt. Das möchte ich als Beitrag zur Community allen zur Verfügung stellen:
- Eine bebilderte Aufbau- und Inbetriebnahme-Anleitung inkl. Tipps und Tricks
- Layout für eine Platine (da sich Lochraster für Lötanfänger nicht gut eignet)
Die Infos findet man auf folgender Github-Seite: https://github.com/dl1ekm/Internetradio

Ein erster Prototyp und Test von Platine und Anleitung waren erfolgreich. Ich hoffe, dass hilft dem ein oder anderen weiter und ermutigt vielleicht auch zu einem Engagement in unserem Bildungssystem :-)
Vielen Dank an alle, die hier beigetragen haben und mir Fragen beantwortet haben.

Dieter

Dieter

Es ist hier schon angeklungen: https-URLs funktionieren nicht wegen der Verschlüsselung. Oft gibt es aber auch eine entsprechende http-URL. Einige Internetradios, die im Webbrowser funktionieren, verwenden auch Weiterleitungen und die können statisch oder dynamisch sein. Dynamisch soll bedeuten, dass diese Weiterleitung nur für begrenzte Zeit funktioniert: Am nächsten Tag funktionieren solche Weiterleitungen dann nicht mehr. Weiterleitungen kann man im Webbrowser erkennen. Möglicherweise wird auch mal Javascript eingesetzt oder ein Webplayer verwendet. Also: Nicht alle Internetradios, die im Webbrowser funktionieren, müssen mit dem ESP laufen.

Thomas Kalmeier

Thomas Kalmeier

Hallo Zusammen,

ich habe den Source einmal fehlerfrei durch den compiler gebracht. Danach dabei hatte ich augenscheinlich die falsche ESP32 CPU gewählt. Denn immer wenn der Stream kommen sollte, ist der Kernel in PANIC gegangen und hat neu gebootet.
Danach habe ich die IDE geschlossen und wieder aufgemacht. Seit bringe ich keine Variante mehr ohne Fehler durch den Compiler. Downgrade / Lib’s löschen usw. hat nichts gebracht. Wer kann mal bei mir mit auf den Rechner schauen????
Gruß Thomas

Rene

Rene

Vor einigen Jahren hatte ich die damals erste Version gebaut und sie funktionierte eine Weile. Bis plötzlich Schluß war und das System nach dem Ausführen von decoder→begin(buff, out); immer wieder neu startete. Inzwischen habe ich die Aduino IDE 2.3.2 und nach zahlreichen Versuchen merke ich, dass es der Stream ist, der nicht funktioniert. Denn nachdem ich MDR Sputnik zum Start geladen hatte, hörte ich wieder Musik. Also habe ich erst einmal vor dem Restart den aktuellen (defekten) Sender wieder gegen einen funktionierenden getauscht, denn sonst kommt man da nicht wieder raus:
….
Serial.printf(“MP3 done\n”);
// Restart ESP when streaming is done or errored
pref.putUShort(“station”, 0); // Reset, da akt. Stream defekt war
delay(2000);
ESP.restart();
….

Was z.B. nicht funktioniert, ist der Stream von SSL. Im Explorer läuft das, nicht aber hier.
https_://sunsl.streamabc.net/sunsl-sslsimulcast-mp3-192-4434053
Warum?

Rainer

Rainer

@all
Nur mal so ein Tip an die mit etwas Erfahrung. Die Arduino IDE ist ja ganz nett, aber ehr für den Anfänger gedacht. Die Konfiguration ist zunehmend ein Maze, dieses umständliche Einbinden der neun Boards speziell ESP xxx sowie der Rest. Auch die ganze Bibliotheksverwaltung, einfach nur grausam. Gut ich habe auch damit angefangen, aber sobald ich das erste Mal von PlatformIO basierend auf VSC gehört habe und getestet habe war Arduino IDE vergessen. Ein Sprung wie vom von der Pferdekutsche auf nen Düsenjet.
Ich kann nur empfehlen, schaut euch das mal an, gibt es für Widows, MAC und Linux.
Ich mein, ich hab mal vor vielen Jahren mit Z80 und Assembler und eingab eich Hex Code angefangen, d.h. ich bin Kummer gewohnt. Es geht aber nichts über Komfort :-)

Gruß

Rainer

StefanH

StefanH

Hallo,
Ich habe mir das Set “Internetradio” gekauft und aufgebaut. Nach anfänglichen Problemen mit der Kompilierung, ich habe sehr wenig Erfahrung mit der IDE, hat es dann geklappt.
Anfänglich hat das Radio auch Musik gemacht aber nun hat es sich aufgehängten, ich vermute durch die Auswahl eines nicht funktionierenden Audiostreams. Daraufhin habe ich mir die Kommentare durchgelesen und die Updates von Wolf Geldmacher heruntergeladen und entpackt. IDE gestartet und entsprechend der Info in “Readme” alle Versionen der Includes überprüft.
Beim Kompilieren kommt nun die Fehlermeldung:
“\ESPwebRadio\senderconfig.ino:2:31: fatal error: ESPAsyncWebServer.h: No such file or directory”
Meine Vermutung ist das die IDE-Version 2.3.2 dafür verantwortlich ist? Wenn das so ist wäre meine nächste Frage wie ich die Version ändern kann, nur durch eine neue Installation der IDE?
Vorab Danke für Rückmeldungen.
Stefan

Ciro

Ciro

Ich habe im Hintergrund immer so ein leichtes klackendes bzw. pochendes Geräusch, das nicht mit der Lautstärke ansteigt. Am deutlichsten hört man es wenn die Lautstärke bis kurz vorm Abschalten runterregelt ist und man vom eingestellten Sender nichts mehr hört. Tritt bei allen drei Sketchversionen auf. Mich würde mal interessieren ob das nur bei mir so ist.

Wolf

Wolf

@Rainer
Du hast natürlich recht ;-) Typischer C-Uropa Fehler (mit K&R angefangen…)
@Werner oe9fwv
Evtl hilft es, die Konsolenausgabe anzuschauen? In deinem speziellen Fall könnte
es auch mit deiner Aenderung für mehr als 20 Sender zusammenhängen: Die Sender (und einige weitere Parameter) werden als Properties in nicht-flüchtigem Speicher hinterlegt und das “überlebt” auch ein Neuhochladen des Programms und kann dann Probleme machen (“Spiele Position 25 einer 20 Elemente langen Liste…”). Zudem ist wohl der frei verfügbare Speicher recht knapp, weil diverse Teile des Programms dynamisch Speicher anfordern und auch die Stacks recht bschränkt sind. Ich würde zuerst mal versuchen, die Properties aufzuräumen und, wenn das nicht hilft, schauen, wo eine Reduktion des verwendeten Speichers möglich ist.

Werner oe9fwv

Werner oe9fwv

@Rainer Danke für die Info wegen des Fehlers in der senderconfig.ino, das hat mein Problem gelöst und alle Sender werden mit der Version von Wolf jetzt gespielt.
Arduino.ide hat den Fehler wirklich nicht angemeckert.
Mein Problem mit der Senderliste im Webbrowser (Abbruch nach 18 Sendern) ist damit auch behoben. Vielen Dank auch an @Wolf für deine Arbeit!
lg Werner

Werner oe9fwv

Werner oe9fwv

@Wolf Gemacher: bei mir lässt sich deine Version zwar einwandfrei kompilieren, aber es lässt sich kein Sender mehr abspielen. Die IP Adresse des Radios erscheint im Display, die Senderliste lässt sich auch abrufen, wenn ich einen Sender abspielen will, kommt aber nur Gebrutzel aus dem Lautsprecher.

Rainer

Rainer

@Wolf bin gerade dabei Deinen Code in die PlatformIO (VSC) zu übertragen, und dabei auf einen Fehlergestoßen. In Zeile 13 der SenderConfig.ino steht
int senderConfig_loop() {
die Funktion gibt aber keinen Wert zurück, und auch da wo sie aufgerufen wird, wird kein Rückgabewert erwartet. Mag sein, dass die Arduino IDE das nicht anmeckert, der PlatformIO Compiler tut das, sollte also besser heißen
void senderConfig_loop() {

Gruß
Rainer

Rainer

Rainer

Hallo, wegen der Probleme mit dem Deckel habe ich diesen neu mit einem korrekten Nippel für den USB Anschluß konstruiert, dto. einen modifizierten Boden, Sowhol die FreeCAD als die stl Datei könnt ihr hier https://zen-works.de/home abholen.
Viel Spaß

Wolf Geldmacher

Wolf Geldmacher

Ich hab’ das Ding jetzt auch nachgebaut – und den Code von Andreas noch etwas weiter überarbeitet:
- Ungültige URLs oder versiegende Datenströme führen nicht mehr zu Hängern. Auch wird in den meisten Fällen eine Fehlermeldung auf dem Display angezeigt.
- Die Synchronisation zwischen dem Wählschalter und der Anzeige wurde verbessert: Der Wählschalter wird per Code auf den angezeigten Kanal gestellt. Dadurch gibt es beim Starten oder beim Kanalwechsel über das Web-Frontend keine Sprünge auf die 0 Position mehr.
- Beim ersten Start wird der AP Name (WEBRADIO) und die IP Adresse des Radios solange angezeigt, bis das WLAN konfiguriert wird. Bei einem regulären Start wird kurz die via DHCP erhaltene IP Adresse angezeigt (damit sie im Browser verwendet werden kann ;-)
- Wie im Code von Andreas wird der AP Modus auch getartet, wenn kein WLAN verfügbar ist, oder die Konfiguration für das erreichbare WLAN nicht stimmt. Zusätzlich kann eine Neukonfiguration erzwungen werden, wenn im Web-Frontend ein Kanal mit der (ungültigen) URL “WlAnReSeT” eingerichtet und dann gewählt wird.
- Die Auswahl eines Kanals im Web-Frontend wirkt sofort und benötigt keinen Neustart mehr (der Trick dabei ist, dass die Änderung nur signalisiert wird und erst in der Hauptschleife dann aktiv wird ;)
Den veränderten Code habe ich in meiner owncloud/nextcloud unter
https://owncloud.womaro.ch/owncloud/index.php/s/gjR4LMZMaRWYWbt
publiziert.

Gerhard

Gerhard

Auch ich danke Rainer ganz herzlich für den Tipp!! Was habe ich Stunden verbraten mit diesem Projekt, aber jetzt laufen auch alle meine Schweizer Sender. Wenn es noch mehr Schweizer hier hat, habe hier ich noch einige Links die bei mir funktionieren. Verirren sich noch Neuling zu diesem Blog, nicht vergessen, zum kompilieren der Dateien funktioniert wirklich nur die unten aufgeführte Kombination.

DRS1 http://stream.srg-ssr.ch/m/drs1/mp3_128
DRS2 http://stream.srg-ssr.ch/m/drs2/mp3_128
Swiss-Pop http://stream.srg-ssr.ch/m/rsp/mp3_128
Vintage http://vintageradio.ice.infomaniak.ch/vintageradio-high.mp3
Swiss-Classic http://stream.srg-ssr.ch/m/rsc_de/mp3_128
Swiss-Jazz https://stream.srg-ssr.ch/m/rsj/aacp_96
Musigwaelle http://stream.srg-ssr.ch/m/drsmw/mp3_128

Werner oe9fwv

Werner oe9fwv

Ich habe meine Senderliste auf 30 Sender erweitert (#define STATIONS 30 //number of available stations)
und in der Senderlist.ino die zusätzlichen Sender eingetragen. Wenn ich nun über das Webinterface einen Sender abspielen lasse, wird die html Seite verkrüppelt dargestellt und zeigt meist nur noch Sender bis Stelle 18 an.
Weiss jemand an was das liegt?

Werner oe9fwv

Werner oe9fwv

@Rainer: Du bist mein Held! Es ist wirklich nur diese Kommentarzeile in der Funktion MDCallBack
“Serial.printf(”METADATA ‘%s’ = ‘%s’\n", ptr, s1, s2);"
die man auskommentieren muss. Nun funktioniert auch Swiss Jazz und Ö1.
suuuuper!

Werner oe9fwv

Werner oe9fwv

Die Frage, warum manche mp3 streams nicht laufen und man in einer Endlosschleife gefangen ist, beschäftigt mich auch. Zuerst dachte ich, es liegt nur an Links, die nicht Port 80 verwenden, aber das kann es auch nicht sein.
http://orf-live.ors-shoutcast.at/oe1-q1a funktioniert am PC, aber nicht im Internet Radio.
ebenfalls http://stream.srg-ssr.ch/m/rsj/mp3_128 läuft auch nicht.
Leider sind das meine Lieblingssender.
Aus der Endlosschleife komme ich nur heraus, wenn ich über die Senderwebseite (DANKE Andreas für das!) einsteige und einen lauffähigen Sender anwähle.

Rainer

Rainer

Problem gelöst-
Die rein zu Debug zwecken genutzte Zeile in der Funktion MDCallBack
“Serial.printf(”METADATA ‘%s’ = ‘%s’\n", ptr, s1, s2);"
lässt da Programm abstürzen, kommentiert man die aus läuft alles rund, zumindest im alten Code. Der neue Code kommt morgen dran. Jetzt ist erst mal Feierabend.

Rainer

Rainer

Hallo Andreas Schröder,
zuerst muss ich sagen, das ist super gemacht, mit dem Access Point, das klappt auch soweit gut. SSID und PW eingeben speichern und nach dem Neustart kommt er sauber in mein WLAN, nur das alte Problem vom Originalcode ist geblieben, er zeigt noch den Sender an und macht dann einen reboot.
Den alten code habe ich mal mit den Beispielen aus der ESP8266AUDIO Bibliothek verglichen, das sieht soweit alles gut aus, wenn auch teilweise etwas anders gelöst. In dem Beispielcode ist allerdings der Buffer keine 80 * 1024 sondern nur 2 * 1024, ich habe das mal geändert und seltsamer weise höre ich dann so ca. 1/2 bis 1 Sekunde den Sender danach kommt wieder der Absturz und das Spiel geht von vorne los.
Ich häng da seit Stunden fest, kann mir bitte irgend wer helfen. Danke.

motorengk

motorengk

Hat jemand eine Ahnung, wieso diese Streamadressen im Webradio nicht laufen? Wenn ich die Adressen im PC eingebe läuft alles einwandfrei. Im Webradio vielleicht 1 Sekunde, dann startet er wieder neu und das endlos.
Hier zwei Beispiele:
http://stream.srg-ssr.ch/m/drs1/mp3_128
http://stream.srg-ssr.ch/m/rsp/mp3_128
Für eine Antwort dankt Gerhard

Rainer

Rainer

Nachtrag zu den Schrauben, Für Platine, Deckel und Lautsprecher habe ich mir hier https://www.ebay.de/itm/173571840390?var=474690022996&trkparms=amclksrc%3DITM%26aid%3D777008%26algo%3DPERSONAL.TOPIC%26ao%3D1%26asc%3D20240130164828%26meid%3Dbaa750abd9d048daab3cfed82108228f%26pid%3D101959%26rk%3D1%26rkt%3D1%26itm%3D474690022996%26pmt%3D0%26noa%3D1%26pg%3D4375194%26algv%3DRecentlyViewedItemsV2&trksid=p4375194.c101959.m146925&trkparms=parentrq%3A6ea4e7c71900ac1cc86cb3a2fffde390%7Cpageci%3A1d3184d4-37b4-11ef-b696-2e064139646c%7Ciid%3A1%7Cvlpname%3Avlphomepage
Schrauben mit Gewinde 1,7mm und Länge 5mm besorgt, die passen 1a, für das Zusammenschauben der Gehäuseteile werde ich mir wohl noch passende suchen müssen.

Rainer

Rainer

1. Das mit dem Druck des gehäuses ist gelöst, gelbes Filament und er Druch läuft wie Butter, warum es mit dem Weißen nicht geht ????, da sonst alles mit dem Weißen geht.
2. Wegen der Probleme die manche mit dem Deckel haben, im Cura einfach um 180 Grad drehen und auf die Druckplatte auflegen, tut 1A
3. Die Bestückungsskizze stimmt nicht zum Schaltplan, die 22k und die 4,7k sind vertauscht, oder falls doie Bestückungsskizze richt ist stimmt der Schaltplan nicht. Kann dazu jemand etwas sagen.
4. ich arbeite mit VSC / PlatformIO, da tritt ein Fehler beim kompilieren auf, die URLs müssen const char definiert werden nicht char, dto. auch in der Arduino IDE sonst selber Fehler.
5. im VSC kann ich mit Anpassung sieh Punkt 4 kompilieren und hochladen, es startet auch alles soweit richtig, heist er connected zum WLAN, initialisiert das Display, zeigt den ersten Sender an. nur wenn ich an der Codesequenz ankomme
…..
Serial.printf_P(PSTR);
Serial.printf_P(“Decoder start…\n”);
decoder→begin(buff, out);
Bin noch nicht darauf gekommend wieso.
Habe mir mal Beispiele vom Autor der ESP8266Audio Lib, die ja verwendet wird geholt, die funktionieren alle und spielen sauber Musik.
verschwinded das Programm im Nirwana und der ESP32 macht einen Reboot.
6. In der Arduino IDE bekomme ich den Code auch kompiliert aber nicht hochgeladen,
Allerdings habe ich die aktuelle Version und die Beschreibung ist noch mit einer älteren, da sieht das anders aus. Habe allerdings, da ich schon seit Jahren nur noch mit PlatformIO / VSC arbeite nicht mehr soviel Erfahrung mit der Arduino IDE. Bis jetzt lief aber noch jedes .ino Program unter PlatformIO.
Würdemich über eine Antwort freuen, Danke

Gruß
Rainer

Gerhard Kündig

Gerhard Kündig

Ich würde AZ-Derlivery unbedingt raten, dass sie die richtige Auswahl der Bibliotheken bereits in die Anleitung integrieren würde und zwar gut leserlich! Die eingebauten Screenshots enthalten zwar die richtige Auswahl, aber es ist sehr unleserlich. Ich habe ganze Tage verbraten bis es lief und es läuft wirklich nur mit der einzig richtigen kombination von Andreas Kreher. Wer seine Arduino-IDE auf dem neusten Stand hat wird nie zum Ziel kommen. Das ist eigentlich schade für dieses tolle Projekt.

Werner

Werner

Zur Frage von Marcel mit den Schrauben:
2) Welche 2,2mm Schrauben sind das – Ich nehme an selbstschneidend. Aber wie lange? Baumarkt?
Es ist in der Beschreibung ein Amazon Link https://www.amazon.de/gp/product/B075DBGFSB
für ein Schraubenset. Man braucht für das Gehäuse 4 von den 22mm langen, der Rest ist mit den 6.5mm langen zu befestigen, ausser die Lautsprecher, dafür würde man noch kürzere brauchen (4mm?) aber die sind nicht in diesem Set. Ich habe die Spitzen mit einem Seitenschneider abgezwickt, damit sie sich nicht durch das Gehäuse bohren.

füp

Rolf

Rolf

Ich lese immer wieder hier von Problemen beim Drucken des Deckels für den Akku.
Verschiebt doch einfach das Druckteil im Slicer soweit nach unten, dass der Rest des Teils flächig auf dem Druckbett aufliegt. Dann fehlt halt der kleine Nippel, aber das Teil lässt sich dann einwandfrei drucken,,,,

Werner oe9fwv

Werner oe9fwv

erst mal zum Deckel: die STL Datei hat einen Fehler. Da steht ein kleiner Klotz über die Fläche, ich glaub dieses Teilt wurde vom Konstrukteur zu tief versenkt, es ist nämlich so, dass die Halterung für die USB Buchse zu kurz geraten ist, sodass diese im Gehäuse wackelt. Ich habe es so gelöst, dass ich diese Schichten mit dem Klotz im Slicer einfach abgeschnitten habe, damit liegt der Deckel (180° gedreht) plan auf dem Druckbett und wird schön gedruckt. Zusätzlich muss man den Deckel an der Stelle wo die USB Buchse angedrückt werden sollte, etwas dicker machen.
@Marcel: wenn du das als Schulprojekt machen willst, würde ich dringend raten, einen Prototyp für dich erst selbst zu bauen, damit du die Tücken des Objekts erstmal kennen lernst und lösen kannst.
Ich hoffe noch auf einen Tip, was man tun kann, wenn eine Station nicht erreichbar ist und das Radio “in der Luft hängen bleibt”.
Vielen Dank an Andreas für die Überarbeitung des Sketches, das ist ein riesiger Fortschritt und macht die Sache viel brauchbarer.

Marcel

Marcel

Hallo,
auch ich habe das Problem mit dem “Deckel” und 3D-Druck (Cura) wie “Herbert” im April. Nur Fadengewirr.
Gib es eine Lösung? Anderer Slicer?

Marcel

Marcel

Hallo,
ich habe vor, dieses Projekt im Rahmen unserer Schul-Elektronik-AG umzusetzen und wollte gerade die Teile (einzeln, da Set ausverkauft) für 8 Schüler einkaufen. Das sind ja doch etliche Euronen. Nun habe ich 3 Fragen:
1) Sollten 20cm F-F-Kabel oder 10cm genommen werden?
2) Welche 2,2mm Schrauben sind das – Ich nehme an selbstschneidend. Aber wie lange? Baumarkt?
3) Ich bin etwas geschockt ob der Probleme, die hier im Forum berichtet werden. Klar, das Projekt ist schon älter, Libraries müssen angepasst werden. Gibt es irgendwo ein Repo / Files, die in einer aktuellen Umgebung “funktionieren” – ich habe mit den Kids wenig Lust auf Jugend Forscht. Und welche HW-Anpassungen (Spannung, Masse, Taster….) sind noch zwingend erforderlich?
Ich wäre für eure Hilfe sehr dankbar, ich bin zwar nicht unbedarft, aber mit einem Haufen Schüler in Nacken möchte ich nicht alle Probleme der Welt lösen :-)

Rainer Müller-Knoche

Rainer Müller-Knoche

Danke für die Fleißarbeit, auch mit dem Gehäuse. Aber beim Druck habe ich Probleme.
Ich habe meine CR3-Mini nun schon ca. 7 Jahre und jede Menge gedruckt, aber das Gehäuse bringt mich zum Wahnsinn. Druck Deckel geht 1a, Druck Fronseite geht schief, d.h. er druckt die ersten ca. 2,5 mm 1a, dann beginnt ein klacken wie wenn die Düse verstopft ist, erst seltener, dann immer öfter, dann dauernd. bis die der Extrudor, das Filament durch hat und kein Material mehr nachkommt, der Rest wird ins Leere gedruckt.
Ich habemit diesem Material und diesen Einstellungen schon vieles auch komplexeres gedruckt, ohne Problme.
Ich habe alles auseinader gebaut gereinigt und mit neuer Düse, neuem PTFE Schlauch neuen Fittings wieder zusammengebaut, selbes Ergebnis, drucke ich direkt nach dem Abbruch etwas anderes geht es. Ich habe schon verschiedene andere Einstellungen beim Slicen (CURA) probiert, bringt keine Änderung, Aktuell läuft der 7 te Versuch, diesmal mit gelb statt weiß, weiß noch nicht ob das was bringt.
Hat der Autor oder wer anderes eine Idee. Oder hat wer ähliche Probleme, d.h. wer hat überhaupt schon mal versucht das Gehäuse zu drucken.
Viele Dank für jeden Tip.
Rainer

louis chambon

louis chambon

I do an answer for me !
Found !
I got 2 libraries SD.h . One very old (V1.5 of arduino ide).
I delete it.
It works !
Another expansion i made :
- got time with NTP, and put it on display.
- WiFi.RSSI() with a programmed character to display quality of connection.
Have fun with this little radio !

Steam Concept

Steam Concept

Ich habe das Radio bei der vorherigen Angebotsaktion zusammengebaut und es funktioniert einwandfrei. Es gibt allerdings ein paar Abweichungen:

1.) DIY-Internetradio-Wecker, eine Weckfunktion ist in beiden Sketchen nicht enthalten
2.) Das Platinenlayout weicht leicht von der Beispielabbildung ab
3.) Beim Compilieren gibt es bei der LiquidCrystal Bibliothek eine Warning
4.) Der Deckel im Gehäuse läßt sich so nicht direkt drucken

Ich habe zuerst den nackten ESP32 mit dem Originalsketch über einen Raspberry Pi und der 32 Bit Arduino Ide, Version 1.8.19. programmiert. Die IDE habe ich wie folgt vorbereitet und dabei genau darauf geachtet alle Bibliotheken genau wie in den Screenshots in den jeweiligen Versionen angegeben auszuwählen. Es gibt ähnlich lautende Bibliotheken oder neuere Versionen, ich habe sie nicht ausprobiert.

1.) Datei → Voreinstellungen → Zusätzliche Boardverwalter URLs:
https://dl.espressif.com/dl/package_esp32_index.json
Achtung, die Angabe in der Anleitung mit dem Zusatz „für den ESP32“ ist falsch
2. Werkzeuge → Boardverwalter → esp32 (1.0.6)
3. Werkzeuge → Bibliotheken verwalten → LiquidCrystal I2C (1.1.2) /Marco Schwart
4. Werkzeuge → Bibliotheken verwalten → AiEsp32RotaryEncoder (1.4.0) /Igor Antolic
5. Werkzeuge → Bibliotheken verwalten → ESP8266Audio (1.9.5) /Earle F. Philower

Den Sketch laden, #define SSID und #define PSK anpassen und den Sketch compilieren und hochladen. Das sollte, bis auf die o.g. warning, klappen. Den seriellen Monitor auf 115200 Baud stellen und schauen, ob der ESP32 arbeitet. Man kann die warning auch weg parametrieren wenn man in der Arduino\libraries\LiquidCrystal_I2C\library.properties die Zeile architectures=avr in architectures=* ändert.

Danach habe ich die Platine bestückt und das Display in Betrieb genommen. Das Platinenlayout hat einen GND und +5V Anschluß, den es so auf der Beispielabbildung nicht gibt. Ich empfehle nach der Beispielabbildung zu verdrahten. Dann schrittweise die restlichen Komponenten anschließen.
Beim Laderegler mußte ich ziemlich lange drehen bis ich auf 5,2 V kam.
Als alles lief habe ich den Sketch von Andres Schröder hochgeladen, was ich nur empfehlen kann.

Zum Gehäuse:
Den inneren Deckel kann man ohne Anpassungen nicht drucken, da zuerst die Fixierungen für die Ladekomponenten gedruckt werden, der eigentliche Deckel würde dann schweben. Man kann den Deckel um 180° drehen, aber auch dann geht es nicht direkt, weil der Deckel erst bei Z=0.6 beginnt. Ich habe beim Slicen Stützkonstruktion angewählt und dann ging es. Das sieht nicht besonders schön aus aber man sieht es ja ohnehin nicht. Das Material ist für die Verschraubungen an einigen Stellen sehr gering, aber es geht. Ich habe 2,2mm Blechschrauben bei ebay gekauft, da kosten 25 Stück mit Porto ca. 1,50€.
Beim Gehäuse hätte ich mir gewünscht, dass auch die USB Buchse des ESP32 zugänglich wäre um Sketche auch ohne öffnen des Gehäuses hochladen zu können. Schön wäre auch das Versenken der Schraubenköpfe auf der Gehäuserückseite gewesen.

Werner oe9fwv

Werner oe9fwv

@louis chambon
the error message is irrelevant, you can ignore it. It just means that the board is not tested for this library, but it works nevertheless. If you want to get rid of the error message, you can add esp32 to the supported boards in the properties of the library.

Werner oe9fwv

Werner oe9fwv

@Jörg:
Ich hatte das gleiche Problem wie du, das Radio funktionierte nur mit einem USB Anschluss am ESP32. Ursache: Das Batterielademodul brachte nicht genug Strom auf, um den Up-Converter zu versorgen und die Spannung zur Versorgung des ESP32 war unter 4V. Da ich das Radio ohne Batterie beitreiben wollte, hab ich einfach den Upconverter eingang direkt an die USB Versorgung des Batterieladegerätes angeschlossen. (2 Lötaugen links und rechts des Mini-USB Steckers) Damit funktioniert das Radio, Stromverbrauch ist <200mA. Mit der Bedienung habe ich allerdings noch Probleme. Es gibt im Sketch Radiostationen, die nicht erreichbar sind (Polen, Hessen3) und wenn man so eine Station auswählt ist man in einer Endlosschleife gefangen, das Radio bootet neu und da die Station im Memory gespeichert wird, ist man wieder dort wo man keine Verbindung hat. Tips willkommen, wie man das lösen kann.

louis chambon

louis chambon

hello ! I just bought the kit INTERNET RADIO.
I have a problem with the sotfware :
" ARDUINO\libraries\SD\src/utility/Sd2PinMap.h:524:2: error: #error Architecture or board not supported."

I work with latest IDE V2.3.2 :
card manager V1.0.6 ESP32 ( < 2.0.0 as noticed in the documentation)
and these version for libraries :
V1.9.7 ESP8266audio
V1.6 AiEsp32RotaryEncoder
V2.1.0 Preferences
V1.1.2 LiquidCrystal_I2C.h
V1.2.4 SD
Is somebody have a solution ?
thank’s

Jörg

Jörg

Esp32 funktioniert nur bei USB Anschluss am Board, auch mit Powerbank. Betrieb mit Akku funktioniert nicht, kein Wlan. Test mit Versorgung über ext.Usb an Pin 5V funktioniert nur wenn ich beide Usbbuchsen am Gehäuse mit einer Drahtbrücke verbinde, sonst gleiches Fehlerbild. Test erfolgte auch noch mit Esp32 Devkit v4, gleiches Problem. Leider bin ich mit meinen Ideen am Ende. Der Akkubetrieb wäre wichtig.

Wolle

Wolle

Wie Rolf im Juni24 geschrieben hat, habe ich es auch gemacht: erst die in den Fehlermeldungen auftauchenden Bibliotheken löschen (Pfad wird angezeigt), dann exakt nach den Bildern die Bibliotheken mit entsprechenden Versionen neu laden, plötzlich funktioniert das Ganze.
ESP32 Version 1.0.6
LiquidCrystal I2C Version 1.1.2
AiEsp32RotaryEncoder Version 1.4.0
ESP8266Audio Version 1.9.5

Rolf

Rolf

Ich habe das Radio zum Laufen gebracht. Als ESP32 habe ich das “ESP32 Pico Kit” ausgewählt.
Was mir (noch) nicht gefällt, ist daß die meißten Stationen sehr leise sind. Probleme gab es noch mit der Senderliste. Sobald ein Sender auftaucht, welcher nicht läuft, fährt sich das Radio fest. Aus und Einschalten hilft dann auch nichts, da sich das Radio die letzte Station merkt und immer wieder dort hin will. Ich konnte mir nur so helfen, die entsprechende Station im Sketch mit vorgestellten // inaltiv zu schalten , den Sketch neu zu kompilieren und wieder hoch zu laden.
Vllt kann ich mit diesen Hinweisen einigen Usern weiterhelfen.

Rolf

Rolf

Heute wurde mein Kommentar veröffentlicht.
Zwischenzeitlich habe ich meine Probleme gelöst und den ESP32 beschreiben können.
Ich bin folgendermaßen vorgegangen:
Die Ordner auf meinen Pc, welche in den Fehlermeldungen angezeigt wurden, habe ich gelöscht. Danach habe ich genau nach Anleitung verfahren, und darauf geachtet, dß genau die in den Bildern angegebenen Bibliotheksversionen geladen wurden.
Wenn die Arduino IDE die daten hochladen will, muß man korz den Taster Boot auf der Platine drücken. Danach hat es bei mir einwandfrei geklappt.
Ich weiß nicht, ob es mit fertigen Bin-Dateien überhaupt klappt, da man ja seine Verbindungsdaten vom WLAN eintragen muss.
@Thorsten Die Plotterdatei hat nichts mir der 3D-Druckdatei zu tun. Zum 3D-Druck musst du Dir die stl-Dateien herunterladen und iese auf dem 3-Drucker ausdrucken.

Rolf

Rolf

Ich bin am Ende.
Ich habe mir den Bausatz gekauft und möchte den Sketch auf meinen ESP32 -WROOM-32 laden. Ich habe nach Anleitung das Board über espressif.com in der Version 1.06 geladen. In der Bordauswahl erscheint dann mein Board ESP32-WROOM-32 nicht. Wenn ich ein anderes Board , z.B. ESP32 Dev Module auswähle, kommen beim Kompilieren einige Fehlermeldungen.
Gibt es nicht eine fertige Bin-Datei, welche man dann einfach hochladen kann?

rlm

rlm

@Glenn Foyster
Take the German words and plug them into Amazon.de
That’s how I found the parts.

Oliver Dreier

Oliver Dreier

Stand 06/2024
Beim Compilieren gibt es diverse Fehlermeldungen.
Es ist auch echt ätzend, in den Kommentaren nach Hinweisen zu suchen, wie es gehen sollte (was scheinbar die genauen Bibliotheken und deren Versionen betrifft). Es gibt geschätzt 5 Andreas die alle Beiträge gemacht haben, aber die alle in ihrem “Kontext” richtig sind, aber im gesamten nicht weiterbringen.
Das Projekt aus aus 03/2022
→ Zeugs in die Tonne, nicht mehr dran denken.

Kommentar hinterlassen

Alle Kommentare werden von einem Moderator vor der Veröffentlichung überprüft

Empfohlene Blogbeiträge

  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