ESP32 WebRadio – Ascolta le radio di tutto il mondo dal salotto di casa tua

“La radio cambia molto ma di sicuro c’è una cosa, a differenza della televisione che può essere vittima di tanti altri cambiamenti, la radio è fatta fondamentalmente di due cose che non cambieranno mai: uno che parla e un disco che suona”.
Linus

La lunga quarantena in casa è stata una ottima occasione per riprendere in mano alcuni progetti DIY (Do-It-Yourself), come l’idea di realizzare una Web Radio basata su ESP32 (di questi fantastici moduli ne abbiamo già parlato).

la mia ESP32 WebRadio

Da quando ho scoperto il sito radio.garden, di cui abbiamo parlato in passato, ho apprezzato la bellezza di poter ascoltare le trasmissioni radio di tutto il mondo usando Internet. Niente di nuovo, le webradio esistono ormai da anni, ma la riscoperta di questo servizio –e in particolare di alcune stazioni che trasmettono musica di mio gradimento 😉– mi ha ispirato. Ho così iniziato a capire se, invece dell’app sullo smartphone, potevo realizzare qualcosa di indipendente per ascoltarle, come una radio tradizionale ma…web!

I moduli ESP32 sono perfetti per questo lavoro: CPU Xtensa dual-core32-bit LX6, da 200 a 600 MIPS. 520 KB SRAM e 4MByte di flash ROM per il firmware. Connettività BT e WiFi integrata.

Per convertire un segnale digitale in analogico, adatto per essere riprodotto dagli altoparlanti, serve un DACDigital to Analog converter-. Ce ne sono di diversi tipi e con diverse caratteristiche. Avevo già a disposizione questo modulo PCM5102 acquistato su Aliexpress qualche mese fa, così ho deciso di utilizzarlo, sperando che fosse compatibile (TL;DR serve un DAC che non richiede il Master Clock, poiché gli ESP32 non sono in grado di generarlo).

Ecco un esempio di segnale I2S

Alcuni mi hanno giustamente fatto notare che all’interno dei moduli ESP32 è già presente un DAC. Anzi, per essere precisi ce ne sono DUE, collegati rispettivamente ai pins GPIO 25 e GPIO 26. Sono DAC a 8-bit. Un po’ per sfida, un po’ perché le esperienze sull’uso di questi DAC per la riproduzione di musica non sono state eccezionali, ho optato per un DAC esterno: costa pochi euro e la qualità audio è davvero eccellente!

DAC – Digital Analog Converter – Detta in due parole, proprio semplice semplice, si tratta di una tecnica per convertire un valore digitale in una approssimazione analogica. “Approssimazione” perché la qualità della sinusoide generata dipende dalla quantità dei valori (“bit”) per generarla. Più sono i bit, più dettagliato sarà il segnale analogico in uscita. Generalmente la risoluzione dei DAC va da 8 a 12 bit. Ovviamente la qualità audio dei DAC a 12bit sarà superiore.

Insomma, tornando alla radio, la questione è tutt’altro che banale: l’ESP32 deve connettersi allo stream MP3, decodificarlo, inviarlo via I2S a un DAC e poi agli altoparlanti. Nel mentre, interpretare i metadati dello stream e visualizzarli sul display. C’è poi da gestire la parte di controllo, come il volume, cambio di stream etc etc….

Inside my ESP32 WebRadio

È stato un bell’esercizio, forse uno dei più complicati che abbia fatto con questi moduli. Ma alla fine è stato forse l’oggetto DIY che, fino a ora, mi ha dato più soddisfazione.

Se siete incuriositi e volete costruirvi il vostro ricevitore di stream MP3/AAC via Internet, ecco l’elenco dei materiali necessari:

Bill of Material

  • Modulo ESP32. Ho usato una board ESP32 DevKit, presa a pochi euro su AliExpress;
  • CJMCU 5102 DAC, preso anche questo su AliExpress;
  • PCD8544 LCD Display (conosciuto anche come display Nokia 5110), su AliExpress;
  • PAM8403 2*3W modulo amplificatore (su AliExpress);
  • Due altoparlanti da 8 Ohm;
  • 3 resistenze da 10K Ohm 1/8W;
  • 2 trimmer resistivi da 100K Ohm;
  • resistenza da 330 Ohm 1/8W;
  • 3 pulsanti (anche questi presi su AliExpress);

Ho predisposto anche un PIN (D2) per collegarci uno o più NeoPixels (usando una resistenza da 860 Ohm). Al momento ho deciso di non metterli.

PCM5102 DAC

Il DAC converte un segnale digitale, I2S, in un segnale audio. Il PCM5102, modulo DAC da me utilizzato, ha diversi piedini con altrettante funzioni:

Modulo DAC PCM5102

Il data sheet del chip (www.ti.com/lit/ds/symlink/pcm5102.pdf) ne descrive le funzioni:

Per poterlo usare con l’ESP32 ho effettuato questi collegamenti:

Vcc - N.C.
3.3v - 3.3v
GND - GND
FLT - GND
DMP - GND
SCL - GND
BCK - GPIO 26
DIN - GPIO 22
LCK - GPIO 25
FMT - GND
XMT - 3.3v 

L’uscita audio è in line-out attraverso i 3 PIN (L, GND, R) oppure con il jack audio per le cuffie. Per poter avere una potenza audio sufficiente, ho deciso di usare un modulo amplificatore stereo da 3W, basato su PAM8403, ma l’ingresso audio deve essere limitato nella potenza usando due trimmer da 100K Ohm.

Schema

Lo schema elettrico dei collegamenti, realizzato e condiviso pubblicamente sul portale EasyEDA, è questo:

I pulsanti servono per controllare manualmente la radio. Attraverso il firmware si può decidere a quale funzione associarli. Attualmente i 3 pulsanti (anche se nel mio prototipo sono 4: uno per l’accensione) servono per aumentare o diminuire il volume, cambiare stream e mettere in pausa. Ricordo che con 3 pulsanti si possono avere 3^2 combinazioni 😉

i 4 pulsanti laterali

Firmware

L’hardware è solo una parte del progetto. Gran parte del lavoro viene svolto dal software, che gestisce il collegamento alla rete WiFi, la connessione allo stream MP3/AAC, la decodifica, l’invio al DAC. C’è poi la parte relativa ai controlli e alla gestione del display.

Dettaglio del display

Inoltre, la ESP32 WebRadio ha una interfaccia web responsive (Bootstrap4 e jQuery) per controllare direttamente dallo smartphone, dal PC o da qualunque altro browser, la radio. Via web si può cambiare stazione, aumentare o diminuire il volume, il contrasto, i parametri di configurazione…

L’interfaccia web della ESP32 WebRadio

Tutto il codice è scaricabile dal repository su GitHub: github.com/michelep/ESP32_WebRadio

Per poterlo compilare serve Arduino (io ho la 1.8.12) e il supporto per le board ESP32. È poi necessario installare queste librerie aggiuntive:

Per caricare la cartella /data dentro la partizione SPIFFS, suggerisco di usare l’ottimo Arduino ESP32 filesystem uploader.

*** PRIMA *** di caricare la configurazione data/config.json, ricordatevi di inserire i parametri di connessione alla rete WiFi:

{
  "wifi_essid":"[ESSID rete Wifi]",
  "wifi_password":"[Password rete WiFi]",
  "hostname":"esp32-webradio",
  "ntp-server":"time.ien.it",
  "timezone":"1",
  "stream_id":"0",
  "volume":2,
  "contrast":60
}

Gli URL degli stream delle radio che desideriamo ascoltare sono nel file data/streams.json.

Il codice è tutt’altro che perfetto ma funziona e fa il suo (sporco) lavoro. Contributi, miglioramenti, PR, sono i benvenuti. Tutto è rilasciato sotto licenza GPL quindi fatene l’uso che desiderate.

Questo articolo è stato visto 4.932 volte (Oggi 3 visite)

Hai trovato utile questo articolo?

49 comments
  1. …. letto veloce veloce come fare… ci riuscirò?… magari ti faccio sapere… Io speriamo che me la cavo…

    1. Non è così difficile, forza! Se hai un minimo di manualità con Arduino e con il saldatore, stando attento ai collegamenti (che sono diversi) non dovresti avere alcun problema! È un progetto abbastanza rock solid 😉

  2. Ciao ottimo progetto, grazie per la condivisione. Faresti anche qualche foto più dettagliata dei collegamenti? Grazie

  3. Bellissima sulla base di questa disegneró un case da stamapre in 3d per contenere tutto in maniera ordinata e di design.

  4. Per la parte wifi ti consiglio di usare la libreria wifi manager attraverso la quale accende l hotspot in caso non abbia le credenziali giuste e permette di reinserire quelle corrette in quella maniera diventa portatile ovunque.

    1. L’avevo fatto ma non mi ha dato risultati soddisfacenti. Sto comunque lavorando anche a questa funzione, attualmente in wishlist 😉 grazie comunque per il suggerimento!

      1. non appena ho un pò di tempo libero inizio ad assemblare su di una board. Come mai non è soddisfacente io lo uso su un sensore IOT con batteria e pannello solare basato su esp8266 lo trovo molto utile poichè per i più vari motivi quando cambio nome alla rete non devo fare acrobazie per andarlo a smontare e riprogrammarlo parte in automatico in hotspot aggiorno la rete e funziona come nulla fosse.

  5. Hello Michele, i have a problem:

    C:\Users\Valentin\Desktop\ESP32_WebRadio-master\ESP32_WebRadio\ESP32_WebRadio.ino: In function ‘void setup()’:

    ESP32_WebRadio:278:18: error: ‘loadConfigFile’ was not declared in this scope

    loadConfigFile();

    ^

    ESP32_WebRadio:304:17: error: ‘initWebServer’ was not declared in this scope

    initWebServer();

    ^

    ESP32_WebRadio:363:18: error: ‘printStreamsDB’ was not declared in this scope

    printStreamsDB();

    ^

    C:\Users\Valentin\Desktop\ESP32_WebRadio-master\ESP32_WebRadio\ESP32_WebRadio.ino: In function ‘bool playStream(uint8_t)’:

    ESP32_WebRadio:480:28: error: ‘getStreamURL’ was not declared in this scope

    if(getStreamURL(stream_id)) {

    ^

    exit status 1

    ‘loadConfigFile’ was not declared in this scope

    Can you help me? Thanks in advance.

          1. Bad luck for me:

            Arduino: 1.8.13 (Windows 7), Board: “DOIT ESP32 DEVKIT V1, 80MHz, 921600, None”

            sketch\ESP32_WebRadio.ino.cpp.o:(.literal._Z10playStreamh+0x18): undefined reference to `getStreamURL(unsigned char)’

            sketch\ESP32_WebRadio.ino.cpp.o:(.literal._Z5setupv+0x98): undefined reference to `loadConfigFile()’

            sketch\ESP32_WebRadio.ino.cpp.o:(.literal._Z5setupv+0xa0): undefined reference to `initWebServer()’

            sketch\ESP32_WebRadio.ino.cpp.o:(.literal._Z5setupv+0xac): undefined reference to `printStreamsDB()’

            sketch\ESP32_WebRadio.ino.cpp.o: In function `playStream(unsigned char)’:

            C:\Users\Valentin\Desktop\ESP32_WebRadio-master\ESP32_WebRadio/ESP32_WebRadio.ino:490: undefined reference to `getStreamURL(unsigned char)’

            sketch\ESP32_WebRadio.ino.cpp.o: In function `setup()’:

            C:\Users\Valentin\Desktop\ESP32_WebRadio-master\ESP32_WebRadio/ESP32_WebRadio.ino:288: undefined reference to `loadConfigFile()’

            C:\Users\Valentin\Desktop\ESP32_WebRadio-master\ESP32_WebRadio/ESP32_WebRadio.ino:314: undefined reference to `initWebServer()’

            C:\Users\Valentin\Desktop\ESP32_WebRadio-master\ESP32_WebRadio/ESP32_WebRadio.ino:373: undefined reference to `printStreamsDB()’

            collect2.exe: error: ld returned 1 exit status

            exit status 1

            Error compiling for board DOIT ESP32 DEVKIT V1.

          2. It’s a linker error caused by it not found, and link, the other files. Maybe an issue with Arduino 1.8.13 on Windows? I’ve tried build it on Linux without any fuss..try to check linker path, maybe it’s caused by a wrong configuration.

  6. Hello Michelle!

    I want to add a new “Prev Stream” button to GPIO 33 (pin22) but I couldn’t. I have made the following changes:

    // Control buttons
    #define BUTTONS_NUM 4
    const int BUTTONS_PINS [BUTTONS_NUM] = {34, 35, 32, 33};

    if (buttons) {
    DEBUG_PRINT (“[BUTTON] Pressed”);
    DEBUG_PRINTLN (String (buttons));
    switch (buttons) {
    case 1: // BUTTONS 1 – Volume UP
    if (config.volume MIN_VOLUME) {
    config.volume = config.volume-1;
    }
    break;
    case 3: // BUTTONS 3 – Next stream
    nextStream ();
    break;
    case 4: // BUTTONS 4 – Prev stream
    prevStream ();
    break;
    }
    }
    }

    I didn’t succeed, can you help me?

    1. Hi Valentin, you can see the right value on serial debug log (DEBUG_PRINT(….)). However, buttons simply contains the value originated by button pressure in binary way, i.e. if you press button 4, the value should be 8 (00001000b). Just to be more clear, if you press button 1 and 4, value should be 0001001b, i.e. 9 as decimal value.

      Happy hacking!

  7. Is it alright?

    case 1: // BUTTONS 1 – Volume UP
    if(config.volume MIN_VOLUME) {
    config.volume = config.volume-1;
    }
    break;
    case 3: // BUTTONS 1+2 – Play/Pause
    togglePlay();
    break;
    case 4: // BUTTONS 3 – Next stream
    nextStream();
    break;
    case 5: // BUTTONS 3+1
    break;
    case 6: // BUTTONS 2+3
    break;
    case 7: // BUTTONS 1+2+3
    break;
    case 8: // BUTTONS 4 – Prev stream
    break;
    default:
    break;

  8. Arduino:1.8.12 (Linux), Scheda:”DOIT ESP32 DEVKIT V1, 80MHz, 921600, None”

    Più di una libreria trovata per “WiFi.h”
    Usata: /home/rosario/.arduino15/packages/esp32/hardware/esp32/1.0.6/libraries/WiFi
    Non usata: /home/rosario/Scrivania/arduino-1.8.12/arduino-1.8.12/libraries/WiFi
    Più di una libreria trovata per “SD.h”
    Usata: /home/rosario/.arduino15/packages/esp32/hardware/esp32/1.0.6/libraries/SD
    Non usata: /home/rosario/Scrivania/arduino-1.8.12/arduino-1.8.12/libraries/SD
    sketch/ESP32_WebRadio.ino.cpp.o:(.literal._Z9audioTaskPv+0x2c): undefined reference to `getStreamURL(unsigned char)’
    sketch/ESP32_WebRadio.ino.cpp.o:(.literal._Z5setupv+0x94): undefined reference to `loadConfigFile()’
    sketch/ESP32_WebRadio.ino.cpp.o:(.literal._Z5setupv+0x9c): undefined reference to `initWebServer()’
    sketch/ESP32_WebRadio.ino.cpp.o:(.literal._Z5setupv+0xa4): undefined reference to `printStreamsDB()’
    sketch/ESP32_WebRadio.ino.cpp.o: In function `playStream(unsigned char)’:
    /home/rosario/Arduino/libraries/ArduinoJson/src/ArduinoJson/Variant/VariantImpl.hpp:34: undefined reference to `getStreamURL(unsigned char)’
    /home/rosario/Arduino/libraries/ArduinoJson/src/ArduinoJson/Variant/VariantImpl.hpp:34: undefined reference to `getStreamURL(unsigned char)’
    sketch/ESP32_WebRadio.ino.cpp.o: In function `setup()’:
    /home/rosario/Scrivania/espradio/ESP32_WebRadio-master/ESP32_WebRadio/ESP32_WebRadio.ino:290: undefined reference to `loadConfigFile()’
    /home/rosario/Scrivania/espradio/ESP32_WebRadio-master/ESP32_WebRadio/ESP32_WebRadio.ino:316: undefined reference to `initWebServer()’
    /home/rosario/Scrivania/espradio/ESP32_WebRadio-master/ESP32_WebRadio/ESP32_WebRadio.ino:375: undefined reference to `printStreamsDB()’
    collect2: error: ld returned 1 exit status
    exit status 1
    Errore durante la compilazione per la scheda DOIT ESP32 DEVKIT V1.

    Questo report potrebbe essere più ricco di informazioni abilitando l’opzione
    “Mostra un output dettagliato durante la compilazione”
    in “File -> Impostazioni”
    Ciao, ho provato a compilare, da questi errori che ti ho allegato.
    come potrei risolvere?
    Ciao
    Rosario

      1. Ciao Michele, grazie della risposta, si infatti non avevo copiato gli altri due file nella directory del progetto, ti faccio i complimenti per il tuo lavoro, io sto usando u8g2 per pilotare un display 128×64 st7920 e funziona bene, sto riscontrando qualche problemino per quanto riguarda il recupero del titolo e dei dati passati dalla stazione radio ascoltata, sto studiando un po’, grazie e buona giornata

  9. Salve Michele,
    complimenti per il bel progetto.
    Ho sviluppato un progettino simile al tuo ma senza la parte web che invece ho implementato su un Rpi4 che è sempre acceso per il servizio PiHole.
    Vorrei farti alcune domande.
    Una relativamente al modulo 5102. Nel mio caso sto usando il Vs1053 il quale, in maniera casuale e imprevedibile, pare essere il responsabile di rallentamenti audio e voci metalliche nonché repentini aumenti di volume (dopo 5 minuti di funzionamento, oppure 20 oppure 1 minuto… random). All’inizio pensavo fosse un problema di buffer, ma, nonostante l’implementazione di un ring buffer di 32k (ed un tentativo nell’assegnare i diversi compiti di buffering e playing a 2 task sulle 2 cpu) non ho risolto il problema. Dopo numerose ricerche ho provato a resettare (soft reset), invece dell’intero esp, il solo modulo vs1053 e il problema si risolve fino al prossimo imballamento. Volevo sapere se tu hai avuto gli stessi problemi con il 5102.
    Seconda domanda: sono un avido ascoltatore della radio BBC ma… dopo il cambio degli indirizzi (e forse codec?) avvenuti un mesetto fa, il suono che ottengo da tutti i canali BBC risulta pieno di glitch e praticamente inascoltabile… Potresti per favore confermare la cosa anche con il tuo apparecchio?
    Link: http://stream.live.vc.bbcmedia.co.uk/bbc_radio_fourfm
    Grazie mille ed ancora sentiti complimenti

    1. Buongiorno Pierpaolo,

      grazie per avermi contattato. Sulla questione tecnica da te sottoposta sul 5102 non saprei cosa dirti. Personalmente non ho avuto problemi di glitches o altro, quindi mi trovo in difficoltà ad aiutarti. Sulla questione relativa all’ascolto della BBC, dopo qualche piccolo aggiornamento di librerie, ti confermo che riesco ad ascoltare BB channel four senza problemi.

      Utilizza il codice che ho appena rilasciato su https://github.com/michelep/ESP32_WebRadio e aggiorna le seguenti librerie:

      – ESP32-audioI2S (https://github.com/schreibfaul1/ESP32-audioI2S) 783f67c
      – ESP32-Arduino (https://github.com/espressif/arduino-esp32) 1.0.6

  10. Ciao Michele,
    sto seguendo un maturando che ha portato come tesi un progetto come questo.
    Io sono un informatico sistemista ma diplomato in elettronica, quindi diciamo che mi destreggio dall’hardware al software.

    Ti risulta che ci siano problemi con gli indirizzi degli stream che si collegano sulla porta 443 (https)?
    Premetto che non ho approfondito il codice e le librerie di arduino.

    Grazie.

    1. Salve Federico,
      grazie prima di tutto per il graditissimo feedback: mi fa molto piacere, ed è nella filosofia stessa del FLOSS, che il mio lavoro possa essere utile ad altri!
      Purtroppo, a quanto ricordo, gli ESP32 non sono abbastanza potenti per gestire l’handshaking e la gestione dei certificati SSL: sono state trovate, nel tempo, soluzioni “tampone” che però ovviamente non sono facilmente applicabili (ad esempio http://www.iotsharing.com/2017/08/how-to-use-https-in-arduino-esp32.html) e non ho idea se possano funzionare in questo caso.
      Se hai tempo e voglia di sperimentarlo, sarei felice di avere un tuo feedback.
      Grazie e buona giornata,
      Michele

  11. Ciao.
    Ottimo progetto ma per problemi di spazio nel contenitore, io vorrei provare ad usare il DAC interno.
    Ho la scheda LoLin32 Lite con il dac sul pin 25 e vorrei collegarlo al Pam8403.
    Mi piacerebbe ascoltare lo streaming dei canali radio delle BBC.
    Per favore, potresti modificare il tuo sketch nella versione senza il dac esterno, e se possibile senza ulteriori cartelle?

    1. Ciao Massimo,

      grazie per il tuo graditissimo feedback. Al momento non ho intenzione di supportare il DAC interno, per svariati motivi tra cui quello della qualità dell’audio. Comunque, il codice è libero: puoi prendere lo sketch e adattarlo alle tue esigenze! Per aiutarti, qui dovresti trovare indicazioni utili (https://github.com/schreibfaul1/ESP32-audioI2S):

      Is it also possible without an external DAC?

      If the 8-bit sound is enough, you can do that.
      ...
      Audio audio(true, I2S_DAC_CHANNEL_BOTH_EN);
      ...

      Valori possibili:
      I2S_DAC_CHANNEL_RIGHT_EN Enable I2S built-in DAC right channel, maps to DAC channel 1 on GPIO25
      I2S_DAC_CHANNEL_LEFT_EN Enable I2S built-in DAC left channel, maps to DAC channel 2 on GPIO26
      I2S_DAC_CHANNEL_BOTH_EN Enable both of the I2S built-in DAC channels

      Buon lavoro!

      1. Non essendo molto esperto ho usato una versione più semplice e poi dopo vari tentativi ho trovato il link giusto per lo streaming della web radio.
        Io non so se è un caso fortunato ma devo riconoscere che usando solo il DAC interno al Lolin32 Lite l’audio in uscita è pulito, la voce chiara, senza ronzii o interruzioni.

        #include “AudioFileSourceICYStream.h”
        #include “AudioGeneratorMP3.h”
        #include “AudioOutputI2SNoDAC.h”
        #include “WiFi.h”
        // Enter your WiFi setup here:
        const char *SSID = “ssid”;
        const char *PASSWORD = “password”;

        // URL
        const char *URL = “http://vprbbc.streamguys.net/vprbbc24.mp3”; // BBC World Service Stream

        AudioGenerator *audio;
        AudioFileSourceHTTPStream *file;
        AudioOutputI2S *out;
        void setup() {
        Serial.begin(115200);
        delay(1000);
        WiFi.disconnect();
        WiFi.mode(WIFI_STA);
        WiFi.begin(SSID, PASSWORD);
        // Try to connect to Wifi forever
        while (WiFi.status() != WL_CONNECTED) {
        Serial.println(“…Connecting to WiFi”);
        delay(1000);
        }
        Serial.println(“Connected”);
        audioLogger = &Serial;
        file = new AudioFileSourceICYStream(URL);
        file->SetReconnect(5, 0);
        out = new AudioOutputI2S(0, 1); // (0,1) is using the internal DAC
        audio = new AudioGeneratorMP3();
        audio->begin(file, out);
        }
        void loop() {
        if (audio->isRunning()) {
        audio->loop();
        }
        }

        1. Grazie Massimo per il graditissimo feedback! Son sicuro che sarà di aiuto a qualcuno che ha le tue stesse esigenze 🙂 è questa la forza della comunità che nasce e si sviluppa attorno al software libero!

  12. Buongiorno Michele,
    Ho una ottima conoscenza di informatica, IOT e elettronica e trovo che il progetto è molto molto carino.
    A tale riguardo mi sono studiato un pochino le librerie ESP8266Audio e ESP32-audioI2S, ed a riguardo ho un paio di domande alle quali spero avrai tempo di rispondermi.

    1) Perché hai usato ESP32-audioI2S e non la più comune ESP8266Audio
    2) ho fatto qualche prova con la ESP8266Audio e purtroppo mi va in crash con formati AAC e FLAC hai esperienza a riguardo.
    Grazie,
    Mario

  13. Ciao.

    Continuo a sperimentare con il Lolin32

    Vorrei aggiungere un modulo DAC al mio progetto basico di web radio

    Sarebbe possibile usare il dac MCP4725 ?
    https://www.adafruit.com/product/935

    Altrimenti potresti per favore indicarmi un’alternativa di DAC intorno ai 5euro, acquistabile su Amazon?

    Grazie

      1. Grazie
        Puoi dirmi quali sono i 2 tipi di DAC scartati? così non faccio lo stesso sbaglio 🙂

        Su Aliexpress ho un po’ di timori per eventuali sorprese sui costi di dogana o per i lunghi periodi di attesa

        1. MAX08357 non sono riuscito a farlo funzionare, idem per CS4344. A quanto pare, dipende dal timing e dalle linee di segnalazione. Per Aliexpress, al momento non ci sono costi di dogana aggiunti per acquisti entro i 30-50€. I tempi sono tuttavia di circa 30 giorni.

  14. Hello
    Thank you for this beautiful achievement.
    However, I have trouble inserting a new radio through the web page. I have eight recorded radios.
    Is the number of radios limited?
    Similarly, by going through ESP32 data upload, I manage to insert a ninth stream but the program does not work.
    Here is the error message:
    esp32-webradio 0.0.6 Dec 29 2021 19:23:36
    [INIT] Initializing SPIFFS…OK
    [CONFIG] Loading config…OK
    [INIT] Initialize display…[INIT] ST7735 initialised[TIME] Failed to obtain time
    [INIT] Connecting to Livebox-BF7E…CONNECTED. IP:192.168.1.33 GW:192.168.1.1
    [INIT] MDNS responder started: esp32-webradio
    [INIT] Initialize OTA…OK
    [INIT] Initialize audio…OK
    [DB] printStreamDB()OK. DB memory usage:584 bytes
    [0] http://icecast.radiofrance.fr/fip-midfi.mp3
    [1] http://icecast.radiofrance.fr/franceinfo-midfi.mp3
    [2] http://icecast.radiofrance.fr/franceculture-midfi.mp3
    [3] http://icecast.radiofrance.fr/franceinfo-midfi.mp3
    [4] http://vis.media-ice.musicradio.com/CapitalMP3
    [5] http://mediaserv30.live-streams.nl:8000/stream
    [6] http://stream.demoisellefm.com:8000/rochefort-192.mp3
    [7] https://edge.clrmedia.co.uk/chiptunes
    [8] https://media-ssl.musicradio.com/CapitalXTRANational?
    [INIT] Ready: let’s fly!
    [DB] getStreamUrl(0)…ERROR: NoMemory
    [AUDIO] No STREAM URL defined!
    Can you help me?
    Thank you

  15. Ciao, bellissimo progetto. Sto avendo alcune difficoltà a caricare il software ( non mi è molto chiaro quale. Ini caricare, come fare a caricarne tre, cosa mettere in data e come creare la partizione,. .. ) potresti darmi qualche indicazione o qualche sito di riferimento per imparare a farlo? Grazie ancora

  16. Buongiorno MIchele,
    stò cercando di adattare il tuo programma con un diverso display e mi trovo in difficoltà con la visualizzazione delle info dagli stream. Ho visto che hai incluso due funzioni (audio_info e audio_showstation) che non vengono chiamate nel software. Ora io vorrei farne uso ma non avendo esempio non capisco da dove prendi il const char *info…
    Hai fatto un ottimo lavoro!

      1. Grazie! E’ la prima volta che metto mano a I2S e vedo che ancora mi mancano delle info (fra l’altro non ho mai usato env[]. Devo studiare ancora… Grazie ancora per la prontissima risposta (di domenica!).

  17. Ciao di nuovo. La radio funziona anche bene. Ho fatto parecchi cambiamenti integrando il touchscreen del display per evitare i tasti e tutto va bene e la qualità audio è più che accettabile. Una domanda: OGG e FLAC sono supportati? Ho provato a connettermi ad uno stream OGG e il sistema mi tira fuori solo il nome della stazione (nel Debug esce fuori Ogg non supportato). Ha fatto qualche prova tu?

  18. Ciao Michele,
    la mia radiolina è questa:
    https://github.com/Pier1965/Esp32-educational-study
    Volevo sapere se anche tu stai sperimentando un “buio” sulle radio Rai 1, 2, 3 ecc. Esempio:
    icestreaming.rai.it/1.mp3:80
    Gli stream che uso su esp32 funzionano bene come al solito passandoli ad esempio (su linux) ad mplayer da terminaleo su una semplice app che ho sviluppato per android, ma su esp32 da ieri (09.02.2023) hanno smesso di “suonare”.

    Hai qualche consiglio?
    Grazie,
    Pier

  19. Buonasera. Sto provando a usare il software su una scheda Lilygo T-Display, ma quando il codice arriva al lancio del thread sul core 0:
    // Launch audioTask on CORE0 with high priority
    disableCore0WDT(); // Disable watchdog on CORE0
    xTaskCreatePinnedToCore(
    audioTask, /* Function to implement the task */
    “audioTask”, /* Name of the task */
    10000, /* Stack size in words */
    NULL, /* Task input parameter */
    15, /* Priority of the task */
    NULL, /* Task handle. */
    0); /* Core where the task should run */
    ottengo questo errore ripetuto continuamente (e ovviamente la radio non funziona):
    task_wdt: esp_task_wdt_reset(763): task not found
    Qualche suggerimento?
    Grazie
    G

  20. Sono di nuovo io… dopo attente letture online ho provato ad aumentare la dimensione dello stack da 10000 a 16684, e così funziona.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.