Internet-Radio mit dem ESP32 - UPDATE

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

109 commentaires

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.

Achim Kalthoff

Achim Kalthoff

Hallo, ich kann den Sketch leider nicht kompilieren. Ich habe immer die Fahlermeldung "AVR/IO.h kann nicht gefunden werden. Alle Vesuche führten bisher nicht zum Erfolg. Was kann ich hier machen?

Johann Auerbäck

Johann Auerbäck

Hallo habe so ziemlich alle Liquidcrystal I2C files getestet leider bekomme ich beim kompilieren immer Fehlermeldung, es sind leider meine ersten Gehversuche mit dem Arduino IDE (Compilation error: no matching function for call to ‘LiquidCrystal_I2C::begin()’) bitte um Hilfe.

KDU300

KDU300

Habe nun alles zusammen gebaut.
Die FW wurde mit PlatformIO gebaut (Espressif32 Ver 5.1.0 u. ESP8266Audio Ver 1.9.7). FW läuft.
Startet aber nach wenigen Sekunden neu mit der Loop-Meldung “mp3 done”.
Hat Irgendjemand eine Idee?

Thomas

Thomas

Hallo.
Ich wollte das Radio nachbauen, leider erhalte ich beim compilieren die Fehlermeldung “‘class Preferences’ has no member named ‘isKey’”
Da ich nicht programmieren kann, sagt mir der Fehler leider nichts. Eine Suche danach war leider auch erfolglos.
Was will mir die Meldung sagen? Wie bekomme ich den Fehler weg?
Es ist die Zeile if (pref.isKey(“station”)) curStation = pref.getUShort(“station”); im Code.

Vielen Dank.

Gerald Lechner

Gerald Lechner

Ich habe einen Link zu den Schrauben (2.2mm Blchschrauben) der Materialliste hinzugefügt.

KDU300

KDU300

Moin,
habe mich jetzt auch hinreißen lassen, das Internetradioprojekt umzusetzen.
Was sind das für Befestigungsschrauben. Die gefallen mir besser als Heißkleber zu benutzen.
Die Schrauben sollte ruhig auch in der BOM auftauchen.

 Wolle

Wolle

Wie groß sind die Gehäuseabmessungen?

Hauke

Hauke

Betr. Meine Anfrage wg. Programmabruch durch Zwangstrennung vom Provider.
Das Problem habe ich gelöst indem ich einen Watchdog installiert habe. Siehe folgende Zeilen

#include // für Watchdog

#define WDT_TIMEOUT 10 // für Watchdog

am Ende von void setup() anfügen:

esp_task_wdt_init(WDT_TIMEOUT, true); //Zeit für Watchdog setzen wenn esp_task_wdt_reset() nicht aufgerufen wird esp_task_wdt_add(NULL); //Aktuellen Thread zur WDT-Überwachung hinzufügen

unter void loop() erste Zeile:
esp_task_wdt_reset(); // Watchdog Zähler zurücksetzen

Fällt nun das Internet aus dann wird alle 10 Sekunden ein Reset ausgeführt bis die Verbindung wieder aufgebaut werden konnte.

Wer es gebrauchen kann . Gruß Hauke

Horst Mayer

Horst Mayer

Frage zur Tonqualität mit dem internen DAC

Bevor ich mich da an den Nachbau mache:
Kann vielleicht mal jemand realistisch über die Tonqualität berichten?
So wie ich das verstanden habe, werden die beiden ESP32 internen 8 Bit DACs verwendet.
Mit 8 Bit kann man doch wohl das Prinzip zeigen aber wohl kaum ernsthaft einen guten Klang erzeugen?!
Da braucht es doch wohl eher einen externen I2S DAC?

Helmut Lieven

Helmut Lieven

Bei mir läuft der Code nicht durch. Bei LiquidCrystal_I2C lcd stopt er. "invalid conversion from “int” to “tbacklightPol”[-fpermissive]
Alles noch mal neu geladen. Komm nicht weiter.
Gruß Helmut

Hauke

Hauke

Tolles Projekt, funktioniert auf Anhieb. Ich habe nur ein kleines Problem. Immer wenn der Provider meines Internets eine Zwangstrennung durchführt wird der Empfang unterbrochen, der Lautsprecher brummt nur noch und es am RotaryEncoder keine Einstellung mehr möglich. Hier hilft nur ein Druck auf die Reset Taste oder Trennung der Stromversorgung. Gibt es hier eine Lösung um das Gerät im Dauerbetrieb laufen zu lassen. Danke schon mal für die Antwort.

Gerald Lechner

Gerald Lechner

@Robin: Die Station http://rnrw.cast.addradio.de/rnrw-0182/deinrock/low/stream.mp3 funktioniert mit derm Web-Radio leider nicht.

Gerald Lechner

Gerald Lechner

Zuerst mal, danke für die positiven Kommentare zu diesem Beitrag. Ich will versuchen die gestellten Fragen zu beantworten:
@Mike Westermann: Die zusätzliche Bluetooth einbindung könnte vielleicht gehen. Allerdings sind mir Probleme bei der gleichzeitigen Nutzung von Bluetooth und WLan am ESP32 bekannt. Ich denke, dass diese Erweiterung eher aufwendig werden würde.
@Dieter: HTTPs funktioniert mit der ESP8266Audio Bibliothek derzeit nicht. Redirekt funktioniert ebenfalls nicht. Leider gibt es auch für die weiteren Fragen keine Lösung.
@Richie69: Beim ICYStream liefert die ESP8266Audio Bibliothek offenbar keine Metadaten Events. Ich hbe einen entsprechenden Issue eingegeben.

Richie69

Richie69

Hallo und vielen Dank für das Projekt. Es scheint bisher das einzige zu sein, was ein Stereosignal aus einem webstream mit nur dem ESP32 in einer guten Qualität produziert. Chapeau!
Übrigens…wenn man den pin EN über einen Elko 4,7 mü gegen Masse verbindet, erübrigt sich das lästige drücken des Boot-Tasters während des uploads.
Nun zu meinen Problem: Ich möchte gern ein Oled anstatt des Lcd verwenden und den Titel/Interpreten darstellen. Habe den Code dafür abgeändert. Leider bleibt mir die ICY sowohl im Monitor, als auch im Display verborgen.
Irgendeine Idee?
Richie

Dieter

Dieter

Ich habe einige Fragen: Die Beispiel-Links sind alle http, möglicherweise stehen aber auch https-Quellen zur Verfügung. Können auch https-Quellen verarbeitet werden? # Ich habe bei m3u-Links festgestellt, dass da ein mp3-Link enthalten sein kann, aber das ist nicht einheitlich. # Dann gibt es auch mp3-Links, die redirected werden: Es wird da zu einem tempräreren Link weitergeleitet. Im Webrowser kann man das erkennen. Kann das Internetradio auch einem Redirect folgen? # Ich habe auch mal ein Internetradioquelle gefunden, bei dem zunächst eine Datenschutzerklärung abgenickt werden sollte. # Einige Internetradios verwenden auch eigene Player-Software, die im Webrowser läuft. Dadurch kann die URL der Quelle versteckt werden. # Gibt es für die Probleme Lösungen?

Mike Westermann

Mike Westermann

Hallo,
ein tolles Projekt, welches bei mir nahezu ootb funktioniert hat. Vielen Dank an alle Mitwirkenden und den tollen Support hier.
Ich habe natürlich auch eine Frage:
Ist es möglich den code von dieser Seite, https://www.pschatzmann.ch/home/2020/03/27/1255/ ,
irgendwie mit zu integrieren? Die Bluetooth-Funktionalität wäre sicher eine tolle Erweiterung, und man könnte beispielsweise beim Einschalten abfragen, ob man heute vom Handy streamen, oder Webradio hören möchte. Meine Programmierfähigheiten gehen allerdings gegen Null.
Viele Grüße
Mike

Robin

Robin

So hab es auch geschafft alles zu kompilieren
Meiner startet aber auch immer wieder neu

Connected
Webserver ist gestartet
Active station http://rnrw.cast.addradio.de/rnrw-0182/deinrock/low/stream.mp3
sourcebuffer created – Free mem=111020
created decoder
Decoder start…
Guru Meditation Error: Core 1 panic’ed (LoadProhibited). Exception was unhandled.

Core 1 register dump:
PC : 0×4008ac81 PS : 0×00060d30 A0 : 0×8015232c A1 : 0×3ffb20d0
A2 : 0×00000000 A3 : 0xfffffffc A4 : 0×000000ff A5 : 0×0000ff00
A6 : 0×00ff0000 A7 : 0xff000000 A8 : 0×00000000 A9 : 0×3ffb24d0
A10 : 0×3ffc4ce4 A11 : 0×0000059c A12 : 0×0000001c A13 : 0×00000000
A14 : 0×00000000 A15 : 0×00000000 SAR : 0×00000010 EXCCAUSE: 0×0000001c
EXCVADDR: 0×00000000 LBEG : 0×4008ac81 LEND : 0×4008ac91 LCOUNT : 0xffffffff

Backtrace:0×4008ac7e:0×3ffb20d00x40152329:0×3ffb20e0 0×40156ec2:0×3ffb23f0 0×40156efe:0×3ffb2480 0×400e7a3e:0×3ffb24c0 0×400d4793:0×3ffb2560 0×400d54d4:0×3ffb25f0 0×400d4d2e:0×3ffb2740 0×400d4c35:0×3ffb2760 0×400d4bd7:0×3ffb2780 0×400d5941:0×3ffb27a0 0×400d5abb:0×3ffb27c0 0×400d34cf:0×3ffb27e0 0×400d3767:0×3ffb2800 0×400e8c01:0×3ffb2820

ELF file SHA256: 0000000000000000

Rebooting…

Leon

Leon

Nochmal eine Ergänzung:
Die aktuelle Audio Library 1.9.7 ist kampatibel mit der aktuellen esp32 library 2.0.3.
Die ältere esp32 Version 1.0.6 ist kompatibel mit der Audio library 1.9.5

Robin

Robin

Hallo Leon,
danke für die Antwort
Eine neuere Version wie die 1.0.6 kann ich nicht auswählen

Grüße Robin

julian

julian

Nachtrag zu meinem letzten Beitrag:
Arduino IDE deinstalliert, alle Ordner gelöscht, neu herunter geladen, jetzt kompiliet alles.

Trotzdem bricht jetzt decoder→loop() sofort ab und es erscheint “mp3 done”.

Leon

Leon

Danke an Gerald Lechner – super Beitrag, ich habe das Display und den Encoder rausgenommen und ein Seniorenradio für meinen Opa gebaut – Ein Button für Sender wechseln, ein Poti für Lautstärke.

@Robin
Ich hatte wegen deines Beitrags vor dem ersten kompilieren auf esp32 v1.0.6 umgestellt, damit habe ich die gleichen Fehler erhalten, wie du. Nach umstellen auf esp32 v2.0.3 klappte es dann.

Julian

Julian

Ich habe leider auch Kompilierungsprobleme, wobei ich versucht habe, exakt die Bibliothek-Versionen der Screenshots zu benutzen.

Board: ESP32 Dev Module, installiert als Version 1.0.6
ESP8266 Audio: Version 1.9.5

Beim Kompilieren in Arduino IDE erscheint allerdings die Fehlermeldung “bits/c++config.h: No such file or directory”. Außerdem eine Warnung mit “breadboard:avr:atmega328bb doesn’t define a ‘build.board’ preference”.

C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware -hardware K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages -hardware K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\Arduino\hardware -tools C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\tools-builder -tools C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\tools\avr -tools K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages -built-in-libraries C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\libraries -libraries K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\Arduino\libraries -fqbn=esp32:esp32:esp32:PSRAM=disabled,PartitionScheme=default,CPUFreq=240,FlashMode=qio,FlashFreq=80,FlashSize=4M,UploadSpeed=921600,DebugLevel=none -ide-version=10819 -build-path C:\Users\Julian\AppData\Local\Temp\arduino_build_136623 -warnings=none -build-cache C:\Users\Julian\AppData\Local\Temp\arduino_cache_577544 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.xtensa-esp32-elf-gcc.path=K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0 -prefs=runtime.tools.xtensa-esp32-elf-gcc-1.22.0-97-gc752ad5-5.2.0.path=K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0 -prefs=runtime.tools.esptool_py.path=K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages\esp32\tools\esptool_py\3.0.0 -prefs=runtime.tools.esptool_py-3.0.0.path=K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages\esp32\tools\esptool_py\3.0.0 -prefs=runtime.tools.mkspiffs.path=K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages\esp32\tools\mkspiffs\0.2.3 -prefs=runtime.tools.mkspiffs-0.2.3.path=K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages\esp32\tools\mkspiffs\0.2.3 -verbose C:\Users\Julian\Desktop\testskt\sketch_jun26a\sketch_jun26a.ino
C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\arduino-builder -compile -logger=machine -hardware C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware -hardware K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages -hardware K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\Arduino\hardware -tools C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\tools-builder -tools C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\tools\avr -tools K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages -built-in-libraries C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\libraries -libraries K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\Arduino\libraries -fqbn=esp32:esp32:esp32:PSRAM=disabled,PartitionScheme=default,CPUFreq=240,FlashMode=qio,FlashFreq=80,FlashSize=4M,UploadSpeed=921600,DebugLevel=none -ide-version=10819 -build-path C:\Users\Julian\AppData\Local\Temp\arduino_build_136623 -warnings=none -build-cache C:\Users\Julian\AppData\Local\Temp\arduino_cache_577544 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.xtensa-esp32-elf-gcc.path=K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0 -prefs=runtime.tools.xtensa-esp32-elf-gcc-1.22.0-97-gc752ad5-5.2.0.path=K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0 -prefs=runtime.tools.esptool_py.path=K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages\esp32\tools\esptool_py\3.0.0 -prefs=runtime.tools.esptool_py-3.0.0.path=K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages\esp32\tools\esptool_py\3.0.0 -prefs=runtime.tools.mkspiffs.path=K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages\esp32\tools\mkspiffs\0.2.3 -prefs=runtime.tools.mkspiffs-0.2.3.path=K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages\esp32\tools\mkspiffs\0.2.3 -verbose C:\Users\Julian\Desktop\testskt\sketch_jun26a\sketch_jun26a.ino
Using board ‘esp32’ from platform in folder: K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages\esp32\hardware\esp32\1.0.5
Using core ‘esp32’ from platform in folder: K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages\esp32\hardware\esp32\1.0.5
Warning: Board breadboard:avr:atmega328bb doesn’t define a ‘build.board’ preference. Auto-set to: AVR_ATMEGA328BB
cmd /c if exist “C:\\Users\\Julian\\Desktop\\testskt\\sketch_jun26a\\partitions.csv” copy /y “C:\\Users\\Julian\\Desktop\\testskt\\sketch_jun26a\\partitions.csv” “C:\\Users\\Julian\\AppData\\Local\\Temp\\arduino_build_136623\\partitions.csv”
cmd /c if not exist “C:\\Users\\Julian\\AppData\\Local\\Temp\\arduino_build_136623\\partitions.csv” copy “K:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5\\tools\\partitions\\default.csv” “C:\\Users\\Julian\\AppData\\Local\\Temp\\arduino_build_136623\\partitions.csv”
Detecting libraries used…
“K:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\tools\\xtensa-esp32-elf-gcc\\1.22.0-97-gc752ad5-5.2.0/bin/xtensa-esp32-elf-g++” -DESP_PLATFORM “-DMBEDTLS_CONFIG_FILE=\”mbedtls/esp_config.h\"" -DHAVE_CONFIG_H -DGCC_NOT_5_2_0=0 -DWITH_POSIX “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/config” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/app_trace” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/app_update” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/asio” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/bootloader_support” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/bt” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/coap” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/console” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/driver” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/efuse” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/esp-tls” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/esp32” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/esp_adc_cal” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/esp_event” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/esp_http_client” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/esp_http_server” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/esp_https_ota” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/esp_https_server” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/esp_ringbuf” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/esp_websocket_client” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/espcoredump” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/ethernet” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/expat” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/fatfs” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/freemodbus” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/freertos” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/heap” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/idf_test” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/jsmn” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/json” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/libsodium” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/log” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/lwip” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/mbedtls” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/mdns” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/micro-ecc” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/mqtt” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/newlib” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/nghttp” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/nimble” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/nvs_flash” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/openssl” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/protobuf-c” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/protocomm” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/pthread” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/sdmmc” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/smartconfig_ack” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/soc” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/spi_flash” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/spiffs” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/tcp_transport” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/tcpip_adapter” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/ulp” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/unity” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/vfs” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/wear_levelling” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/wifi_provisioning” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/wpa_supplicant” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/xtensa-debug-module” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/esp-face” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/esp32-camera” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/esp-face” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5/tools/sdk/include/fb_gfx” -std=gnu++11 -Os -g3 -Wpointer-arith -fexceptions -fstack-protector -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -mlongcalls -nostdlib -w -Wno-error=maybe-uninitialized -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-unused-but-set-parameter -Wno-missing-field-initializers -Wno-sign-compare -fno-rtti -c -w -x c++ -E -CC -DF_CPU=240000000L -DARDUINO=10819 -DARDUINO_ESP32_DEV -DARDUINO_ARCH_ESP32 “-DARDUINO_BOARD=\”ESP32_DEV\"" “-DARDUINO_VARIANT=\”esp32\"" -DESP32 -DCORE_DEBUG_LEVEL=0 “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5\\cores\\esp32” “-IK:\\Dokumente und Einstellungen\\Sword\\Eigene Dateien\\Eigene Dokumente\\ArduinoData\\packages\\esp32\\hardware\\esp32\\1.0.5\\variants\\esp32” “C:\\Users\\Julian\\AppData\\Local\\Temp\\arduino_build_136623\\sketch\\sketch_jun26a.ino.cpp” -o nul
Alternatives for bits/c++config.h: []
ResolveLibrary(bits/c++config.h)
→ candidates: []
In file included from k:\dokumente und einstellungen\sword\eigene dateien\eigene dokumente\arduinodata\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0\xtensa-esp32-elf\include\c++\5.2.0\algorithm:60:0,
from K:\Dokumente und Einstellungen\Sword\Eigene Dateien\Eigene Dokumente\ArduinoData\packages\esp32\hardware\esp32\1.0.5\cores\esp32/Arduino.h:142,
from C:\Users\Julian\AppData\Local\Temp\arduino_build_136623\sketch\sketch_jun26a.ino.cpp:1:
k:\dokumente und einstellungen\sword\eigene dateien\eigene dokumente\arduinodata\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0\xtensa-esp32-elf\include\c++\5.2.0\utility:68:28: fatal error: bits/c++config.h: No such file or directory
compilation terminated.
exit status 1
Fehler beim Kompilieren für das Board ESP32 Dev Module.

Fehler beim Kompilieren für das Board ESP32 Dev Module.

Mit PlatformIO und VSCode konnte ich zwar alles kompilieren und hochladen mit folgender der platformio.ini Einstellung, aber die Verbindung bricht sofort wieder ab (“mp3 done”).

[env:az-delivery-devkit-v4]
platform = espressif32
platform_packages = framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#1.0.6
board = esp32dev
framework = arduino
lib_deps =
marcoschwartz/LiquidCrystal_I2C@^1.1.4
earlephilhower/ESP8266Audio@^1.9.7
monitor_speed = 115200

Robin

Robin

Beim Esp32 board verwende ich die 1.0.6
Bei der ESP8266Audi die Version 1.9.7

Gerald Lechner

Gerald Lechner

@Robin: Die Fehlermeldung kommt daher, dass die Bibliothek ESP8266Audio nicht mit dem aktuellen ESP32 Package funktioniert. Wenn man in der Boardverwaltung beim ESP32 die Version 1.6 wählt, dann ist der Fehler weg.

Robin

Robin

Hallo Zusammen
ich bekomme folgende Fehlermeldungen. Was mach ich da Falsch?

Arduino: 1.8.19 (Mac OS X), Board: “ESP32 Dev Module, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, None”

WARNUNG: Bibliothek LiquidCrystal_I2C behauptet auf avr Architektur(en) ausgeführt werden zu können und ist möglicherweise inkompatibel mit Ihrem derzeitigen Board, welches auf esp32 Architektur(en) ausgeführt wird.
/Users/robin/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputI2S.cpp: In member function ‘bool AudioOutputI2S::SetPinout()’:
/Users/robin/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputI2S.cpp:95:41: error: ‘i2s_pin_config_t’ has no non-static data member named ‘mck_io_num’
.data_in_num = I2S_PIN_NO_CHANGE};
^
/Users/robin/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputI2S.cpp: In member function ‘bool AudioOutputI2S::begin(bool)’:
/Users/robin/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputI2S.cpp:232:28: error: ‘I2S_MCLK_MULTIPLE_DEFAULT’ was not declared in this scope
.mclk_multiple = I2S_MCLK_MULTIPLE_DEFAULT, // Unused
^
/Users/robin/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputI2S.cpp:233:28: error: ‘I2S_BITS_PER_CHAN_DEFAULT’ was not declared in this scope
.bits_per_chan = I2S_BITS_PER_CHAN_DEFAULT // Use bits per sample
^
/Users/robin/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputI2S.cpp:234:7: error: ‘i2s_config_t’ has no non-static data member named ‘mclk_multiple’
};
^
/Users/robin/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputSPDIF.cpp: In constructor ‘AudioOutputSPDIF::AudioOutputSPDIF(int, int, int)’:
/Users/robin/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputSPDIF.cpp:108:22: error: ‘I2S_MCLK_MULTIPLE_DEFAULT’ was not declared in this scope
.mclk_multiple = I2S_MCLK_MULTIPLE_DEFAULT, // Unused
^
/Users/robin/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputSPDIF.cpp:109:22: error: ‘I2S_BITS_PER_CHAN_DEFAULT’ was not declared in this scope
.bits_per_chan = I2S_BITS_PER_CHAN_DEFAULT // Use bits per sample
^
/Users/robin/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputSPDIF.cpp:110:3: error: ‘i2s_config_t’ has no non-static data member named ‘mclk_multiple’
};
^
/Users/robin/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputSPDIF.cpp: In member function ‘bool AudioOutputSPDIF::SetPinout(int, int, int)’:
/Users/robin/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputSPDIF.cpp:159:3: error: ‘i2s_pin_config_t’ has no non-static data member named ‘mck_io_num’
};
^
Mehrere Bibliotheken wurden für “SD.h” gefunden
Benutzt: /Users/robin/Library/Arduino15/packages/esp32/hardware/esp32/1.0.6/libraries/SD
Nicht benutzt: /private/var/folders/dq/8jk9c2hn4s18pq58hftqn7f80000gn/T/AppTranslocation/94586793-D3BE-49BF-8465-53C452995F94/d/Arduino.app/Contents/Java/libraries/SD
Mehrere Bibliotheken wurden für “WiFi.h” gefunden
Benutzt: /Users/robin/Library/Arduino15/packages/esp32/hardware/esp32/1.0.6/libraries/WiFi
Nicht benutzt: /private/var/folders/dq/8jk9c2hn4s18pq58hftqn7f80000gn/T/AppTranslocation/94586793-D3BE-49BF-8465-53C452995F94/d/Arduino.app/Contents/Java/libraries/WiFi
exit status 1
Fehler beim Kompilieren für das Board ESP32 Dev Module.

mahoc

mahoc

Hallo zusammen, hat jemand das Projekt erfolgreich auf einem Mac kompilieren können?

Peter Gottfried

Peter Gottfried

Hallo Andreas, wie muss das Programm für den I2s Verstärker angepasst werden?

Stefan Trzesniowski

Stefan Trzesniowski

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

Robert

Robert

Herzlichen Dank für dieses tolle Projekt. Alles hat ohne Veränderungen auf Anhieb perfekt funktioniert. Ich habe die Schaltung zunächst auf einem Breadboard aufgebaut, jetzt wird das ganze für den dauerhaften Einsatz auf Platine getackert … ;-)

Andreas Schröder

Andreas Schröder

An dieser Stelle noch einmal an großes Danke an Gerald Lechner für diese wunderschöne Projektidee. Mittlerweile nutze ich etwas bessere Lautsprecher mit dem hier bei AZ-Delivery erhältlichen “I2S 3W Klasse D Amplifier Breakout Modul” anstatt des eingebauten DAs – es klingt einfach super :)

Andreas Schröder

Andreas Schröder

Hallo Norbert, siehe meinen Post vom 5. Mai. Diese Bibliotheken musst Du nur bei github herunterladen (google nach asynctcp und espasyncwebserver und nimm jeweils das erste Ergebnis) und packke das in Deinen Library-Ordner – fertig! :)

Andreas Schröder

Andreas Schröder

Hallo Konrad, habe ich im Post von gerade noch vergessen: Die AsyncWeberver Library ist übrigens noch viel mächtiger, als sie hier Verwendung findet. Das Templating der Webseite, was ich hier mit sprintf mache, ist da drin eigentlich noch viel besser implementiert – und noch vieles mehr (wie z.B. JSON-Calls, etc.). Lies Dir doch mal die Doku dazu durch – Du wirst begeistert sein. Auch die Zuverlässigkeit, wenn der ESP mal monatelang vor sich hin läuft und dann spontan Websites ausspucken muss, ist hier perfekt (habe hier z.B. einen auch per Web steuerbaren Dimmer damit im Wintergarten seit 9 Monaten unterbrechungsfrei laufen). Mein Wechsel zu Async-Library hat viele damalige Probleme gelöst.
Man sollte nicht alles, was per Klick in der Arduino-IDE verfügbar ist, als Standard bezeichnen – und es lohnt sich wirklich hier eben einen Ordners in den Ordner “libraries” zu kopieren :)
Liebe Grüße

Andreas Schröder

Andreas Schröder

Hallo Konrad, ich nutze AsyncWebserver mittlerweile ausschließlich, weil es einfach mit Abstand deutlich performanter ist. So mag ich es hier z.B. nicht, wenn der Stream stottert, nur weil eine Web-Aktion stattfindet :)
Hallo Hellmut, gute Idee, die mit der Zeit kaputten Stream-URLs nerven mich auch – ich werde am Wochenende mal ein wenig tüfteln :)

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés