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. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

26 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
  6. Rouzies

    Bonjour François
    Je fais parti de l’Adrasec 81.
    Dans le cadre de nos missions d entrainement, nous procédons à la recherche de balise détresse aviation (121.375 Am)
    J’ai procédé il y a quelques temps a cette recherche sur tablette (android) relié à une clé RTL2838 DVB-T, ce système m’a permis de constater une amélioration du signal de la balise en SDR. Plus facile de voir que d entendre lors de la recherche directionnelle. Seulement tablette plus clé plus câble antenne+……., pas facile à gérer, de plus la clé usb décharge rapidement la tablette.
    Donc, en lisant cet article je me demandais si cela ne pouvait être adapté pour faire la mm chose sur raspberry Pi3 que je viens d acquérir,( en cours d acheminement vers mon domicile.)
    Pourriez vous m ‘aider un tant soit peu, ou m indiquer une procédure à suivre.
    Merci d avance, F4GPZ
    73-s

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

      Bonjour Thierry
      oui c’est possible aussi de recevoir cette fréquence sur une clé RTL-SDR. Je ne pense pas que le Raspberry Pi 3 soit le plus adapté du fait de ses 4 coeurs d’où une consommation plus élevée.
      Mais pour les tests il peut être utilisé.
      Un A+, B+ ou un Pi Zero consomme moins… https://fr.wikipedia.org/wiki/Raspberry_Pi#Tableau_comparatif
      Après je pense que vous savez comment améliorer la réception :
      filtre d’entrée sur la freq à recevoir
      clé USB en boitier métallique (j’utilise ce modèle https://www.amazon.com/dp/B0129EBDS2/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=rsv0f-20&linkId=9806dfa291f74f7cdb49e2cfbe3d34eb)
      et j’ai reçu le N3 http://www.thumbsat.com/thumbnet-n3-sdr-receiver/store-item-1456436783
      mais il y a un problème avec l’alim (signalé par le concepteur) et je n’ai pas encore pris le temps de le tester)
      Blindage du Raspi et mise en place de perles ferrite sur les Entrées/sorties USB, alim…
      regardez aussi https://www.framboise314.fr/realisez-un-analyseur-de-spectre-avec-le-raspberry-pi-2/ avec un raspberry pi equipé d’un écran 3.5 pouces vous pourriez afficher le spectre du signal et afficher son amplitude (il n’y a pas de décodage prévu avec l’analyseur de spectre on n’a pas le son de la balise)
      j’espère avoir fait avancer votre réflexion
      n’hésitez pas si vous avez d’autres questions
      73’s
      François – F1GYT – jn26ft

      Répondre
  7. rjcr

    bonjour
    je suis un passionné d’écoute radioamateur depuis des dizaines d’années SWL
    également passionné par le raspberry je me suis lancé dans l’installation de GQRX 2.6 sur un pi 2
    j’utilise une clé RTL2838 CINERGY
    tout fonctionne sous windows 10 et android
    j’ai suivi le tuto d’installation mais impossible de lancer le logiciel
    merci pour vos réponses
    73

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

      Bonjour
      ce n’est pas parce qu’un récepteur fonctionne sous Windows qu’il est reconnu par Linux 🙁
      Après il est difficile de vous aider sans avoir aucune info…
      qu’affichent dmesg, lsusb…
      quels messages d’erreur avez vous ???
      est-ce que l’install se déroule parfaitement, sans messages d’erreur ou d’avertissement ?
      73’s
      François
      en complément cette page http://osmocom.org/projects/sdr/wiki/rtl-sdr indique que le 2838 est en fait un 2832… il ne devrait donc pas y avoir de souci

      Répondre
      1. rjcr

        bonjour
        merci pour votre réponse
        j’ai donc remis à plat ma carte micro sd
        tout fonctionne mais uniquement sur un pi 3 , c’est très bien comme ça
        je n’aime pas rester sur un échec
        je continue de flâner sur votre super site , j’ai quelques framboises qui tournent grâce a vous et toutes les personnes qui alimente le site

        Répondre
  8. Raff

    Bonjour !

    J’ai récemment acheter et j’ai reçu mon dongle.
    J’ai suivie votre tuto a la lettre mais il y’a un problème.

    ——————————————————————-
    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
    No supported tuner found <—- ███
    Enabled direct sampling mode, input 1
    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
    ——————————————————————-

    Si vous savez pourquoi sa serais super !!

    Répondre
  9. Michael

    Bonjour, il existe un tutoriel expliquant comment émettre en fm sans accessoire, juste un fil… Alors pourquoi avoir besoin d’un récepteur tnt pour recevoir la fm ?
    Autrement dit, ne serait-ce possible de recevoir la fm juste avec un bout de fil ?

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

      Bonjour
      hélas non
      Si c était possible… mais non on reçoit des signaux de l ordre des mv ou microvolts il faut amplifier puis changer la fréquence dans un tuner classique ou numériser comme dans les tuners TNT. Malheureusement il faut plus qu’ un
      Il y a qques décennies j ai fait un récepteur avec un fil, une diode et un écouteur peso… mais c était une station en PO et j étais près de l émetteur ?

      Répondre
  10. Radio8

    Bonjour,
    Merci pour ce tuto !! Savez vous s’il est possible de scanner la bande de fréquence afin de préenregistrée les chaînes radio pour la prochaine utilisation ? Et si oui quelle app serait susceptible de faire ça ?

    Répondre
  11. electroto

    Bonjour et merci pour ce tuto !
    Comment faire pour zapper les radios à distance et les écouter via un streaming shoutcast ?
    Exemple je suis à Mende mais mon raspberry est à Paris donc je peux profiter de la bande FM parisienne depuis internet en Lozère.
    Des idées ? ! Merci.

    Répondre
  12. Ping : Le DAB arrive enfin | leproton

  13. dominique

    Bonjour à tous !

    Mon problème est que mon tuner R820 génère une erreur:

    Comment corriger svp ?

    Merci.

     

    Répondre
      1. dominique

        En fait, CubicSDR et Gqrx fonctionnent sans problème, mais rtl_433 et consorts n’arrivent pas à verrouiller la PLL.
        Ce qui fait que je ne peux pas analyser ce qui transite sur les ondes, comme si l’antenne n’était pas branchée.

        Répondre

Laisser un commentaire

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

Complétez ce captcha SVP *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.