Old School Radio

Une vieille radio c'est beau mais pas très utile. Avec du bluetooth, des web radios et de quoi recharger un téléphone c'est mieux !

(image: radiomuseum.org)

Mainteneur: John B

J'ai une vieille radio qui est très jolie et qui aurait bien sa place dans ma salle à manger. Tant qu'à faire autant qu'elle serve !

L'idée est de jouer de la musique en Bluetooth, de pouvoir lancer des web radios et de récupérer les boutons existants pour l'interface.

  • Une Raspberry Pi est intégrée dans la radio. Un DAC HAT améliore l'audio de la pi, le son sort sur des haut-parleurs (ceux de base sont à remplacer, tout comme l'ampli).
  • La Pi est connectée au réseau local en wifi.
  • La Pi alimentée via un transfo 5v alimenté par le 220v de la radio (le câble est à changer).
  • Sur la radio, les boutons physiques d'origine permettent d'allumer la Pi, de contrôler le volume ainsi que les radios web.

v1

  • Bluetooth
  • Web Radios via une interface web
  • Raspotify ?

v2

  • Aux (mini-jack)
  • Port USB pour recharger un device
  • Ecran LCD sur le dessus ?
  • Gestion de la liste des radios (ajout, suppression) via une interface web
  • Raspberry Pi 3B+ (un 0W aurait peut-être fait le job mais j'avais peur des lags wifi - bluetooth)
  • Raspberry Pi DAC HAT
  • Carte SD
  • Ampli + haut-parleurs (démonter des vieilles enceintes ?)
  • Alimentation 5v
  • écran LCD
  • Câble jack 3.5mm mâle-male
  • Circuit sur PCB pour lier tout ça

La stack software est relativement simple. Le challenge va être de gérer les droits sur le son (alsa) : quid si un client bluetooth diffuse et qu'on veut jouer une radio web ?

Bluetooth

La partie la plus simple: la raspi 3 étant équipée d'un adaptateur bluetooth intégré, il suffit de trouver le bon tuto sur le net (ce qui n'est pas toujours gagné).

J'ai essayé plusieurs solutions, celle qui a fonctionné c'est ce script python : bt-speaker.

  • Préparer la Raspberry Pi (voir Getting Started)
  • Changez le hostname de votre Raspberry Pi (l'adaptateur Bluetooth se nomme d'après le hostname, ce n'est pas configurable): sudo raspi-config → Network Options → Hostname → redémarrer
  • Suivre le tutoriel suivant : Making the Raspberry Pi 3 a bluetooth audio receiver. En résumé il s'agit de :
    • forcer la sortie jack 3.5mm pour l'audio
    • installer le script BT-Speaker
    • mettre à jour Bluez (la suite d'utilitaire Bluetooth pour linux)
    • définir les bonnes permissions
    • démarrer le bluetooth automatiquement au démarrage de la Pi

Note 1: à la fin du tutoriel, il est expliqué qu'il faut forcer le bluetooth à s'allumer au démarrage de la Pi malgré que EnableAuto soit activé dans /etc/bluetooth/main.conf. Personnellement je n'ai pas eu à le faire, ça a fonctionné directement. Je n'ai donc pas créé le service bt_power.

Note 2: il est également noté qu'il faut désactiver l'adaptateur wifi interne pour avoir un son correct (sinon ça laggue). Je n'ai pas eu non plus à le faire, ça fonctionne correctement avec le wifi allumé.

Web radio

Pour les web radios, la première étape est de trouver un player web sur lequel on pourrait se connecter et jouer une radio dans une liste préconfigurée.

MPD.FM fait exactement le job, pas plus pas moins. Il s'appuie sur un standard (MPD) et est codé proprement en nodejs, ce qui me permettra d'ajouter les fonctionnalités que je souhaite à terme :

  • Contrôle du volume
  • API REST
  • Gestion de la liste des radios via une playlist m3u (voir l'issue sur le repo)
  • Ajout d'un service worker pour convertir l'app en PWA (Progressive Web App) afin d'avoir une icône sur l'écran d'accueil Android

Pour installer MPD.FM, suivre le guide sur le README du github. Cela consiste en :

  • Installer la dernière version de node
  • Installer MPD
  • Cloner le repo MPD.FM et installer les dépendances npm
  • Créer un service dans systemd pour lancer le script node au démarrage

Ensuite :

  • Modifier le fichier de config avec la liste des stations : /home/srv-mpd-fm/MPD.FM/data/stations.json
  • Ouvrir la page 192.168.*.*:4200

Grâce au service Bonjour sur Macos, on peut se connecter à hostname.local:4200. Si vous avez configuré le bluetooth dans la section précédente, hostname correspond au nom de votre adaptateur Bluetooth.

TODO: mettre le script sur le port 80 (il faut des droits spéciaux au user) et fixer l'adresse IP de la Pi (nécessaire si on veut ajouter l'app à l'écran d'accueil Android).

Aux

A voir si c'est possible sans DAC. Avec un DAC il devrait être possible de sortir une fiche mini-jack 3.5mm de la radio à brancher dans les téléphones.

Interface

L'interface consiste en trois interactions :

  • Boutons du bas: Allumer, mode Aux, mode Bluetooth, mode web radios
  • Boutons du haut: Remplacer par l'écran LCD
  • Molette gauche: Contrôle du volume
  • Molette droite: Switch des web radios

Boutons du bas

TODO

Boutons du haut

TODO

Molettes

A voir s'il ne faut pas remplacer les molettes par un rotary encoder classique: le fonctionnement actuel est basé sur une série de ficelles et d'engrenages…