Publié le 5 juillet 2015 - par

Ecoutez la radio avec votre Raspberry Pi

recepteur_vintage_250pxJe vous avais déjà expliqué comment créer un récepteur ADS-B avec un Raspberry Pi et un dongle USB TNT.
La lecture d’un article de Florent m’a donné envie de tester la réception radio FM avec la clé USB TNT et le RasPi. Et puis après je me suis demandé si je pouvais écouter les Talkys 446MHz que j’utilise de temps en temps…
Cette description n’est pas un tutoriel de type next/next/next. Il vaut mieux avoir une première expérience avec le RasPi avant de vous lancer.

Éventuellement, relisez l’article sur la réception ADS-B avant de commencer ce récepteur FM.

Ecouter la radio avec son Raspberry Pi

Le matériel

  • Raspberry Pi 2
  • Carte microSD EVO Samsung 16 Go
  • Alimentation 5V / 2A
  • Recepteur TNT USB SPC-0155
  • Paire d’enceintes amplifiées avec connecteur 3,5mm

radio-tuning_600px

Installer le système

On va commencer par installer un Raspbian propre, enfin, vous faites bien comme vous voulez….

Téléchargez l’archive depuis https://www.raspberrypi.org/downloads/ et après avoir extrait l’archive, utilisez Win32DiskImager pour transférer l’image sur la carte microSD.

Au démarrage de Raspbian dans raspi-config :

Validez l’option 1 – expand file system

Allez dans l’option 4 – internationalisation : (langage = français, locales = FR, fuseau horaire Paris et clavier français)

  • Change locale > fr_FR.UTF-8 UTF-8  > validez par barre espace puis TAB <Ok>
  • Default locale for the system environment  : > fr_FR.UTF-8    TAB <Ok>
  • Change Time Zone > Europe > Paris     TAB <Ok>
  • Change Keyboard Layout > Generic 105-key > Other > French > French – French (alternative, latin-9 only) > Ok > Ok > Ok (3 fois)

Focez le son sur le jack avec l’option 8 – Advanced Options   > Audio > 1  Force 3.5 mm (‘headphone’) jack TAB   <Ok>

TAB TAB <Finish>

Et reboot !

radio-tuning2_600px

Mise à jour du système

sudo apt-get update

sudo apt-get upgrade

sudo rpi-update

=> avec rpi-update le firmware passe de   3.18.11-v7+  à   rpi-4.0.y

Et reboot !

pi@raspberrypi ~ $ uname -a

Linux raspberrypi 4.0.6-v7+ #798 SMP PREEMPT Tue Jun 23 18:06:01 BST 2015 armv7l GNU/Linux

radio-tuning3_600px

Liste des périphériques USB connectés

Branchez le récepteur TNT et

pi@raspberrypi ~ $ lsusb

Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.

Bus 001 Device 004: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T

Bus 001 Device 005: ID 046d:c52b Logitech, Inc. Unifying Receiver

Notre clé USB TNT est bien reconnue : comme le prouve la ligne Realtek Semiconductor Corp. RTL2838 DVB-T

Installation des programmes nécessaires à la compilation de rtl-sdr

pi@raspberrypi ~ $ sudo apt-get install cmake libusb-1.0-0.dev build-essential

Lecture des listes de paquets... Fait

Construction de l'arbre des dépendances

Lecture des informations d'état... Fait

Note : sélection de libusb-1.0-0-dev pour l'expression rationnelle « libusb-1.0-0.dev »

build-essential est déjà la plus récente version disponible.

Les paquets supplémentaires suivants seront installés :

cmake-data emacsen-common libxmlrpc-core-c3

Les NOUVEAUX paquets suivants seront installés :

cmake cmake-data emacsen-common libusb-1.0-0-dev libxmlrpc-core-c3

0 mis à jour, 5 nouvellement installés, 0 à enlever et 0 non mis à jour.

Il est nécessaire de prendre 5 950 ko dans les archives.

Après cette opération, 14,6 Mo d'espace disque supplémentaires seront utilisés.

Souhaitez-vous continuer [O/n] ? o

Après cette installation on passe à rtl-dsr :

Installer rtl-sdr

On clone le dépôt git de rtl-sdr

pi@raspberrypi ~ $ git clone git://git.osmocom.org/rtl-sdr.git

Cloning into 'rtl-sdr'...

remote: Counting objects: 1617, done.

remote: Compressing objects: 100% (711/711), done.

remote: Total 1617 (delta 1182), reused 1213 (delta 898)

Receiving objects: 100% (1617/1617), 345.89 KiB | 428 KiB/s, done.

Resolving deltas: 100% (1182/1182), done.

pi@raspberrypi ~ $

pi@raspberrypi ~ $ cd rtl-sdr/

pi@raspberrypi ~/rtl-sdr $

pi@raspberrypi ~/rtl-sdr $ mkdir build

pi@raspberrypi ~/rtl-sdr $ cd build

pi@raspberrypi ~/rtl-sdr/build $

pi@raspberrypi ~/rtl-sdr/build $ cmake ../ -DINSTALL_UDEV_RULES=ON

-- The C compiler identification is GNU 4.6.3

-- Check for working C compiler: /usr/bin/gcc

-- Check for working C compiler: /usr/bin/gcc -- works

-- Detecting C compiler ABI info

-- Detecting C compiler ABI info - done

-- Build type not specified: defaulting to release.

-- Extracting version information from git describe...

-- Found PkgConfig: /usr/bin/pkg-config (found version "0.26")

-- checking for module 'libusb-1.0'

--   found libusb-1.0, version 1.0.11

-- Looking for libusb_handle_events_timeout_completed

-- Looking for libusb_handle_events_timeout_completed - found

-- Looking for libusb_error_name

-- Looking for libusb_error_name - found

-- Found libusb-1.0: /usr/include/libusb-1.0, /usr/lib/arm-linux-gnueabihf/libusb-1.0.so

-- Looking for include file pthread.h

-- Looking for include file pthread.h - found

-- Looking for pthread_create in pthreads

-- Looking for pthread_create in pthreads - not found

-- Looking for pthread_create in pthread

-- Looking for pthread_create in pthread - found

-- Found Threads: TRUE

-- Building with kernel driver detaching disabled, use -DDETACH_KERNEL_DRIVER=ON to enable

-- Building for version: v0.5.3-12-ge3c0 / 0.5git

-- Using install prefix: /usr/local

-- Configuring done

-- Generating done

-- Build files have been written to: /home/pi/rtl-sdr/build

pi@raspberrypi ~/rtl-sdr/build $

L’option -DINSTALL_UDEV_RULES=ON   permet de lancer rtl-sdr sans être root

pi@raspberrypi ~/rtl-sdr/build $ make

Scanning dependencies of target convenience_static

[  5%] Building C object src/CMakeFiles/convenience_static.dir/convenience/convenience.c.o

Linking C static library libconvenience_static.a

[  5%] Built target convenience_static

Scanning dependencies of target rtlsdr_shared

[ 10%] Building C object src/CMakeFiles/rtlsdr_shared.dir/librtlsdr.c.o

…/…

pi@raspberrypi ~/rtl-sdr/build $ sudo make install

[  5%] Built target convenience_static

[ 35%] Built target rtlsdr_shared

[ 40%] Built target rtl_adsb

[ 45%] Built target rtl_eeprom

[ 50%] Built target rtl_fm

[ 55%] Built target rtl_power

[ 60%] Built target rtl_sdr

[ 65%] Built target rtl_tcp

[ 70%] Built target rtl_test

[100%] Built target rtlsdr_static

Install the project...

-- Install configuration: "Release"

…/…

ldconfig crée les liens nécessaires et met en cache (pour être utilisé par le chargeur / éditeur de liens ld.so) les bibliothèques partagées les plus récentes trouvées dans les répertoires indiqués sur la ligne de commande, dans le fichier /etc/ld.so.conf, et dans les répertoires sûrs (/lib et /usr/lib).

pi@raspberrypi ~/rtl-sdr/build $ sudo ldconfig

Et reboot ! (vous avez compté combien ça fait de reboot ? 😉 )

radio

Tester rtl-sdr

pi@raspberrypi ~ $ rtl_test

Found 1 device(s):

0:  Realtek, RTL2838UHIDIR, SN: 00000001

&nbsp;

Using device 0: Generic RTL2832U OEM

Kernel driver is active, or device is claimed by second instance of librtlsdr.

In the first case, please either detach or blacklist the kernel module

(dvb_usb_rtl28xxu), or enable automatic detaching at compile time.

usb_claim_interface error -6

Failed to open rtlsdr device #0.

pi@raspberrypi ~ $

C’est ok le récepteur TNT a été détecté mais… n’ a pas pu être ouvert…

Normal, Linux a détecté la clé TNT et monté son propre driver qu’il faut  supprimer

On vérifie ?

pi@raspberrypi ~ $ lsmod

Module                  Size  Used by

dvb_usb_rtl28xxu       15117  0

dvb_usb_v2             13368  1 dvb_usb_rtl28xxu

dvb_core               81677  2 rtl2832,dvb_usb_v2

rc_core                16948  14 ir_sharp_decoder,ir_xmp_decoder,lirc_dev,ir_lirc_codec,dvb_usb_rtl28xxu,ir_rc5_decoder,ir_nec_decoder,ir_sony_decoder,ir_mce_kbd_decoder,ir_jvc_decoder,dvb_usb_v2,ir_rc6_decoder,ir_sanyo_decoder

On voit apparaitre dvb_usb_rtl28xxu et rtl2832

Il faut le « blacklister » pour le prochain démarrage :

Blacklister le driver d’origine

pi@raspberrypi ~ $ sudo nano /etc/modprobe.d/raspi-blacklist.conf

et ajouter

blacklist dvb_usb_rtl28xxu

blacklist rtl_2832

blacklist rtl_2830

Et reboot ! bin oui, encore !

Nouveau test de rtl-sdr

On relance rtl_test : (il faudra sortir par CTRL C)

pi@raspberrypi ~ $ rtl_test

Found 1 device(s):

0:  Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM

Found Rafael Micro R820T tuner

Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6

[R82XX] PLL not locked!

Sampling at 2048000 S/s.

Info: This tool will continuously read from the device, and report if

samples get lost. If you observe no further output, everything is fine.

Reading samples in async mode...

^C  => CTRL C pour sortir !
Signal caught, exiting!

User cancel, exiting...

Samples per million lost (minimum): 0

pi@raspberrypi ~ $

Bon on commence à avoir un résultat

On se lance : trouver une fréquence de radio FM dans votre secteur et saisissez sa fréquence après le -f (100M = 100MHz, 95.7M = 95,700 MHz…)

pi@raspberrypi ~ $ rtl_fm -f 100M -M wbfm -s 400k -r 32k | aplay -r 32k -f S16_LE

Found 1 device(s):

0:  Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM

Found Rafael Micro R820T tuner

Tuner gain set to automatic.

Tuned to 100316000 Hz.

Oversampling input by: 3x.

Oversampling output by: 1x.

Buffer size: 6.83ms

Sampling at 1200000 S/s.

Output at 400000 Hz.

Lecture données brutes 'stdin' : Signed 16 bit Little Endian, Fréquence 32000 Hz, Mono

Vous pouvez tester d’autres réglages pour améliorer la qualité (reportez vous au manuel d’emploi de rtl-fm)

Avec un autre réglage  qui donne une meilleure qualité

pi@raspberrypi ~ $ rtl_fm -f 100M -M wbfm -s 200000 -r 48000 | aplay -r 48k -f S16_LE

Found 1 device(s):

0:  Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM

Found Rafael Micro R820T tuner

Tuner gain set to automatic.

Tuned to 100316000 Hz.

Oversampling input by: 6x.

Oversampling output by: 1x.

Buffer size: 6.83ms

Sampling at 1200000 S/s.

Output at 200000 Hz.

Lecture données brutes 'stdin' : Signed 16 bit Little Endian, Fréquence 48000 Hz, Mono

Essayez aussi

rtl_fm -g 48 -f 100M -M wbfm -s 200000 -r 48000 -E deemp | aplay -r 48k -f S16_LE
rtl_fm -g 48 -f 100M -M fm -s 170k -A fast -r 32k -E deemp -l 0 | aplay -r 32k -f S16_LE

qui ajoute de la désaccentuation (deemphasis) – voir doc de rtl-fm

Avec ces réglages vous devriez pouvoir transformer un RasPi qui dort dans un placard en récepteur FM

Recevoir d’autres fréquences

talkyJ’ai fait quelques essais de réception de la bande aviation 108-130 MHz mais loin de tout aéroport je n’ai rien entendu, vous aurez peut-être plus de succès ?

rtl_fm -f 108M:130M:25K -M am -s 12k -l 20 | aplay -r 12k -f S16_LE

Par contre avec ce réglage j’ai pu écouter un talky-walky FM sur 446MHz

rtl_fm -M fm -f 446M:446.1M:6.25k -s 12k -g 50 -l 10 | aplay -r 12k -f S16_LE

Conclusion

Un récepteur FM et un scanner à peu de frais avec le Raspberry Pi et son dongle TNT. Si vous avez expérimenté d’autres réceptions (SSB ?) n’hésitez pas à en faire part aux lecteurs du blog.

Merci à Florent qui m’a autorisé à utiliser son article comme point de départ pour celui-ci.

Sources

Share Button

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. .

9 réflexions au sujet de « Ecoutez la radio avec votre Raspberry Pi »

  1. SCHERER Jacques

    Bonjour,

    très intéressant votre article,
    juste une précision la réception des fréquences d’approche des aéroports est en AM et non en FM
    Cordialement,
    Jacques

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Jacques
      Merci pour ce retour
      Ce serait une erreur impardonnable pour un ancien mécano radio de l’Armée de l’Air !!!
      la ligne de commande rtl_fm -f 108M:130M:25K -M am …
      indique bien que la modulation est en AM (-M am)
      73’s
      François / F1GYT

      Répondre
  2. Ping : Hackable Magazine N° 9 : Framboise d’honneur ! | Framboise 314, le Raspberry Pi à la sauce française….

  3. azer

    Bonjour. Moi je m’intéresse plutôt à la partie station de radio ‘standard’ et les data rds + TD/TA. Ce stick USB ferait il bien l’affaire pour être embarqué dans une voiture ?

    Répondre
  4. Ping : Réalisez un analyseur de spectre avec le Raspberry Pi 2 | Framboise 314, le Raspberry Pi à la sauce française….

  5. Tcheva

    Bonjour, merci pour ce super tuto.
    Petite question, est il possible d’ecouter sur plusieurs fréquences en même temps ?
    Merci d’avance.
    Cordialement

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.