Attention :
Cet article est fait pour les utilisateurs avancés de Raspberry et de Linux, c’est plus un bloc notes pour moi qu’autre chose.
Objectif : réaliser à l’aide d’un Raspberry, une radio d’écoute VHF avec diffusion par internet d’une fréquence pour une population limitée (identification par mot de passe).
En avons-nous le droit ?
Au niveau législatif, il faut savoir que la diffusion des messages radios par internet ne peut se faire qu’à usage restreint pas de pub sur facebook ! et prévoir une identification par mots de passe à vos membres, et pilotes locaux). Mais la diffusion même à tout le public qui serait à l’intérieur des locaux de votre Aéroclub (sur place, dans l’aérodrome) est tout à fait possible et courante depuis de nombreuses années à l’aide d’une ancienne radio, d’une alimentation 220V bricolée et qu’un ancien ampli Hi-Fi
Matériel
-
Raspberry Pi 3B ou Pi4
incluant : connecteur RJ45, 4 USB et le Wifi)
Evitez le Pi1
Pi2 : possible mais vous n'aurez pas de Wifi
Pi zéro : possible mais vous aurez besoin d'adaptateurs USB voir même d'un hub usb si vous souhaitez y connecter un clavier
Une carte micro SD (mini 8Go) Un récepteur DVB compatible SDR Ex : RTL2833U
Comment ça marche ? : je simplifie beaucoup ! C’est volontaire.
- Le Raspberry est un nano ordinateur, la carte SD fait office de disque dur. Il tourne sous Linux (remarque, une vielle tour de PC peut très bien faire l’affaire)
- Le tuner TNT , comme tout périphérique, nécessite un pilote, on va le détourner de sa fonction première qui consiste à capter les ondes TNT de la TV pour qu’il capte les ondes VHF et lui demander d’envoyer le flux vers la carte son (et oui, dans un Raspberry, il y a une carte son !)
- On va utiliser darkice pour qu’il récupère le flux de la carte son et le transformer en un flux compatible avec internet et l’envoyer vers un programme qui permettra la diffusion sur le web
- La diffusion du flux vers internet se fera via icecast2
Quelles sont les étapes ?
- D’abord disposer d’un Raspberry Pi Zéro, 2 , 3 ou 4. Evitez le 1 : trop peu puissant. Remarque, si vous utilisez une tour de PC, cette étape est inutile
- Paramétrer via raspi-config:
- driver Open GL « Legacy »
- le « Headphone » en sortie sonore »
- Désactiver les services user de pulseaudio :
-
- sudo systemctl –user –global stop pulseaudio.socket pulseaudio.service
- sudo systemctl –user –global disable pulseaudio.socket pulseaudio.service
- Reparamétrer pulseaudio pour un usage system
-
nano /etc/pulse/client.conf
-
mettre : autospawn = no
-
-
nano /etc/pulse/system.pa
-
mettre load–module module–native-protocol-unix auth-anonymous=1
et load–module module–native-protocol-tcp auth-anonymous=1
- Lancer manuellement pulseaudio pour vérifier que les paramètres sont OK
pulseaudio --system
Pulseaudio doit alors démarrer et surement vous dire qu’il n’est pas fait pour fonctionner en mode système.
- Télécharger le code source de rtl_airband https://github.com/charlie-foxtrot/RTLSDR-Airband
- L’installer en suivant la documentation sur le wiki : https://github.com/charlie-foxtrot/RTLSDR-Airband/wiki
- Préparer un fichier de configuration (usr/local/etc/rtl_airband.conf) Exemple :
devices: ({ type = "rtlsdr"; index = 0; #numéro du périphérique RTL-SDR (si vous en avez acheter 2, ce peut-être 0 ou 1) gain = 32; #Gain correction = 0; centerfreq = 120.0; mode = "scan"; channels: ({ freqs = ( xxx.xxx ); # remplacer xxx.xx par la fréquence à écouter labels = ( "Nom de la radio" ); # libellé de votre choix squelch_threshold = ( -50 ); # niveau du squelch outputs: ({ type = "pulse"; }); }); });
- Tester la configuration :
-
rtl_airband -fe
Le programme doit se lancer, trouver la fréauence à écouter et réussir à se connecter à pulse.
-
- Installer icecast2
-
apt-get install icecast2
-
- Activer le service
-
systemctl enable icecast2
-
- Préparer un fichier de configuration (/etc/icecast2/icecast.xml), poins importants à personnaliser :
<location>Sur Terre</location> <admin>admin@root.com/admin> <authentication> <source-password>mot_de_passe_pour_pousser_le_flux_audio</source-password> <admin-user>admin</admin-user> <admin-password>admin_password</admin-password> </authentication> <hostname>raspberrypi</hostname> <listen-socket> <port>8000</port> <shoutcast-mount>/radio.ogg</shoutcast-mount> </listen-socket>
- Démarrer le service et vérifier qu’il est ok
systemctl start icecast2 systemctl status icecast2
- Installer darkice
apt-get install darkice
- Faire un fichier de paramétrage pour darkice : /etc/darkice/darkice.cfg
[general] duration = 0 # duration in s, 0 forever bufferSecs = 1 # buffer, in seconds reconnect = yes # reconnect if disconnected [input] device = pulse # or `pulse' for Pulseaudio sampleRate = 11025 # sample rate 11025, 22050 or 44100 bitsPerSample = 16 # bits channel = 2 # 2 = stereo [icecast2-0] bitrateMode = vbr # variable bit rate (`cbr' constant, `abr' average) quality = 0.7 # 1.0 is best quality format = vorbis # format. Choose `vorbis' for OGG Vorbis server = localhost # or IP port = 8000 # port for IceCast2 access password = mot_de_passe_pour_pousser_le_flux_audio # source password to the IceCast2 server mountPoint = radio.ogg # mount point on the IceCast2 server .mp3 or .ogg name = maradio
- Tester Darkice :
-
darkice -c /etc/darkice/darkice.cfg
-
- C’est OK ? Alors comme malgré de multiples tentatives, impossible de démarrer pulse en mode service et que rtl_airband a la facheuse tendance à vouloir démarrer alors que son pilote n’est pas encore chargé, fair eun truc ignoble à peine digne d’un débutant
- éditer /etc/rc.local mettre juste avant le exit 0
pulseaudio -D --system --disallow-exit
- Reboot et vérification de pulseaudio : ps -aux | grep pulse doit montrer que pulse est démarré
- systemctl status icecast2 pour vérifier que icecast2 est démarré
- Mise en place du service rtl_airband : via la vielle techno de init.d, je n’aime pas mais bon, avec systemd, il veut démarrer alors que l’usb n’est pas prêt alors….
- Récupérer rtl_airband initd service
-
cp rtl_airband.initd_service /etc/init.d/rtl_airband chmod a+rx /etc/init.d/rtl_airband update-rc.d rtl_airband defaults systemctl enable rtl_airband systemctl start rtl_airband
- Le service doit reconnaitre le fichier de configuration, trouver le récepteur et se connecter à pulseaudio normalement
- Enfin, mettre en place le service darkice en récupérant : darkice et instserv
- suffit de faire :
-
bash instserv.sh darkice.service systemctl start darkice systemctl status rtl_airband
Tout doit être ok alors dans un navigateur allez dans http://ipduraspberry:portchoisispouricecast
Ex : http://192.168.0.2:8000/ vous devriez vous un bouton d’écoute comme ceci :
Reste à faire quelque chose d’important : le routage mais surtout sécuriser l’accès pour que seules des personnes autorisées dans un cercle restreint puisse y accéder.
Pour les réglages du squelch : mettre une enceinte sur le pi et modifier le fichier de configuration de rtl_airband