项目作者: revolunet

项目描述 :
Reconversion d'une radio vintage en station de streaming audio
高级语言: JavaScript
项目地址: git://github.com/revolunet/radio-vintage.git
创建时间: 2020-11-02T01:05:15Z
项目社区:https://github.com/revolunet/radio-vintage

开源协议:

下载


Radio Vintage

Reconversion d’une radio vintage en station de streaming audio

demo

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.

Frontend

frontend

Les 7 boutons poussoirs et le potentiomètre de gauche sont exploités.

Backend

backend

Le circuit d’origine n’est pas exploité.

Montage avec la RaspberryPi

  1. |----(+5V et GPIO)------- Bandeau LEDs ws2812
  2. |
  3. RaspberryPi----(gpio + gnd)---- 7 boutons
  4. |
  5. |----I2S----max98357a----speaker

Il faut déconnecter, nettoyer et recabler chaque bouton ou potentiomètre que l’on veut exploiter.

control-panel

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.

Audio et volume

⚠️ 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 🙏🙏🙏.

Software

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 :

  1. const Gpio = require("onoff").Gpio;
  2. // déclare un bouton sur le GPIO 17
  3. const button = new Gpio(17, "in", "falling", { debounceTimeout: 50 });
  4. // déclenche un "callback" quand le bouton est enfoncé
  5. button.watch((err, value) => {
  6. if (err) {
  7. throw err;
  8. }
  9. console.log(`Pushed button 1 (pin 17)`);
  10. playStream("http://icecast.radiofrance.fr/fipreggae-midfi.mp3");
  11. });

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

Streams

cf ./src/buttons.js

PiMusicBox

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.

Ressources

Todo

  • Potentiometer