Een internetradio met weergave van METADATA (artiest en songtitel) / An internet radio with display of METADATA (artist and song title) / Une radio Internet avec affichage de METADATA (artiste et titre de la chanson) 

Klik op een foto om de foto's vergroot weer te geven / Click on a photo to view an enlarged version / Cliquez sur une photo pour l'agrandir:


Download project... / Télécharger le projet...


nlflag (English below.... / Français ci-dessous....)
Na wat ge-experimenteerd te hebben met de esp32 kwam het idee om er een internetradio mee te maken.
Er zijn er al een heel stel te vinden op internet en uiteindelijk ben ik uitgekomen op een combinatie van twee voorbeelden:

- Simple_esp32_radio - https://www.hackster.io/mircemk/simple-esp32-internet-radio-with-oled-display-83e49d en
- ESP-radio-github - https://github.com/Edzelf/Esp-radio

Met daarbij code voor een rotary decoder en een IR-set om de radio te kunnen besturen.
De twee hoofdcomponenten zijn de ESP32 en de VS1053, zoals in de meeste voorbeelden en daarnaast is er een display en zoals gezegd de rotary decoder en IR-ontvanger.

Voor de basiscode zorgde de 'simple-esp-radio' en van de 'ESP-radio-github' is de ringbuffer toegevoegd omdat het internet hier op het franse platteland in de avonduren wat traag wordt. Zo af en toe haperde de muziek.
En daarnaast is er de code toegevoegd om de metadata uit te lezen en de artiest en song titel weer te kunnen geven. Helaas is het me niet gelukt voor alles stations deze metadata te vinden; wellicht een ander protocol?? Mocht iemand de oplossing weten dan houd ik me aanbevolen voor de aangepaste code :-).

Toen de basis werkte, heb ik in een apart project de rotary decoder en IR besturing uitgewerkt waarna de code is toegevoegd aan het eerste deel van het project.
Helaas crashte de radio vervolgens meteen...... De oorzaak bleek te liggen in de gebruikte library voor de IR-ontvanger. Op de één of anderde manier werkt de library van Ken Shirriff niet goed in combinatie met de rest van mijn radio project. In het project van de rotary decoder met de IR-ontvanger werkte het prima, maar dus niet met de totale code. Na wat zoekwerk kwam ik op een andere library set (IRremoteESP8266), die is afgeleidt van de library
van Ken, maar die dus wel keurig werkt met mijn versie van de internetradio.

De werking:

Het project beslaat een paar bestanden:

- Internetradio_hans.ino : de code voor de internet radio
- helloMp3.h : een bestand dat wordt afgespeeld tijdens het opstarten van de radio en de tekst 'Hello' laat horen
- Preferences.h : code om wat gegevens op te slaan en uit te lezen in het NVRAM van de ESP32; De code slaat het ingestelde volume en gekozen station op
- radiostations.h : een 14-tal (nederlandse) streaming radio stations; eenvoudig aan te passen voor de eigen keuze van stations

Voor het vullen van de radiostations kan deze site helpen: Radiostations. Kijk/zoek naar MP3 stations en open de url van deze site; soms verschijnt er uiteindelijk een andere URL die het radiostation weergeeft. Gebruik de 'spelende' URL om de lijst van radiostations aan te vullen. Veelal voldoet 80 als poornummer....

Na de experimenteer versie heb ik de onderdelen aan elkaar verbonden met gesoldeerde draden en is alles ingebouwd in een 3D geprinte kast. De STL bestanden zijn toegevoegd aan het project.

Wanneer de radio wordt gestart dan er eerst verbinding gemaakt met het opgegeven WiFi netwerk, en daarna worden het volume en laatste gebruikte station opgehaald uit het geheugen van de ESP32. Vervolgens wordt de verbinding gemaakt met de streaming server en wordt de uitzending hoorbaar gemaakt via de VS 1053.

Met de rotary decoder kan er van station worden gewisseld door er aan te draaien. Wanneer er 2 seconden (in te stellen in de code bij 'interval') niets meer wordt gedraaid wordt het dan geselecteerde station actief gemaakt.
Door kortstondig op de rotarty decoder te drukken wordt de 'volume' modus geactiveerd en kan het volume worden aangepast. Ook hier is weer de 2 seconden actief: 2 seconden geen actie meer, dan wordt de ingegeven waarde naar de VS 1053 gestuurd als nieuw volume.

De IR-set werkt als volgt:
- wanneer er een cijfertoets wordt ingedrukt dan begint de code het volume aan te passen aan de hand van de verstruurde cijfers. Ook hier weer de 2 seconden: 2 seconde geen invoer meer, dan het volume naar de VS 1053.

- De *-toets schakelt de code om naar 'volume' modus: gebruik de cijfertoetsen om het gewenste volume in te stellen
- De #-toets schakelt de code om naar 'station' modus: gebruik de cijfertoetsen om het gewenste station te kiezen
- De < en > toetsen : veranderen van het station
- De 'up' en 'down' toetsen : verander het volume
- de OK toets : activeer de gekozen waarde meteen en wacht niet op 2 seconden zonder actie.

De hardware:

de meeste hardware heb ik online besteld bij Aliexpres, maar uiteraard zijn er meer mogelijkheden.
Wat is er nodig?

- ESP32 - Official DOIT ESP32 Development Board WiFi+Bluetooth Ultra-Low Power Consumption Dual Core ESP-32 ESP-32S ESP 32 Similar ESP8266 : https://www.aliexpress.com/item/32799253567.html?spm=a2g0s.9042311.0.0.27424c4dLpU1BO 4,25 €
- Rotary decoder - 360 Degrees Rotary Encoder Module For Arduino Brick Sensor Switch Development Board KY-040 With Pins : https://www.aliexpress.com/item/32969404416.html?spm=a2g0s.9042311.0.0.27424c4dLpU1BO 1,38 €
- IR set - even zoeken op de site van ali https://www.aliexpress.com naar de 'HX1838 Wireless IR Receiver Module Infrared' (zie ook de foto's)
- Display - 1.8 inch TFT LCD Module LCD Screen Module SPI serial 51 drivers 4 IO driver TFT Resolution 128*160 For Arduino : 
https://www.aliexpress.com/item/32817839166.html?spm=a2g0s.9042311.0.0.27424c4dLpU1BO 2,85 €
-
VS1003B VS1053 MP3 decoding module, microphone head, STM32 microcontroller https://www.aliexpress.com/item/32966454016.html?spm=a2g0s.9042311.0.0.27424c4dLpU1BO 4,34 €
- Kastje - STL bestanden als bijlage voor de 3D printer (ANET E12 deed er 11 uur over :-) )
- twee tyraps - om de ESP32 vast te zetten in de kast
- wat lijm - om display en IR-ontvanger vast te zetten
- wat kleine schroeven - om de VS 1053 en de rotary decoder vast te zetten en om het kastje dicht te maken
- een knop - voor op de as van de rotary encoder
- wat draad - voor de electrische verbindingen
- wat krimpkous - om de solderingen te isoleren
- paar uur werk :-)

En dat alles voor circa 20 € totaal (beetje afhankelijk van uw mogelijkheden voor wat betreft het kastje) 


greatbrf2 
After some experimenting with the esp32, the idea came up to make an internet radio with it.
There are already a whole bunch of them on the internet and in the end I came up with a combination of two examples:

- Simple_esp32_radio - https://www.hackster.io/mircemk/simple-esp32-internet-radio-with-oled-display-83e49d and
- ESP radio hot tub - https://github.com/Edzelf/Esp-radio

Including code for a rotary decoder and an IR set to control the radio.
The two main components are the ESP32 and the VS1053, as in most examples and besides that there is a display and as said the rotary decoder and IR receiver.

The basic code was provided by the 'simple-esp-radio' and from the 'ESP-radio-github' the ring buffer has been added because the internet here in the French countryside in the evening which gets slow. Once in a while the music faltered.
And besides that the code was added to read out the metadata and to be able to display the artist and song title. Unfortunately I was not able to do it for all stations to find this metadata; maybe another protocol? If someone knows the solution, I'm recommended for the adapted code :-).

When the base worked, I worked out the rotary decoder and IR control in a separate project after which the code was added to the first part of the project.
Unfortunately, the radio crashed immediately after that... The cause appeared to be in the used library for the IR receiver. In one way or another Ken Shirriff's library doesn't work well with the rest of my radio project. In the project of the rotary decoder with the IR receiver it worked fine, but not with the total code. After some searching I came across another library set (IRremoteESP8266), which is derived from the library of Ken, but he works fine with my version of the internet radio.

The way it works:

The project occupies a few files:

- Internetradio_hans.ino : the code for the internet radio
- helloMp3.h : a file that is played while the radio is starting up and the text 'Hello' is heard.
- Preferences.h : code to store and read some data in the NVRAM of the ESP32; The code stores the set volume and selected station
- radiostations.h : about 14 (dutch) streaming radio stations; easy to adapt to your own choice of stations.

After the experimental version I connected the parts together with soldered wires and everything was built into a 3D printed cabinet. The STL files have been added to the project.

When the radio is started, it will first connect to the specified WiFi network, and then the volume and last station used will become retrieved from the memory of ESP32. Then the connection is made to the streaming server and the broadcast is made audible via the VS 1053.

With the rotary decoder you can change stations by turning it. When there are 2 seconds (to be set in the code at 'interval') nothing more is turned, the then selected station is made active.
By briefly pressing the rotarty decoder the 'volume' mode is activated and the volume can be adjusted. Again the 2 second active: no more action for 2 seconds, then the entered value is sent to VS 1053 as a new volume.

The IR set works as follows:
- when a numeric key is pressed, the code starts to adjust the volume according to the ruined digits. Again the 2 seconds: 2 seconds no more input, then the volume is send to the VS 1053.

- The * key switches the code to 'volume' mode: use the numeric keys to set the desired volume.
- The # key switches the code to 'station' mode: use the number keys to select the desired station.
- The < and > keys : change the station
- The 'up' and 'down' keys : change the volume
- the OK key : activate the selected value immediately and do not wait for 2 seconds without action.

The hardware:

I ordered most of the hardware online at Aliexpres, but of course there are more possibilities.
What is needed?

- ESP32 - Official DOIT ESP32 Development Board WiFi+Bluetooth Ultra-Low Power Consumption Dual Core ESP-32 ESP-32S ESP 32 Similar ESP8266 : https://www.aliexpress.com/item/32799253567.html?spm=a2g0s.9042311.0.0.27424c4dLpU1BO 4,25 €
- Rotary decoder - 360 Degrees Rotary Encoder Module For Arduino Brick Sensor Switch Development Board KY-040 With Pins : https://www.aliexpress.com/item/32969404416.html?spm=a2g0s.9042311.0.0.27424c4dLpU1BO 1,38 €
- IR set                            - just search on the site of ali https://www.aliexpress.com for the 'HX1838 Wireless IR Receiver Module Infrared' (see also the pictures)

- TFT display 1.8 inch TFT LCD Module LCD Screen Module SPI serial 51 drivers 4 IO driver TFT Resolution 128*160 For Arduino : https://www.aliexpress.com/item/32817839166.html?spm=a2g0s.9042311.0.0.27424c4dLpU1BO 2,85 €
-
VS1003B VS1053 MP3 decoding module, microphone head, STM32 microcontroller https://www.aliexpress.com/item/32966454016.html?spm=a2g0s.9042311.0.0.27424c4dLpU1BO 4,34 €
- Cabinet                         -  STL files as attachment for the 3D printer (ANET E12 took 11 hours :-) )
- two tyraps                     - to fix the ESP32 in the closet
- some glue                     - to fix display and IR receiver
- some small screws       - to fix the VS 1053 and the rotary decoder and to close the box
- a knob                           - for on the rotary encoder shaft
- some wire                     - for the electrical connections
- some heatshrink tubing - to insulate the solders
- few hours of work :-)


And all that for about 20 € total (a bit depending on your possibilities as far as the box is concerned)


 francef2

Après quelques expériences avec le esp32, l'idée est venue de faire une radio internet avec ce dernier.
Il en existe déjà un grand nombre sur l'internet et j'ai fini par trouver une combinaison de deux exemples :

- Simple_esp32_radio - https://www.hackster.io/mircemk/simple-esp32-internet-radio-with-oled-display-83e49d et
- Spa radio ESP - https://github.com/Edzelf/Esp-radio

Incluant le code d'un décodeur rotatif et un ensemble IR pour contrôler la radio.
Les deux principaux composants sont l'ESP32 et le VS1053, comme dans la plupart des exemples et en plus il y a un écran et comme dit le décodeur rotatif et le récepteur IR.

Le code de base a été fourni par la "simple-esp-radio" et à partir de la "ESP-radio-github", le tampon circulaire a été ajouté parce que l'internet, ici, dans la campagne française, le soir, devient lent. De temps en temps, la musique s'est arrêtée.
En outre, le code a été ajouté pour lire les métadonnées et pour pouvoir afficher le nom de l'artiste et le titre de la chanson. Malheureusement, je n'ai pas pu le faire pour toutes les stations afin de trouver ces métadonnées ; peut-être un autre protocole ? Si quelqu'un connaît la solution, je suis recommandé pour le code adapté :-).

Lorsque la base a fonctionné, j'ai élaboré le décodeur rotatif et le contrôle IR dans un projet séparé, après quoi le code a été ajouté à la première partie du projet.
Malheureusement, la radio s'est écrasée juste après... La cause semblait se trouver dans la bibliothèque utilisée pour le récepteur IR. D'une manière ou d'une autre, la bibliothèque de Ken Shirriff ne fonctionne pas bien avec le reste de mon projet radio. Dans le projet du décodeur rotatif avec le récepteur IR, elle fonctionnait bien, mais pas avec le code total. Après quelques recherches, je suis tombé sur un autre ensemble de bibliothèque (IRremoteESP8266), qui est dérivé de la bibliothèque de Ken, mais il fonctionne bien avec ma version de la radio Internet.

La façon dont il fonctionne :

Le projet occupe quelques fichiers :

- Internetradio_hans.ino : le code de la radio internet
- helloMp3.h : un fichier qui est joué pendant que la radio démarre et que le texte "Hello" est entendu.
- Preferences.h : code pour stocker et lire certaines données dans la NVRAM de l'ESP32 ; Le code stocke le volume réglé et la station sélectionnée
- radiostations.h : environ 14 stations de radio (néerlandaises) en streaming ; facile à adapter à votre propre choix de stations.

Après la version expérimentale, j'ai relié les pièces entre elles avec des fils soudés et le tout a été intégré dans une armoire imprimée en 3D. Les fichiers STL ont été ajoutés au projet.

Au démarrage, la radio se connectera d'abord au réseau WiFi spécifié, puis le volume et la dernière station utilisée seront récupérés dans la mémoire de ESP32. Ensuite, la connexion est établie avec le serveur de streaming et la diffusion est rendue audible via le VS 1053.

Avec le décodeur rotatif, vous pouvez changer de station en le tournant. Après 2 secondes (à régler dans le code à "intervalle"), plus rien n'est tourné, la station alors sélectionnée est activée.
En appuyant brièvement sur le décodeur rotatif, le mode "volume" est activé et le volume peut être réglé. Encore une fois les 2 secondes actives : plus d'action pendant 2 secondes, puis la valeur entrée est envoyée à VS 1053 comme nouveau volume.

L'ensemble IR fonctionne comme suit :
- lorsqu'on appuie sur une touche numérique, le code commence à ajuster le volume en fonction des chiffres abîmés. Encore les 2 secondes : 2 secondes plus d'action, puis le volume est envoyé au VS 1053.

- La touche * fait passer le code en mode "volume" : utilisez les touches numériques pour régler le volume souhaité.
- La touche # fait passer le code en mode "station" : utilisez les touches numériques pour sélectionner la station désirée.
- Les touches < et > : changent la station
- Les touches "haut" et "bas" : changer le volume
- la touche OK : activez immédiatement la valeur sélectionnée et n'attendez pas 2 secondes sans agir.

Le matériel :

J'ai commandé la plupart du matériel en ligne chez Aliexpres, mais bien sûr, il y a plus de possibilités.
Que faut-il faire ?

- ESP32 - Official DOIT ESP32 Development Board WiFi+Bluetooth Ultra-Low Power Consumption Dual Core ESP-32 ESP-32S ESP 32 Similar ESP8266 : https://www.aliexpress.com/item/32799253567.html?spm=a2g0s.9042311.0.0.27424c4dLpU1BO 4,25 €
- Rotary decoder - 360 Degrees Rotary Encoder Module For Arduino Brick Sensor Switch Development Board KY-040 With Pins : https://www.aliexpress.com/item/32969404416.html?spm=a2g0s.9042311.0.0.27424c4dLpU1BO 1,38 €
- Ensemble IR - Il suffit de chercher sur le site d'Ali https://www.aliexpress.com le 'HX1838 Wireless IR Receiver Module Infrared' (voir aussi les photos).

- Écran TFT - 1.8 inch TFT LCD Module LCD Screen Module SPI serial 51 drivers 4 IO driver TFT Resolution 128*160 For Arduino : https://www.aliexpress.com/item/32817839166.html?spm=a2g0s.9042311.0.0.27424c4dLpU1BO 2,85 €
-
VS1003B VS1053 MP3 decoding module, microphone head, STM32 microcontroller https://www.aliexpress.com/item/32966454016.html?spm=a2g0s.9042311.0.0.27424c4dLpU1BO 4,34 €
- Cabinet - fichiers STL en pièce jointe pour l'imprimante 3D (ANET E12 a pris 11 heures :-) )
- deux tyrapes - pour fixer la ESP32 dans le placard
- un peu de colle - pour fixer l'écran et le récepteur IR
- quelques petites vis - pour fixer le VS 1053 et le décodeur rotatif et pour fermer la boîte
- un bouton - pour sur l'arbre du codeur rotatif
- un peu de fil - pour les connexions électriques
- quelques gaines thermorétractables - pour isoler les connexions soudées
- quelques heures de travail :-)

Et tout cela pour environ 20 € au total (un peu en fonction de vos possibilités en ce qui concerne la boîte)