Passer au contenu principal

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 !

siera-radio.jpg

(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.

    Features

      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 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 que EnableAuto  soit activé dans 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 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 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 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…