Écouter la radio DAB+ avec welle-cli

Le projet est d'écouter la radio DAB+ streamée dans le réseau local à partir d'un Raspberry Pi sur un autre Raspberry Pi.

Le récepteur est une clé rtl-sdr connectée à une antenne de toit, branchée à un Raspberry Pi en usb, le tout connecté en filaire au réseau local via la prise RJ45.

Les antennes de toit, de haut en bas : 1 UHF (TNT), 2 VHF (bande III pour DAB+ puis bande II pour FM)
Les antennes de toit, de haut en bas : 1 UHF (TNT), 2 VHF (bande III pour DAB+ puis bande II pour FM)

Un autre raspberry Pi possédant une carte son (Pi Sound) va servir de poste d'écoute. Le module Pi Sound n'est pas obligatoire dans l'absolu mais il est pratique car possède un potentiomètre de volume et un bouton programmable dont on va décrire ses affectations.

à partir d'une fresh install Raspberry Pi OS sous un Raspberry Pi 3B+

Mise à jour de la distribution

1sudo apt update && sudo apt full-upgrade && sudo apt autoremove

Installation des dépendances de welle-io, compilation et installation de l'outil cli

Note: l'absence de libasound2-dev ne va pas bloquer la compilation mais au runtime on ne pourra rien écouter avec alsa. Tous les autres paquets sont obligatoires.

1sudo apt install git cmake libfftw3-dev libmp3lame-dev libmpg123-dev librtlsdr-dev libfaad-dev libasound2-dev
2git clone https://github.com/AlbrechtL/welle.io.git
3cd welle.io
4mkdir build
5cd build
6cmake .. -DRTLSDR=1 -DBUILD_WELLE_IO=OFF -DBUILD_WELLE_CLI=ON
7make
8sudo make install

La commande welle-cli est désormais installée dans /usr/local/bin.

Petit aparté, si vous désirez compiler welle.io (la version avec interface graphique) sous MacOS, quelques dépendances dont QT sont requises. Voici les commandes :

1brew install qt@5 faad2 fftw mpg123 librtlsdr
2git clone https://github.com/AlbrechtL/welle.io.git
3cd welle.io
4mkdir build
5cd build
6cmake .. -DRTLSDR=1 -DBUILD_WELLE_IO=ON -DBUILD_WELLE_CLI=ON -DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt\@5/5.15.2/
7make

Côté serveur, Mon récepteur possède l'ip 192.168.1.73, dispose du paquet rtl-sdr et exécute le service rtl_tcp sur le port 1234. Le service est géré via systemd et voici le fichier de déclaration /etc/systemd/system/rtlsdr.service

 1[Unit]
 2Description=RTL-SDR Server
 3Wants=network-online.target
 4After=network-online.target
 5
 6[Service]
 7ExecStart=/bin/sh -c '/usr/bin/rtl_tcp -a $(hostname -I)'
 8WorkingDirectory=/home/pi
 9StandardOutput=inherit
10StandardError=inherit
11Restart=always
12
13[Install]
14WantedBy=multi-user.target

Pour que ce nouveau fichier soit pris en compte, exécutez

1sudo systemctl daemon-reload

puis lancez le service rtlsdr sur le serveur :

1sudo systemctl start rtlsdr

On peut automatiser le lancement du service au boot de la machine :

1sudo systemctl enable rtlsdr

Retournons à la machine cliente :

Avec le pisound, pour que cette carte son soit considérée comme celle par défaut, nous devons ajuster le fichier /home/pi/.asoundrc :

 1# card 1 pour pisound
 2pcm.output {
 3  type hw
 4  card 1
 5}
 6
 7# card 1 pour pisound
 8ctl.!default {
 9  type hw
10  card 1
11}

l'identifiant des cartes son peut être obtenu avec la commande aplay -l :

 1$ aplay -l
 2**** Liste des Périphériques Matériels PLAYBACK ****
 3carte 0: Headphones [bcm2835 Headphones], périphérique 0: bcm2835 Headphones [bcm2835 Headphones]
 4  Sous-périphériques: 8/8
 5  Sous-périphérique #0: subdevice #0
 6  Sous-périphérique #1: subdevice #1
 7  Sous-périphérique #2: subdevice #2
 8  Sous-périphérique #3: subdevice #3
 9  Sous-périphérique #4: subdevice #4
10  Sous-périphérique #5: subdevice #5
11  Sous-périphérique #6: subdevice #6
12  Sous-périphérique #7: subdevice #7
13carte 1: pisound [pisound], périphérique 0: PS-12KMP7S snd-soc-dummy-dai-0 [PS-12KMP7S snd-soc-dummy-dai-0]
14  Sous-périphériques: 1/1
15  Sous-périphérique #0: subdevice #0

la carte 0 étant la sortie jack standard du Raspberry Pi.

On arrive donc à la commande suivante :

1welle-cli -F rtl_tcp,192.168.1.73:1234 -c 11B -p "OUI FM"
  • -c $CANAL : le numéro du canal sur lequel émet le multiplex. (cf. ma table des multiplex DAB+ parisiens)
  • `-p $PROGRAMME : le label du programme en toute lettre qu'on peut récupérer dans les logs de welle-cli quand on se connecte à un multiplex :
 1Service list
 2  [0xfe43] CHANTE FRANCE  [component 0 ASCTy: DAB+ ] [subch 1 bitrate:88 at SAd:0]
 3  [0xf9f5] Melody  [component 0 ASCTy: DAB+ ] [subch 2 bitrate:88 at SAd:66]
 4  [0xfe50] GENERATIONS  [component 0 ASCTy: DAB+ ] [subch 3 bitrate:88 at SAd:132]
 5  [0xf650] SUD RADIO  [component 0 ASCTy: DAB+ ] [subch 4 bitrate:88 at SAd:198]
 6  [0xf20a] BLEU PARIS  [component 0 ASCTy: DAB+ ] [subch 5 bitrate:88 at SAd:264]
 7  [0xfefb] Radio Notre Dame  [component 0 ASCTy: DAB+ ] [subch 6 bitrate:88 at SAd:330]
 8  [0xfe35] EVASION  [component 0 ASCTy: DAB+ ] [subch 7 bitrate:88 at SAd:396]
 9  [0xf21d] OUI FM  [component 0 ASCTy: DAB+ ] [subch 8 bitrate:88 at SAd:462]
10  [0xfe45] VOLTAGE  [component 0 ASCTy: DAB+ ] [subch 9 bitrate:88 at SAd:528]
11  [0xf223] TSF JAZZ  [component 0 ASCTy: DAB+ ] [subch 10 bitrate:88 at SAd:594]
12  [0xf22c] FG  [component 0 ASCTy: DAB+ ] [subch 11 bitrate:88 at SAd:660]
13  [0xf22a] NOVA  [component 0 ASCTy: DAB+ ] [subch 12 bitrate:88 at SAd:726]
14  [0xf22f] J A Z Z Radio  [component 0 ASCTy: DAB+ ] [subch 13 bitrate:88 at SAd:792]

TODO

  • description de la gestion du bouton du Pi Sound
  • ajout photo du pi sound
  • ajout photo du récepteur + clé
comments powered by Disqus