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…
[stextbox id=’warning’ caption=’Attention’]Ce tutoriel ne fonctionne qu’avec un Raspberry Pi 2. Pour le Pi3 voir en fin d’article ![/stextbox]
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…
Au sommaire :
- 1 Un analyseur de spectre avec un Raspberry Pi
- 2 Réalisation de l’analyseur logique / scanner
- 2.1 Choix et installation du système
- 2.2 Le Raspberry Pi 2
- 2.3 L’écran PiTFT Plus 3,5″
- 2.4 Récepteur RTL-SDR.com
- 2.5 Premier test
- 2.6 Blacklister les modules d’origine
- 2.7 Installer les dépendances
- 2.8 Test du dongle RTL-SDR
- 2.9 Installation du programme analyseur de spectre / scanner
- 2.10 Premier essai de l’analyseur de spectre
- 2.11 Utilisation de freqshow.py
- 2.12 Démarrage automatique du programme
- 2.13 Trouver la panne
- 2.14 Changer la fréquence d’origine
- 3 Et la consommation ?
- 4 La vidéo
- 5 Pour le Raspberry Pi 3
- 6 Conclusion
- 7 Sources
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 :
1 2 3 4 5 6 7 8 9 10 |
[code lang="bash"]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[/code] |
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
1 |
[code lang="bash"] sudo nano /etc/modprobe.d/raspi-blacklist.conf[/code] |
et ajoutez lui les lignes suivantes :
1 2 3 4 5 6 |
[code lang="bash"]blacklist dvb_usb_rtl28xxu blacklist dvb_usb_v2 blacklist rtl_2830 blacklist rtl_2832 blacklist rtl_2838 blacklist r820t[/code] |
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 :
1 2 |
[code lang="bash"]sudo apt-get update sudo apt-get install cmake build-essential python-pip libusb-1.0-0-dev python-numpy git[/code] |
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 :
1 2 3 4 5 6 7 8 9 |
[code lang="bash"]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[/code] |
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.
1 2 3 |
[code lang="bash"] sudo pip install pyrtlsdr [/code] |
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 :
1 2 3 |
[code lang="bash"]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[/code] |
Oui, le Device 006 est un RTL2838 DVB-T : impeccable !
Est-ce que ça fonctionne ?
1 2 3 4 5 6 7 8 9 |
[code lang="bash"]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.[/code] |
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 :
1 2 3 |
[code lang="bash"]cd ~ git clone https://github.com/adafruit/FreqShow.git cd FreqShow[/code] |
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 :
1 |
[code lang="bash"]pi@raspberrypi ~/FreqShow $ sudo python freqshow.py[/code] |
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 :
1 2 3 4 5 |
[code lang="bash"]#!/bin/bash # Ci-dessous indiquez le script ou le programme Python que vous voulez lancer cd /home/pi/FreqShow sudo python freqshow.py[/code] |
Rendez le script exécutable
1 |
[code lang="bash"]sudo chmod +x /home/pi/scanner.sh[/code] |
Testez le script pour vérifier son fonctionnement :
1 2 3 4 |
[code lang="bash"]pi@raspberrypi ~ $ ./scanner.sh Found Rafael Micro R820T tuner [R82XX] PLL not locked! [/code] |
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 :
1 |
[code lang="bash"]sudo nano /lib/systemd/system/scanner.service[/code] |
Ajoutez les lignes suivantes dans le fichier :
1 2 3 4 5 6 7 8 9 10 11 |
[code lang="bash"][Unit] Description=Analyseur de spectre After=multi-user.target [Service] Type=simple ExecStart=/home/pi/scanner.sh [Install] WantedBy=multi-user.target [/code] |
Faites prendre en compte votre service par systemd :
1 2 3 4 |
[code lang="bash"]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.[/code] |
Bon… Normalement on n’est pas loin du but 🙂
On se fait un test de démarrage ? Chiche !
1 |
[code lang="bash"]sudo reboot[/code] |
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 :
1 2 3 4 5 6 7 8 |
[code lang="bash"]import os import time import pygame import controller import model import ui[/code] |
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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[code]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[/code] |
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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
[code lang="bash"]#!/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[/code] |
Rendez le script exécutable :
1 |
[code lang="bash"]sudo chmod +x installsdl.sh[/code] |
puis exécutez le :
1 |
[code lang="bash"]sudo ./installsdl.sh[/code] |
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 :
1 2 3 4 5 |
[code lang="bash"]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')[/code] |
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 :
1 |
[code lang="bash"]self.set_center_freq(105.5)[/code] |
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
Pour le Raspberry Pi 3
Mi 2018, Robert (merci F1TZU) a souhaité réaliser cet analyseur de spectre et a rencontré quelques soucis avec le Pi3. Il a donc cherché et trouvé une solution qu’il m’a gentiment communiquée :
Bonjour François,
J’ai télécharger l’image et pu décompacter sans problème.
Le hic, cette image ne fonctionne plus sur Pi 3 B que j’utilise. Pas de boot.
Du coup sur le site Adafruit, j’ai trouvé la solution, merci Lady Ada:
1. Télécharger la version Raspbian du 14 mars 2018. (Install Raspbian on an SD Card)
2. Télécharger le script qui va permettre de configurer le Pi pour l’écran. (Installer script)
3. Suivre le tuto à la lettre, ça fonctionne. On peut même choisir le mode de fonctionnement de l’écran.
Note: En bas de cette page, on retrouve toutes les images intégrant l’utilisation des différents écrans Adafruit jusqu’en septembre 2016.
Une fois le Pi configuré, j’ai suivi ton tuto à la lettre sauf installsdl.sh dont j’ai modifié une ligne:
echo « Package: libsdl1.2debian
Pin: release n=stretch
Pin-Priority: -10
Package: libsdl1.2debian
Pin: release n=wheezy
Pin-Priority: 900
Si l’on fait ensuite sudo apt-get update puis sudo apt-get upgrade comme moi, il faudra relancer
le script installsdl.sh pour prendre à nouveau en compte libsdl1.2
Je me suit interessé également à Gqrx et ai trouvé ceci:
Bon la fenêtre Gqrx obtenue est un peu tronquée le spectre audio surtout mais le reste fonctionne. Là un stylet ou une souris s’impose.
Attention tout fois à équiper CPU, GPU etc de radiateurs et même un petit ventilo s’impose.
Ceinture et bretelles, comme dirait Pierre F5XG.
Sinon, au bout de quelques minutes, un petit thermomètre rouge apparait à l’écran (Overheat).
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
Bonjour François,
Merci pour ce super article très bien documenté, comme d’habitude.
Coté écran et boîtier, as-tu un avis sur cette solution tout en un proposée par Tontec ?
http://www.amazon.fr/dp/B013W3NK26
Keep the good work ! 🙂
Bonsoir Isnogoud
il me semble fait pour un écran Tontec qui n’a pas d’oreilles de fixation comme celui d’Adafruit…
et l’écran Tontec ce n’est pas garanti qu’il fonctionne ici…
bonne journée
cordialement
François
Bonjour,
Nouveau dans le monde du raspberry, je suis tombé sur votre site super intéressant qui m’a appris beaucoup de choses.
Petite question suite à ce tuto , est il possible de réaliser quelque chose de similaire pour aider à pointer les satellites ?
Eric
Bonjour Eric
à tester
un LNB sort entre 950 et 2150 Mhz
1- voir si la clé TNT couvre cette plage
2- alimenter le LNB avec un système adapté
mais sur le bas de la gamme c’est certainement possible
cordialement
François
Bonjour
J’ai un gros doute sur la faisabilité pour les stellites TV.
Un transpondeur occupe une bande passante de plusieures dizaines de Mhz. En analogique, 1 transpondeur = 1 programme TV (plus des canaux son).
En numérique, quasi généralisé, un transpondeur est occupé par un multiplex qui groupe plusieurs chaînes.
Cette bande passante me semble être un obstacle sérieux au traitement numérique pour afficher le spectre ou le waterfall (typique des SDR).
En effet, le traitement est effectué par la carte son et une valeur typique de la bande passante traitée est de 2 Mhz (il y a des cartes son de
compétition qui dépasse cette valeur). Ceci semble d’ailleurs confirmé par les captures d’écran qui illustrent l’article.
de toute manière, il faut alimenter le LNB et le montage le plus pratique est d’utiliser le récepteur satellite dont on dispose, surtout que ce
ux-ci sont équipés d’un S-mètre bien pratique pour peaufiner le calage. L’avantage manifeste du Raspberry est sa petite taille pour l’emporter sur le toit. Comme dit François, il faut tester (en faisant attention de ne pas détruire le dongle RTL-SDR en ramenat la tension d’alimentation
du LNB dessus).
Cordiales salutations – Sylvain
bonsoir Sylvain
je n avais pas pensé à cet aspect d’occupation de bande des chaines sat.
effectivement les 2.4 MHz permis par la clé DVB-T risquent d’être un peu « short »
73’s
François
Bonjour
une petite question : pour rendre l’écran tactile, je suis votre procédure, qui me donne cette erreur , u lancement du script :
E: La valeur « stable » n’est pas valable pour APT::Default-Release car cette version ne fait pas partie des sources disponibles.
Normal ? que dois je faire ?
en tout cas, merci pour ce bel article détaillé , c’est complet et pédagogique
Bien à vous
Régis P
Bonjour Regis
je ne sais pas trop
ça a fonctionné du premier coup sur 2 cartes SD différentes…
…?
il n y a pas eu d’autre message d’erreur ?
vous êtes bien connecté à Internet ?
Bonjour François,
Réponse rédigée sous VI ;-))
Très bon article (as usual).
Comme vous le signalez fort honnêtement, il s’agit plus d’un récepteur panoramique que d’un instrument de mesure (on ne peut que rêver devant l
a capture d’écran d’un Agilent).
Comme tel, il peut permettre de vérifier le fonctionnement d’une télécommande, de veiller une bande de fréquence ..
On attend donc la suite logique qui est la démodulation du signal; Comment se comporte la Framboise aux 4 coeurs ? reste-t-il du CPU disponiblepour faire tourner les blocs de traitement de GNU-radio ?
Nota: Je suis tout de même surpris par la forte dépendance à un type d’afficheur, ça va certainement limiter la portabilité.
Cordiales 73 – Sylvain de F1MYZ.
bonjour Sylvain
ok pour Vi 🙂
comme je n ai pas pu tester d’autre écran j en suis resté à ce que j’ai trouvé sur les forums Adafruit
mais c’est sur qu ils vont pas dire que ça marche avec les concurrents
je verifierai pour l occupation CPU
pour info le Raspi tourne depusi 3 jours non stop en affichant la frequence d’RTL…
73’s
François
Ping : Réalisez un analyseur de spectre avec le...
Ping : Réalisez un analyseur de spectre avec le...
Ping : Réalisez un analyseur de spectre avec le Raspberry Pi 2 – Radioamateur France
Faites prendre en compte votre service par systemd :
Ca ne marche pas chez moi ?
Bonjour
Probleme avec Freqshow.py
Il Y a t’il une version pour fonctionner avec la sourie ?
Je hub usb est ok.
Sinon je il fonctionne mais je ne peut riens en faire et ni l’arreter!
J’ai essayé d’installer Gqrx mais pas moyen de le faire fonctionner!
il ya des tutos mais pas trouvé ce qui convient.
Merci
Michel
Bonjour Michel
freqshow est fait pour travailler avec l’écran tactile.(c’est normal Adafruit les vend)
A ma connaissance il n’existe rien avec la souris.
désolé
73’s
François / F1GYT
https://www.framboise314.fr
Bonjour
J’ai modifié la config et passé de « false » à « true »
Ca marche!
merci
merci pour le retour Michel
73’s
François / f1gyt
onjour
Une précision, pour que le scanner utilise la sourie :
Dans: /freqshow/freqshow.py à la ligne pygame,mouse,set_visible (False)
remplacer (False) par (True)
Dommage qu’il n’y a pas de sons !
Bonjour,
Tout d’abord merci pour ce tuto très bien expliqué et documenté.
Vivant dans un petit village du centre de la France, je souhaiterai savoir si cette analyseur peut observer les fréquences GSM pour ainsi connaitre le meilleur opérateur téléphonique (ras le bol de la mauvaise réception).
Je vous remercie par avance.
Cordialement Jérémy
Bonjour Jérémy
il ne fait qu’afficher les signaux qu’il reçoit… en plus ce n’est pas un appareil de mesure, les fréquence ne sont pas hyper précises….
comment comptez vous identifier les différents fournisseurs ?
cordialement
François
Bonjour François,
Effectivement, ce n’est pas un appareil de mesure mais les fréquences des fournisseurs sont données sur un site en relation avec l’ARCEP. Je me dis donc que si on peut observer des pics de fréquences dans des zones spécifiques (pour SFR entre 904.90 et 914.90 MHz en upload par exemple), je saurai le meilleur fournisseur en fonction de la puissance du signal la plus importante dans une plage donnée.
CDL Jérémy
Pour les fréquences le liens ci-dessous :
http://www.lowcostmobile.com/actualite/1495-lots-frequences-operateur-technologie-gsm-umts-lte
re-bonjour
je n’ai pas essayé à ces fréquences, mais ça fonctionne certainement
merci pour le lien
cordialement
François
Bonjour François,
j’ai un problème au niveau de l’écran tactile une fois le programme de l’analyseur lancé et je souhaiterais savoir s’il y’a un moyen de le calibrer.
Je n’ai cependant aucun soucis lorsque je suis sur l’écran de base de raspbian.
Merci pour la réponse que vous pourrez me donner.
Cordialement
Bonjour
vous avez installé la version de Jessie mentionnée dans l’article ?
je n’ai pas eu de souci de calibration en suivant cette procédure.
Adafruit donne une procédure de calibration pour l’écran 3.5″
https://learn.adafruit.com/adafruit-pitft-3-dot-5-touch-screen-for-raspberry-pi/detailed-calibration
mais je ne sais pas si elle s’applique avec le système installé
cordialement
François
Ping : Une interface web pour un émetteur FM avec le Raspberry Pi | Framboise 314, le Raspberry Pi à la sauce française….
Ping : Une interface web pour un émetteur FM avec Raspberry Pi | Radioamateur France
Bonjour, je suis un habitué de ce superbe site internet et j’ai mis l’os sur la carte mais le tactile de l’écran ne fonctionne pas et ayant un serveur NAS et cloud dessus je n’aimerais pas reformater la carte.
Merci
Cordialement
Bonjour,
Bravo pour votre remarquable tutoriel !
Mais comment faire tourner l’analyseur de spectre sans Utiliser un écran Adafruit PiTFT Plus 3,5 pouces (ref. 2441) ?
J’utilise mon raspberry pi2 à distance avec un dongle WIFI et je le pilote avec mon PC Wndows sous tightVNC.
Peut-on renvoyer les signaux sur l’écran du PC déporté, (en fait sur l’interface windows du Raspi que je récupère avec VNC) ?
Par ailleurs impossible d’installer Gqrx (2050 Illegal instruction gqrx $1 $2) qui aurait pu remplacer .
Merci d’avance pour vos conseils toujours éclairants
Bernard
Bonjour Bernard
de mémoire car ça date d’un an, je pense que le programme attaque directement le framebuffer
je ne pense pas qu’on puisse facilement envoyer les images sur un PC
pour GQRX difficile de savoir d’où ça vient
j’allais vous conseiller de poser la question sur … https://groups.google.com/forum/#!topic/gqrx/pP3nwiy_wxQ
mais c’est déjà fait
ici il a tourné sans problème sur Pi 3 avec un RTL-SDR
cordialement
François
Bonjour François,
J’ai pour ambition de réaliser un récepteur décamétrique (ayant été OM) utilisant des technologies récentes ( la partie HF ne me pose pas de pb,c’était mon métier). Je ne sais si j’irais au bout du projet mais je cherche des idées coté gestion des commandes et affichage plus performant que qu’un LCD déja utilisé. Donc j’ai le sentiment que Raspberry pourrait être une solution intéressante vis à vis de mes ambitions. Mais je ne connais strictement rien dans ce domaine! Mes recherches m’ont amenées sur votre sîte qui me parait très clair et à la portée d’un débutant dans le domaine.
Mon idée serai déjà de réaliser votre analyseur pour me « faire la main ». Mes questions seraient les suivantes.
– peut on utiliser aujourd’hui Raspberry Pi 3 au lieu du Raspberry Pi 2, compatibilité avec l’afficheur?
– peut on faire lire un (des) potentiomètres incrémentaux?
– Y a t’il des entrées analogiques (potentiomètres)?
-sorties analogiques?
-Sinon peut on discuter avec un PIC par exemple?
Beaucoup de questoins merci par avance
Bonjour Jacques
Il n’y a pas de problème pour remplacer le Pi 2 par un Pi 3. LEs 2 sont compatibles.
Si vous entendez par « potentiomètres incrémentaux » un « codeur incrémental » c’est faisable
https://www.modmypi.com/blog/how-to-use-a-rotary-encoder-with-the-raspberry-pi
Non pas d’entrées analogiques juste de entrées / sorties en 3,3v
attention sous 5v ça crame !
et oui on peut dialoguer avec un pic ou autre
vous avez des bus I2C, SPI mais aussi un port série …
cordialement
François
super tuto tres detaillé du super boulot !
tout c’est tres bien deroulé jusqu’au lancement de freqshow avec la commande sudo python freqshow.py
j’ai comme reponse :
Traceback (most recent call last):
File « freqshow.py », line 89, in
pygame.display.init()
pygame.error: Unable to open mouse
que faire ? merci de votre aide.
Bonjour
Apparemment un souci avec pygame
Les versions ont evolue depuis cet article
Essayez avec la version existante lors de l ecriture de l article
Cordialement
Francois
c’est bon ! il faut cibler le bon ecran dans freqshow.py en changeant par SDL_MOUSEDEV’ , ‘/dev/input/mouse0’
freqshow se lance, ca c’est fait ! mais je n’arrive pas a recuperer le tactile (surrement le meme probleme mais ailleur)
pour info l’ecran piTFT est difficile a trouver sur le net donc jutilise un ecran quimat 3.5″ qui fonctionne bien mais les drivers différes un peu.
Bonjour,
Merci pour ce tuto très bien documenté.
Mon problème se situe au niveau de l’archive à télécharger, 2015-09-24-raspbian-jessie-pitft35r.
J’ai bien suivi le lien mais au décompactage un message apparait me disant que le zip est corrompu.
Si vous possédé encore le zip ou l’image .img pourriez vous me la transmettre ?
Cordialement
Robert F1TZU