“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).
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 DAC –Digital 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).
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!
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….
È 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:
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 😉
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.
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…
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:
- ESP32-audioI2S (github.com/schreibfaul1/ESP32-audioI2S);
- Adafruit LCD PCD8544 (github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library);
- ArduinoJson (arduinojson.org);
- ESP AsyncWebServer (github.com/me-no-dev/ESPAsyncWebServer);
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.
49 comments
…. letto veloce veloce come fare… ci riuscirò?… magari ti faccio sapere… Io speriamo che me la cavo…
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 😉
Ciao ottimo progetto, grazie per la condivisione. Faresti anche qualche foto più dettagliata dei collegamenti? Grazie
Salve Mario, di quale collegamenti vorresti maggiori dettagli?
Bellissima sulla base di questa disegneró un case da stamapre in 3d per contenere tutto in maniera ordinata e di design.
Grazie, bellissima idea! Attendo le foto 😉
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.
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!
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.
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.
Hi Valentin! Which version of Arduino are you using?
Arduino 1.8.13
Ok, just added a new release 0.0.6 (https://github.com/michelep/ESP32_WebRadio) which should fix those compiler errors. Please let me know if works!
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.
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.
Thanks, I will try again.
Done. Thank you Michele!
https://imgur.com/4xJ8ReX
Wow! Super! Hope you like it 😉
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?
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!
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;
Yep, should be correct. If you want, feel free to commit your changes to GitHub repo 😉
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
Ciao Rosario, sembra un problema legato ai vari path della tua configurazione, che non riescono a trovare gli altri files del progetto.
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
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
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
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.
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
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?
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!
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();
}
}
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!
Grazie mille!
Ci provo nei prossimi giorni …
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
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
Ciao Massimo,
felice che prosegui nella sperimentazione. In merito al suggerimento sul DAC, posso dirti che ho provato almeno altri due tipi, senza successo: l’unico che sembra funzionare senza problemi è il 5102, che trovi anche su Amazon (https://www.amazon.it/HiLetgo-Lossless-Digital-Converter-Raspberry/dp/B07QBY5Y9K). Per questi moduli, tuttavia, Aliexpress è spesso il portale più economico.
Buon divertimento!
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
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.
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
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
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!
Ciao Claudio,
le due funzioni sono chiamate dalla libreria I2S (https://github.com/schreibfaul1/ESP32-audioI2S) e popolano elementi nell’array “env”.
Spero di esserti stato utile e buon divertimento 🙂
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!).
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?
Ottimo, Claudio, e grazie per il graditissimo feedback. Prevedi di pubblicare il tuo codice, magari su GitHub? Nel caso, fammi sapere. Per OGG e FLAC non ho mai avuto esperienze, ma sulla documentazione dell’ExpressIF si trovano i riferimenti in merito, ad esempio https://docs.espressif.com/projects/esp-adf/en/latest/api-reference/codecs/ogg_decoder.html
Buon hacking!
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
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
Sono di nuovo io… dopo attente letture online ho provato ad aumentare la dimensione dello stack da 10000 a 16684, e così funziona.