Même si je suis pas très actif côté émission (c’est un peu la faute au Raspberry Pi ), je reste radioamateur et passionné par les techniques de plus en plus numériques qui apparaissent dans ce domaine.
Je vous ai déjà parlé du SDR (Software Defined Radio) pour suivre les avions ou écouter la radio avec votre RasPi… Le projet que décrit cet article vous permettra de visualiser une fréquence et ses environs. Il s’agit d’un analyseur de spectre à base de Raspberry Pi. Adafruit appelle ce projet un scanner…
Ne vous lancez pas dans cette réalisation si vous êtes débutant. Ce tutoriel ne détaille pas toutes les opérations et il vaut mieux avoir un peu d’expérience avec Debian…
Un analyseur de spectre avec un Raspberry Pi
C’est quoi un analyseur de spectre ?
Un analyseur de spectre est un instrument de mesure destiné à afficher les différentes fréquences contenues dans un signal ainsi que leurs amplitudes respectives. Les signaux peuvent être de natures diverses : électrique, optique, sonore, radioélectrique. (wikipedia)
Les analyseurs de spectre sont des appareils autonomes coûtant de quelques centaines à quelques milliers (glups !) d’euros. C’est pourtant un appareil très utile (sinon indispensable) quand on travaille dans le domaine des radiocommunications.
Le premier modèle proposé par Adafruit avait été réalisé sur une base de Raspberry Pi model B, il était tentant de profiter de la disponibilité du Raspberry Pi 2 avec ses 4 cœurs pour améliorer (peut-être) cette réalisation.
La problématique
- L’analyseur de spectre (scanner) a été initialement réalisé sur un RasPi model B sous Wheezy.
- Les réponses sur le forum Adafruit renvoient généralement les questionneurs dans leurs buts quand l’écran utilisé n’est pas celui pour lequel le « scanner » a été développé.
- Ça tombe bien (comme disait le père La Chaise) l’écran adapté au Pi2 est le modèle Adafruit 2441 (3,5 pouces PiTFT Plus) alors que le scanner a été réalisé avec le modèle 2097 (3,5 pouces PiTFT…). Donc s’il y a des problèmes… dém… toi
- Même si on n’est pas en présence d’un « vrai » appareil de mesure, les clés USB DVB-T que j’ai utilisées jusqu’alors présentent un certain nombre de défauts (on va pas chipoter pour un récepteur à 15€…)
Les choix
Après moult réflexion, lecture de docs (RTFM) et d’articles parus sur des blogs, étude des caractéristiques… il fallait se décider ! Voici donc les choix que j’ai arrêtés pour ce projet :
- Utiliser un Raspberry Pi 2 sous Jessie
- Utiliser un écran Adafruit PiTFT Plus 3,5 pouces (ref. 2441)
- Utiliser une clé DVB-T RTL-DSR de dernière génération (et un peu plus cher )
- Lancer l’analyseur automatiquement au démarrage du RasPi
- Rendre l’appareil autonome (par la suite)
Réalisation de l’analyseur logique / scanner
Choix et installation du système
Il y a deux possibilités :
- Soit on part d’un Jessie de base dans le noyau duquel on va intégrer les composants logiciels destinés à gérer un écran PiTFT de 3,5 pouces (le 2097 !) – à la mano ou en utilisant un script fourni.
- Soit on installe une distribution Jessie déjà préparée pour le PiTFT par Adafruit et disponible en téléchargement sur leur site. (en date du 24 sept. 2015)
Vous ferez bien comme vous voulez… Pour ma part la solution consistant à utiliser une distribution toute faite me convient particulièrement bien et c’est celle que je vous propose.
Téléchargez la version de Jessie préparée pour gérer l’écran PiTFT 3.5″. Téléchargez les 1,5 Go de cette version et rangez le fichier 2015-09-24-raspbian-jessie-pitft35r.zip dans un dossier de votre PC. Extrayez l’image contenue dans l’archive .zip : 2015-09-24-raspbian-jessie-pitft35r.img (4,2 Go).
Si vous êtes sous Windows, insérez votre carte micro SD dans le lecteur de carte. Repérez soigneusement la lettre identifiant votre carte, toute erreur effacera irrémédiablement les données à l’endroit où vous transférerez l’image !!!
Lancez Win32DiskImager (en tant qu’admin), choisissez la lettre de la carte micro SD de destination (voir ci-dessus) et démarrez l’écriture de l’image sur la carte…
A la fin de l’opération vous avez entre les mains une carte prête à être utilisée avec le Raspberry Pi 2 et l’écran PiTFT 3,5″.
Avant de mettre la carte en service et d’appliquer la tension d’alimentation, regardons les composants que nous allons utiliser.
Le Raspberry Pi 2
Bon, ici pas de surprise. c’est un Raspberry Pi 2 classique. Ne faites pas attention aux pattes tordues sur le GPIO (ah, zut, vous n’aviez pas remarqué ?) c’est arrivé en enlevant l’écran à la main, c’est parti d’un coup et d’un côté… La prochaine fois ce sera tournevis plat et démontage précautionneux
Remarquez l’adhésif sur le dessus des prises. L’écran n’a pas de contacts dans cette zone, sauf… 1 et c’est par précaution que j’ai appliqué cette protection. Pour le reste c’est un Raspberry Pi 2 tout ce qu’il y a de plus banal (processeur 4 cœurs 900MHz ARM Cortex-A7 CPU, 1 Go de RAM, 4 ports USB, un port Ethernet, sortie HDMI et audio/vidéo analogique…)
L’écran PiTFT Plus 3,5″
Livré tout monté et prêt à l’emploi, l’écran PiTFT Plus 3,5″ Adafruit est destiné aux modèles A+, B+ et Pi2 du fait de la présence d’un connecteur 40 points. Ce modèle 2441 utilise les même ports que son prédécesseur à 26 points (modèle 2097) : Le bus SPI (SCLK, MISO, MOSI) ainsi que les ports GPIO 25 et 24. C’est ce qui m’a fait espérer une compatibilité entre les deux modèles.
L’écran s’adapte parfaitement sur le Raspberry Pi 2. Il dispose de 4 « oreilles » qui permettront de le fixer (sur une façade d’appareil par exemple). Le Raspberry Pi est fermement maintenu uniquement par le connecteur 40 points.
Cet écran tactile de 3,5 pouces (ça fait presque 9 cm de diagonale) offre une résolution de 480×320 pixels avec une profondeur de couleur de 16 bits (65536 couleurs). Le dessus de l’écran comporte une couche résistive qui le rend sensible à la pression du doigt. On peut l’utiliser comme console, fenêtre graphique, affichage d’images ou de vidéo, etc. Sa qualité est suffisante pour assurer un usage normal.
Un connecteur (à droite sur la photo ci-dessus) donne accès aux ports du GPIO si c’est nécessaire. Les informations techniques (implantation et schéma) sont disponibles en ligne.
Avec le backplane à fond (éclairage à l’arrière de l’écran) la consommation est de 100 mA environ.
Récepteur RTL-SDR.com
Par rapport aux modèles existant sur le marché, ce nouveau modèle est amélioré ce qui explique un prix de vente (un peu) supérieur aux modèles qu’on trouve sur les sites d’enchère en ligne : 19.95$ pour le récepteur seul ou 24.95$ avec 2 antennes télescopiques. La plus petite va de 6 cm à 20 cm, et la plus grande va de 20 cm à 1,5 m. L’embase de l’antenne est également plus grande avec un diamètre de 4,5 cm, à comparer aux embases miniatures livrées avec la plupart des modèles. Cela permet une meilleure stabilité lors de l’utilisation de l’antenne la plus grande.
Ces deux antennes peuvent s’accorder sur presque toute la gamme de réception de la clé. Pour un bon fonctionnement, l’antenne sera placée à l’extérieur et aussi haut que possible pour obtenir le meilleur rendement. Coller l’embase magnétique sur une surface métallique peut également aider à améliorer le fonctionnement de l’antenne en lui fournissant un plan de masse. Lorsqu’elle est entièrement rentrée, la petite antenne fonctionne à 1090 MHz pour la réception des fréquences ADS-B.
Le récepteur a reçu les améliorations suivantes :
- Oscillateur compensé en température précision 1 ppm (TCXO) – La fréquence est précise et la dérive en fonction de la température pratiquement nulle (2 ppm de décalage initial, 1 ppm de dérive en température). L’oscillateur à quartz 28,8 MHz utilisée dans la plupart des clés DVB-T est peu précis. Cela signifie que lorsque vous voulez recevoir une fréquence connue, elle sera probablement décalée de quelques kHz. Habituellement, la compensation prévue sur les clés DBV-T est de l’ordre de 30 à 150 ppm. En outre, lorsque les composants se réchauffent, la fréquence va encore dériver jusqu’à 20 ppm ou plus, jusqu’à ce que la température se stabilise. Le TCXO est un oscillateur à compensation thermique qui offre un réglage précis avec un décalage initial de 2 ppm maxi et une dérive de température de 1 ppm au fil du temps. Cela signifie qu’un signal connu apparaîtra là où il doit être sur le spectre de fréquences et ne dérivera pas en fréquence de manière significative lorsque la clé se réchauffera.
- Prise d’antenne SMA femelle – La plupart des clés DVB-T utilisent un connecteur MCX ou PAL moins répandus. Le connecteur SMA utilisé ici est beaucoup plus commun et de nombreuses antennes ou adaptateurs sont disponibles dans ce format. Il a également une longévité plus grande et a des pertes d’insertion inférieures.
- Tuner R820T2 – Plus sensible / bruit plus faible que le tuner R820T plus. 100% compatible avec les logiciels écrits pour le R820T. Cette version améliore le fonctionnement aussi bien en HF qu’aux environs de 1,5 GHz.
- Amélioration des tolérances de tous les composants – Permet au dongle RTL-SDR de travailler beaucoup mieux sur toutes les fréquences.
- Expérimental : Alimentation USB 4.5V pour préampli – Peut être activée en reliant deux pastilles du circuit par une soudure. Cela permet au RTL-SDR d’alimenter un LNA (amplificateur à faible bruit)comme le LNA4ALL et HABAMP, ou des antennes actives via le câble coaxial.
- Expérimental : Possibilité d’utiliser l’échantillonnage direct – Deux pastilles à souder donnent accès aux broches 4 et 5 du circuit intégré RTL2832U pour permettre l’échantillonnage direct. L’accès direct à l’échantillonnage est une modification matérielle qui vous permet de syntoniser des fréquences HF avec un dongle RTL-SDR.
- Boîtier en aluminium et refroidissement passif – les modèles les plus récents sont montés dans un boîtier en aluminium. Ils bénéficient d’un refroidissement passif via un pad thermique…
Premier test
Comme toujours le test de chaque étape est important. Trop souvent on voit des messages (sur les blogs ou les forums) du style : « Ouais, tuto de m… je l’ai suivi et ça marche pas ! » Sauf qu’aucune des étapes intermédiaires n’a été testée… Alors si à la fin du tutoriel il y a un souci, c’est très difficile de déterminer d’où vient le problème.
Alors ici on va procéder calmement, par étape. D’abord mettez l’écran PiTFT en place sur le Raspberry Pi 2. La clé RTL-SDR peut encore attendre un peu… laissez la de côté pour le moment. Reliez le Raspberry Pi au réseau Ethernet, Insérez la carte microSD que vous avez préparée précédemment avec Win32DiskImager. L’heure est venue du premier test. Branchez l’alimentation micro USB sur le Raspberry Pi 2. L’écran doit s’illuminer (le backlight s’allume) puis le texte habituel défile.
Ensuite l’écran PiTFT s’éteint et après une attente (qui parait bien longue), l’écran affiche le bureau de Raspbian :
La première étape est franchie… testez le fonctionnement du menu. La liste des items est plus longue que l’écran. Une petite flèche en bas du menu permet de faire défiler le menu (j’ai du appuyer avec l’ongle pour la faire fonctionner…). Si vous avez du mal vous pouvez brancher une souris, elle fonctionne.
Le Raspian Wheezy installé est en anglais. Il va falloir le passer en français si vous voulez l’utiliser avec un clavier. Ici comme on a une utilisation dédiée, je l’ai laissé en anglais. Je me suis connecté en SSH avec Putty pour intervenir sur le système et finalement je suis passé par le bon vieux raspi-config pour passer en français
Voyons déjà quelle place il reste sur la partition créée par l’image d’Adafruit :
pi@raspberrypi ~ $ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 3.9G 3.2G 502M 87% / devtmpfs 459M 0 459M 0% /dev tmpfs 463M 0 463M 0% /dev/shm tmpfs 463M 6.4M 457M 2% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 463M 0 463M 0% /sys/fs/cgroup /dev/mmcblk0p1 56M 29M 28M 52% /boot tmpfs 93M 0 93M 0% /run/user/1000
500 Mo restant. Un peu juste mais pour le moment je ne touche à rien…
Blacklister les modules d’origine
Lorsqu’il détecte une clé TNT (DVB-T) Raspbian charge un module destiné à géré le matériel. Comme nous voulons gérer la clé DVB-T à notre façon, il faut empêcher le noyau de charger le(s) module(s) correspondant(s).
Ouvrez le fichier /etc/modprobe.d/raspi-blacklist.conf avec nano
sudo nano /etc/modprobe.d/raspi-blacklist.conf
et ajoutez lui les lignes suivantes :
blacklist dvb_usb_rtl28xxu blacklist dvb_usb_v2 blacklist rtl_2830 blacklist rtl_2832 blacklist rtl_2838 blacklist r820t
Ceci garantit que le dongle DVB-T sera bien géré par la bibliothèque qui nous intéresse.
Installer les dépendances
Avant d’installer le logiciel il va falloir installer quelques dépendances (bin oui quoi, on est sous Linux : ) ). Pour cette installation le Raspberry Pi doit impérativement pouvoir accéder à Internet.
Connectez-vous au Raspberry Pi et exécutez les commandes suivantes pour installer les dépendances :
sudo apt-get update sudo apt-get install cmake build-essential python-pip libusb-1.0-0-dev python-numpy git
Ne vous inquiétez pas si vous obtenez des messages indiquant que la dernière version est déjà installé et continuez. (Si ce sont d’autres messages trouvez ce qui cloche !)
Maintenant il va falloir télécharger, compiler et installer la librairie RTL-DSR d’osmocom :
cd ~ git clone git://git.osmocom.org/rtl-sdr.git cd rtl-sdr mkdir build cd build cmake ../ -DINSTALL_UDEV_RULES=ON -DDETACH_KERNEL_DRIVER=ON make sudo make install sudo ldconfig
Lorsque la librairie est en place, on peut installer le wraper Python qui va permettre de faire la liaison entre la librairie et les applications en Python.
sudo pip install pyrtlsdr
Tout est (presque) en place pour l’utilisation du programme freqshow.py.
Redémarrez le Raspberry Pi pour mettre tout ça proprement en place.
Test du dongle RTL-SDR
Allez le moment que vous attendiez est enfin arrivé ! Vous pouvez connecter la clé RTL-SDR sur un port USB, et l’antenne sur la prise SMA…
Vérifions déjà que la clé USB est bien reconnue :
pi@raspberrypi ~ $ lsusb Bus 001 Device 006: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Oui, le Device 006 est un RTL2838 DVB-T : impeccable !
Est-ce que ça fonctionne ?
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.
C’est rassurant la clé DVB-T est reconnue et le test fonctionne. Nous allons pouvoir installer le programme freqshow.py.
Le message PLL not locked! semble être habituel et ne pas perturber le fonctionnement des programmes … A priori cette info est affichée lorsqu’il n’y a pas d’émission sur la fréquence de réception. A vérifier.
Installation du programme analyseur de spectre / scanner
L’installation du logiciel est on ne peut plus simple, puisqu’elle consiste à télécharger le programme Pyton sur votre Raspberry Pi…
Lancez les commandes suivantes pour télécharger freqshow.py :
cd ~ git clone https://github.com/adafruit/FreqShow.git cd FreqShow
Respectez bien la casse (les majuscules et les minuscules) !
Et… c’est tout. Le programme est prêt à être utilisé ! On y va ?
Premier essai de l’analyseur de spectre
Vérifiez que vous travaillez bien dans le répertoire ~/FreqShow et lancez le programme :
pi@raspberrypi ~/FreqShow $ sudo python freqshow.py
Vous devriez voir apparaître l’écran d’accueil de freqshow :
et quelques instants après l’analyseur de spectre :
Cette image d’Adafruit montre le résultat sur l’écran PiTFT. En bas figurent les fréquences couvertes par l’affichage. A gauche les niveaux mini et maxi du signal. Par défaut le réglage est automatique. J’ai souvent été amené à modifier le niveau mini manuellement pour obtenir une courbe exploitable.
Utilisation de freqshow.py
La partie haute de l’écran est occupée par un menu. QUIT ferme le programme, SWITCH MODE passe l’affichage en mode waterfall (bleu = niveau mini / rouge = niveau maxi) :
CONFIG donne accès au menu de configuration (comme on s’en serait douté )
On peut régler la fréquence centrale, celle d’échantillonnage, le gain et les niveaux maxi et mini de l’affichage du signal.
Lorsqu’on veut saisir une valeur numérique, l’écran passe dans un mode de saisie numérique :
Par exemple ici vous pouvez modifier la fréquence centrale, en saisissant la valeur sur l’écran tactile. Appuyez sur la touche CLEAR pour effacer complètement la valeur actuelle de la fréquence centrale, et saisissez la nouvelle valeur en tapant sur les chiffres. Pour supprimer le dernier chiffre saisi appuyez sur DELETE.
Une fois que vous avez entré la nouvelle valeur vous pouvez appuyer sur ACCEPT pour changer la fréquence centrale. Si finalement vous ne voulez pas changer la fréquence appuyez sur CANCEL pour fermer la boîte de dialogue sans modifier la valeur.
Essayez de changer la fréquence centrale pour celle d’une station de radio FM de votre région. Appuyez sur BACK en bas à gauche de l’écran de configuration pour revenir à l’affichage graphique de fréquence. Vérifiez sur l’écran graphique que la fréquence centrale a été modifiée.
Depuis l’écran graphique, si vous tapez au centre de l’écran vous passez en mode Plein Écran comme ci-dessus. Tapez à nouveau vers le centre de l’écran pour revenir à l’affichage normal.
Démarrage automatique du programme
Le mieux serait qu’à la mise sous tension du Raspberry Pi, le programme freqshow.py soit lancé automatiquement. Pour un appareil dédié ça semble logique…
Comme nous sommes sous Jessie, il va falloir créer un lanceur qui va s’intégrer à systemd.
Création du script de lancement
Avec nano créez un script /home/pi/scanner.sh
Dans ce script ajoutez les lignes suivantes :
#!/bin/bash # Ci-dessous indiquez le script ou le programme Python que vous voulez lancer cd /home/pi/FreqShow sudo python freqshow.py
Rendez le script exécutable
sudo chmod +x /home/pi/scanner.sh
Testez le script pour vérifier son fonctionnement :
pi@raspberrypi ~ $ ./scanner.sh Found Rafael Micro R820T tuner [R82XX] PLL not locked!
Si tout va bien, vous devez voir apparaitre l’analyseur de spectre sur le Raspberry Pi. (vous pouvez interrompre le programme avec CTRL C ci vous êtes à distance avec Putty).
Création du fichier service
Il faut maintenant indiquer à systemd qu’il doit lancer le service :
Créez le fichier /lib/systemd/system/scanner.service avec nano :
sudo nano /lib/systemd/system/scanner.service
Ajoutez les lignes suivantes dans le fichier :
[Unit] Description=Analyseur de spectre After=multi-user.target [Service] Type=simple ExecStart=/home/pi/scanner.sh [Install] WantedBy=multi-user.target
Faites prendre en compte votre service par systemd :
pi@raspberrypi /etc/systemd/system $ sudo systemctl daemon-reload pi@raspberrypi /etc/systemd/system $ sudo systemctl enable scanner.service Created symlink from /etc/systemd/system/multi-user.target.wants/scanner.service to /lib/systemd/system/scanner.service.
Bon… Normalement on n’est pas loin du but
On se fait un test de démarrage ? Chiche !
sudo reboot
Et là…. Miracle de la technologie moderne, vous voyez le texte défiler sur l’écran, puis le bureau de Raspbian et enfin devant vos yeux emplis de larmes, l’analyseur de spectre se met en route !
Bon, si vous avez autant de chance que moi, la bande FM est muette autour de 90.3 MHz… Qu’à cela ne tienne, je vais changer la fréquence avec le menu Config… Euh… tiens, ça marche pas… Et Switch Mode ? pas plus que QUIT ! Damned, c’est quoi ce tuto de m…. Ils l’avaient pourtant bien dit que ça marchait juste avec le clavier 2097… Pourquoi t’a été prendre celui-là ? tsss
Trouver la panne
Ne vous en faites pas c’est comme ça très souvent… C’est ce qui apprend à être patient, à ne pas aller trop vite, à lire la doc, à faire des recherches…
Allez on commence. Pourquoi donc le clavier tactile serait-il inerte ?
Après quelques recherches d’abord en français, sans succès, puis en anglais (ça sert quand même la langue de Shakespeare) je me retrouve sur un document Adafruit (décidément !) :
Et tout à la fin du document cette phrase sybilline :
Et là un doute m’étreint (comme on dit à la SNCF) et si freqshow utilisait pygame ? Vite je regarde le début du programme avec un cat freqshow | less :
import os import time import pygame import controller import model import ui
Bingo ! Effectivement le programme utilise pygame
Donc le problème pourrait venir d’une incompatibilité d’humeur entre pygame et la librairie SDL utilisée.
Un ps pour trouver le PID de freqshow.py et me voici sur la liste des librairies utilisées :
pi@raspberrypi /proc/827 $ sudo cat maps | grep SDL 75900000-75920000 r-xp 00000000 b3:02 57546 /usr/lib/arm-linux-gnueabihf/libSDL_mixer-1.2.so.0.12.0 75920000-75927000 ---p 00020000 b3:02 57546 /usr/lib/arm-linux-gnueabihf/libSDL_mixer-1.2.so.0.12.0 75927000-75928000 r--p 0001f000 b3:02 57546 /usr/lib/arm-linux-gnueabihf/libSDL_mixer-1.2.so.0.12.0 75928000-75930000 rw-p 00020000 b3:02 57546 /usr/lib/arm-linux-gnueabihf/libSDL_mixer-1.2.so.0.12.0 75a61000-75a66000 r-xp 00000000 b3:02 57554 /usr/lib/arm-linux-gnueabihf/libSDL_ttf-2.0.so.0.10.1 75a66000-75a6d000 ---p 00005000 b3:02 57554 /usr/lib/arm-linux-gnueabihf/libSDL_ttf-2.0.so.0.10.1 75a6d000-75a6e000 rw-p 00004000 b3:02 57554 /usr/lib/arm-linux-gnueabihf/libSDL_ttf-2.0.so.0.10.1 75d2e000-75d39000 r-xp 00000000 b3:02 57532 /usr/lib/arm-linux-gnueabihf/libSDL_image-1.2.so.0.8.4 75d39000-75d40000 ---p 0000b000 b3:02 57532 /usr/lib/arm-linux-gnueabihf/libSDL_image-1.2.so.0.8.4 75d40000-75d41000 r--p 0000a000 b3:02 57532 /usr/lib/arm-linux-gnueabihf/libSDL_image-1.2.so.0.8.4 75d41000-75d42000 rw-p 0000b000 b3:02 57532 /usr/lib/arm-linux-gnueabihf/libSDL_image-1.2.so.0.8.4 76961000-769bd000 r-xp 00000000 b3:02 57514 /usr/lib/arm-linux-gnueabihf/libSDL-1.2.so.0.11.4 769bd000-769cd000 ---p 0005c000 b3:02 57514 /usr/lib/arm-linux-gnueabihf/libSDL-1.2.so.0.11.4 769cd000-769ce000 r--p 0005c000 b3:02 57514 /usr/lib/arm-linux-gnueabihf/libSDL-1.2.so.0.11.4 769ce000-769cf000 rw-p 0005d000 b3:02 57514 /usr/lib/arm-linux-gnueabihf/libSDL-1.2.so.0.11.4
Il y a bien du SDL là dedans. La solution est proposée dans le document d’Adafruit (merci Lady ADA) : Il faut réinstaller l’ancienne version de SDL, la 1.2. Comme elle se trouve sur le dépôt Wheezy il faut rajouter celui-ci à la sources.list. C’est ce que fait très bien le script inclus dans le pdf
Créez un fichier installsdl.sh dans /home/pi
Ajoutez y les lignes suivantes :
#!/bin/bash #enable wheezy package sources echo "deb http://archive.raspbian.org/raspbian wheezy main " > /etc/apt/sources.list.d/wheezy.list #set stable as default package source (currently jessie) echo "APT::Default-release \"stable\"; " > /etc/apt/apt.conf.d/10defaultRelease #set the priority for libsdl from wheezy higher then the jessie package echo "Package: libsdl1.2debian Pin: release n=jessie Pin-Priority: -10 Package: libsdl1.2debian Pin: release n=wheezy Pin-Priority: 900 " > /etc/apt/preferences.d/libsdl #install apt-get update apt-get -y --force-yes install libsdl1.2debian/wheezy
Rendez le script exécutable :
sudo chmod +x installsdl.sh
puis exécutez le :
sudo ./installsdl.sh
Après exécution du script votre écran devient sensible à la pression de vos doigts ! C’est pas beau ?
Changer la fréquence d’origine
Le démarrage de l’analyseur logique ne me convient pas trop. La fréquence de 90.3 MHz sur laquelle l’affichage est centré n’est pas occupée par un émetteur FM.
Pour montrer le fonctionnement du RTL-DSR, j’ai choisi de régler la fréquence centrale sur… RTL soit 105.5 MHz Mais il doit y avoir moyen de modifier ça dans le programme pour que l’analyseur se cale sur RTL à chaque démarrage, non ?
Quelques cat plus loin je trouve :
pi@raspberrypi ~/FreqShow $ cat model.py |less self.sdr = RtlSdr() self.set_center_freq(90.3) self.set_sample_rate(2.4) self.set_gain('AUTO')
C’est donc là que ça se tient ! Modifiez la fréquence de départ en fonction de ce que vous voulez avoir au démarrage. Après avoir modifié comme suit :
self.set_center_freq(105.5)
Le programme se lance avec la fréquence centrale choisie. Il y a certainement moyen de modifier d’autres informations au lancement (le gain, les mini et maxi…) mais bon, vous allez peut-être chercher un peu, non ?
Et la consommation ?
Si vous envisagez de réaliser un appareil autonome, il est important d’avoir une idée de la consommation pour dimensionner la batterie qui va alimenter l’ensemble RasPi + écran + clé TNT…
Avec l’analyseur en fonctionnement on est au dessus de 700 ma ! Quand même… Il faudra peut-être prévoir de jongler avec l’éclairage de l’écran (PWM prot GPIO 18) pour abaisser la consommation.
La vidéo
Conclusion
Pour une centaine d’euros vous avez à portée de main un analyseur de spectre. Sans être un vrai appareil de mesure, il pourra donner de précieuses indications à tous ceux qui gravitent autour des radiocommunications.
Le programme ne décode pas les signaux et ne sort donc pas le signal démodulé sur la prise HP du Raspberry Pi. Ce sera peut-être une évolution de cette application.
Le même matériel peut être utilisé avec gnu-radio. GNU Radio est une boîte à outils logicielle open-source qui fournit des blocs de traitement des signaux pour mettre en œuvre des radios logicielles (SDR). Il est largement utilisé dans les environnements amateur, universitaires et commerciaux pour mener à la fois des recherches sur les communications sans fil et sur les systèmes de radio réels. J’espère avoir l’occasion de vous le présenter dans un futur article.
Sources
- https://learn.adafruit.com/adafruit-pitft-3-dot-5-touch-screen-for-raspberry-pi
- https://learn.adafruit.com/adafruit-pitft-3-dot-5-touch-screen-for-raspberry-pi/easy-install
- https://learn.adafruit.com/freq-show-raspberry-pi-rtl-sdr-scanner/overview
- https://learn.adafruit.com/downloads/pdf/freq-show-raspberry-pi-rtl-sdr-scanner.pdf
- https://learn.adafruit.com/downloads/pdf/adafruit-pitft-3-dot-5-touch-screen-for-raspberry-pi.pdf
- http://www.rtl-sdr.com/new-products-rtl-sdr-with-1ppm-tcxo-sma-f-connector-r820t2-bias-tee-improved-tolerances-direct-sampling-break-out-pads-now-available-in-our-store/
- http://www.rtl-sdr.com/buy-rtl-sdr-dvb-t-dongles/
- https://www.adafruit.com/products/2097
- https://www.adafruit.com/products/2441
- https://gist.github.com/tstellanova/7323116
- https://www.libsdl.org/download-1.2.php