Reconversion d'une radio vintage en station de streaming audio
Reconversion d’une radio vintage en station de streaming audio
Dans ce projet, l’éléctronique d’époque n’est pas du tout exploitée : uniquement les boutons physiques et le haut-parleur d’origine qui sont directement branchés sur un RaspberryPI “headless” sur lequel tourne un serveur audio mopidy et une application JavaScript qui permet de changer de stream en fonction du bouton pressé. Un bandeau de LED ws2812 permet d’afficher les couleurs de la radio.
Pour améliorer la qualité de la sortie audio du raspberry qui par défaut n’est pas terrible, vous pouvez ajouter un DAC et/ou un ampli (ex: JustBoom, HifiBerry). J’ai opté pour un micro ampli 3W MAX98357A qui exploite le port I2S du Raspi pour fournir un audio de qualité suffisante pour ~8€ mais la puissance est un peu juste pour sonoriser une grande pièce.
Les 7 boutons poussoirs et le potentiomètre de gauche sont exploités.
Le circuit d’origine n’est pas exploité.
|----(+5V et GPIO)------- Bandeau LEDs ws2812
|
RaspberryPi----(gpio + gnd)---- 7 boutons
|
|----I2S----max98357a----speaker
Il faut déconnecter, nettoyer et recabler chaque bouton ou potentiomètre que l’on veut exploiter.
Sur ma radio, un seul bouton peut être enfoncé à la fois, donc tous ses boutons auront une masse commune et l’autre pin sur un des ports GPIO du raspberry. Le contact d’une masse+GPIO déclenchera des événements
dans notre programme, lequel enverra des ordres
au serveur mopidy qui gère la lecture du son via une API HTTP.
Dans mon cas les 7 boutons sont branchés sur les GPIO : 17, 27, 22, 10, 9, 11, 5 et la masse commune sur un des GND de la raspberryPI.
⚠️ Une des difficultés (pour moi) est d’exploiter correctement le potentiomètre d’origine. Il n’a visiblement pas la bonne impédance? pour mon ampli du coup je n’exploite que 10% de sa course. Si vous avez des idées pour arranger cela sans changer le potentiomètre 🙏🙏🙏.
Le serveur Mopidy propose de nombreux plugins, par exemple spotify, somafm, youtube… et une API http+websocket très riche qui permet de contrôler la diffusion.
(Une autre possibilité est d’utiliser VLC qui propose lui aussi une API http (minimale) qui permet de gérer une playlist.)
Une fois le serveur mopidy fonctionnel et lancé automatiquement au démarrage, il faudra aussi lancer un script JavaScript (ou Python) qui va pouvoir gérer les boutons de la radio à votre guise.
Avec le module onoff c’est assez simple :
const Gpio = require("onoff").Gpio;
// déclare un bouton sur le GPIO 17
const button = new Gpio(17, "in", "falling", { debounceTimeout: 50 });
// déclenche un "callback" quand le bouton est enfoncé
button.watch((err, value) => {
if (err) {
throw err;
}
console.log(`Pushed button 1 (pin 17)`);
playStream("http://icecast.radiofrance.fr/fipreggae-midfi.mp3");
});
La fonction playStream
déclenche la lecture d’un stream/fichier sur mopidy, en appelant les API core.tracklist.add
et core.playback.play
.
On pourra utiliser pm2 pour lancer ce script automatiquement au démarrage du RaspberryPi.
Voir le script complet : ./src/index.js
Pour utiliser “onoff” avec les boutons en GPIO en input en mode “PullUp”, ajouter ceci dans /boot/config.txt :
gpio=5,9,10,11,13,15,17,19,21,22,23,27,29=pu
La distribution PiMusicBox est visiblement peu active et il est difficile d’installer des packages récents sur cette base. Il vaut mieux partir sur la dernière Raspbian Lite et installer mopidy et ses plugins directement.