Suivi de vol précis à petit budget : Raspberry Pi Zero Wireless, SDR et FlightAware
Cet article vous montre deux façons d'utiliser un Raspberry Pi Zero Wireless pour suivre les vols dans votre zone. Il démontre aussi comment il peut contrôler une matrice RGB 64×64.
Le Raspberry Pi Zero Wireless est un micro-ordinateur à 10 $ capable de beaucoup de choses. Cet article vous montre deux façons d'utiliser ce Pi pour suivre les vols dans votre zone. Il démontre aussi comment il peut contrôler une matrice RGB 64×64 pour afficher les numéros de vol !
Dans cet article, je ferai trois projets distincts en utilisant le Raspberry Pi Zero Wireless. Dans le Projet 1, je créerai un dispositif de suivi d'avions avec PiAware. Dans le Projet 2, je collecterai des données depuis ces avions. Dans le Projet 3, je vous montrerai comment utiliser le RPi Zero W pour contrôler une matrice RGB 64×64.
Projet 1 : Suiveur d'avions Raspberry Pi Zero Wireless
| Pièce | Coût | Notes |
|---|---|---|
| Raspberry Pi Zero Wireless | 10 $ | |
| Récepteur SDR | 21 $ | De nombreux autres récepteurs SDR USB fonctionneront probablement |
| Carte microSD 4 Go | 6 $ | Des cartes plus grandes fonctionneront |
| Adaptateur USB vers MicroUSB | 5 $ | |
| Hub MicroUSB (optionnel) | 8 $ | Le Pi Zero n'a que des ports microUSB ; pour attacher des accessoires, vous avez besoin d'un hub/convertisseur |
| Antenne large bande (optionnel) | 50 $ | L'antenne doit couvrir 1090 MHz |
| Filtre passe-bande 1090 MHz (optionnel) | 20 $ |
Ressources
- Raspbian Jessie (Guide d'installation)
- Installation PiAware
Cette expérience a été réalisée en utilisant le Raspberry Pi Zero Wireless. Cependant, le code suivant devrait fonctionner sur toute version 2 ou ultérieure du Raspberry Pi. Si vous achetez un Pi Zero sans sans fil, vous pouvez l'ajouter avec une clé USB réseau sans fil.
Étape 1 : Préparer la carte SD
Téléchargez le dernier Raspbian Jessie sur votre ordinateur.
Écrivez l'image sur votre carte SD (voici des guides pour Linux, Mac OS et Windows).
Étape 2 : Modifier la carte SD
Créez un fichier nommé « ssh » dans le répertoire racine de la carte SD. Pas d'extension, pas de contenu. Ce fichier active SSH, ce qui vous permettra d'accéder au Pi à distance.
Créez un fichier nommé « wpa_supplicant.conf » avec le contenu suivant. Modifiez les valeurs pour YourWifiName et YourWifiPassword avec le nom et le mot de passe que vous utilisez pour vous connecter à votre réseau Wi-Fi.
network={ssid="YourWifiName"
psk="YourWifiPassword"
key_mgmt=WPA-PSK
}
Étape 3 : Installer et démarrer
Éjectez la carte SD de votre ordinateur et installez-la dans le Raspberry Pi Zero Wireless. Connectez le Raspberry Pi à une source d'alimentation en utilisant le port MicroUSB le plus proche du bord de la carte. Attendez environ une minute pour que le Raspberry Pi démarre et se connecte au Wi-Fi. Avec ces fichiers de configuration, il n'est pas nécessaire d'utiliser un clavier, une souris ou un écran avec votre dispositif.
Étape 4 : Localiser votre Pi
Identifiez l'adresse IP de votre Pi — cela peut être accompli en vous connectant à votre routeur et en regardant les appareils connectés, ou via un scanner IP tel que Look@Lan (Windows) ou nmap (Linux et Mac). Si votre dispositif n'apparaît pas dans les deux ou trois minutes, coupez l'alimentation, retirez la carte SD du Pi, et réinsérez-la dans votre ordinateur et revérifiez les fichiers ssh et wpa_supplicant.conf.
Étape 5 : Se connecter à votre Pi
Windows : Utilisez un outil comme Putty pour vous connecter à votre Pi. Téléchargez et lancez le programme, tapez l'adresse IP de votre Pi, et cliquez sur « connecter ». Une fenêtre apparaîtra qui vous demande à propos du certificat de sécurité — cliquez sur « oui ».
Linux et Mac : Ouvrez un terminal et tapez « ssh pi@raspberrypi.local » ou « ssh pi@ipaddress » (ex. : « ssh pi@192.168.0.52 »).
À l'invite, le nom d'utilisateur par défaut est « pi » et le mot de passe par défaut est « raspberry ».
Étape 6 : Configurer votre Pi
Tapez « sudo raspi-config » et appuyez sur entrée.
Changez votre mot de passe, fuseau horaire et localisation.
Quand l'invite de mot de passe apparaît, le mot de passe actuel est « raspberry » ; vous devriez le changer pour quelque chose de plus sécurisé pour le rendre au moins marginalement difficile à pirater. En passant, au lieu de mots de passe, vous devriez utiliser des certificats pour l'authentification, mais cela ne sera pas discuté dans cet article.
Puis tapez les commandes suivantes et laissez-les s'exécuter :
wget https://flightaware.com/adsb/piaware/files/packages/pool/piaware/p/piaware-support/piaware-repository_3.3.0_all.debsudo dpkg -i piaware-repository_3.3.0_all.deb
sudo apt-get update
sudo apt-get dist-upgrade -y
sudo apt-get install -y piaware fail2ban libio-socket-ssl-perl
sudo piaware-config allow-auto-updates yes
sudo piaware-config allow-manual-updates yes
sudo apt-get install dump1090-fa -y
sudo reboot
Après que le Raspberry Pi a terminé le processus de démarrage, ouvrez un navigateur web sur votre ordinateur et naviguez vers https://raspberrypi.local:8080 (ou remplacez raspberrypi.local par l'adresse IP de votre dispositif). Dézoomez puis zoomez sur votre position alors que les avions commencent à apparaître et puis disparaissent de votre écran.
Pour augmenter le nombre d'avions, emmenez votre Pi, SDR et système d'antenne à l'extérieur. D'autres améliorations sont trouvées en ajoutant le filtre passe-bande 1090 MHz et une meilleure antenne.

Capture d'écran du récepteur PiAware montrant une zone à l'est de Los Angeles, Californie, le 14/03/17 (Jour du Pi !). Les traces linéaires en haut montrent des avions prêts à atterrir à LAX. On voit aussi un avion gouvernemental volant en cercles.
ADS-B, PiAware et dump1090
Les transpondeurs fixés aux avions leur permettent de diffuser un identifiant octal à quatre chiffres (Mode-A AKA « Squawk ») plus l'altitude (Mode-C), un numéro ICAO unique de 24 bits (Mode-S), et le numéro ICAO de 24 bits avec informations additionnelles (Mode S Extended Squitter). Le dernier mode est aussi connu sous le nom d'ADS-B.
La Surveillance Automatique Dépendante par Diffusion (ADS-B) prend la position d'un avion (déterminée par GPS, GLONASS, etc.), la combine avec des informations d'identification, et la diffuse à 1090 MHz. Contrairement aux autres codes de transpondeur, qui ne sont transmis qu'en réponse à une interrogation par un signal radar, l'ADS-B est transmis environ deux fois par seconde.
PiAware et dump1090 utilisent un Radio Logiciel (SDR) accordé à 1090 MHz pour recevoir et décoder les diffusions de tous les avions dans les environs et les envoyer aux serveurs de FlightAware. L'information est affichée sur une page web hébergée sur le Raspberry Pi au port 8080.

Illustration par John Macneil, www.aopa.org.
Tous les avions doivent être équipés de transpondeurs ADS-B Out d'ici le 1er janvier 2020. Mais, jusqu'alors, FlightAware utilise la multilatération pour déterminer la position des avions qui ne diffusent pas leur latitude et longitude. La multilatération utilise la position connue d'au moins trois récepteurs et les temps de réception d'un message pour calculer la position d'un avion.
Projet 2 : Utiliser le Pi Zero Wireless pour collecter des données d'avions depuis FlightAware.com
FlightAware.com a deux Interfaces de Programmation d'Application (API) qui permettent l'extraction et l'utilisation de données : FlightXML et Firehose. Choisissez entre les deux basé sur le type d'information dont vous avez besoin et combien de requêtes vous avez besoin chaque mois. Pour ce projet, All About Circuits a obtenu un accès gratuit pour un mois. Pour suivre, vous devrez contacter FlightAware.com pour une clé API.
Ressources :
- Documentation Flight Aware Firehose
Étape 1 : Tester la connectivité
Connectez-vous à votre Pi Zero via SSH et testez la connectivité à l'API Firehose.
openssl s_client -host firehose.flightaware.com -port 1501 -tls1Si vous voyez une ou deux pages de détails de certification, tout a fonctionné correctement.
Étape 2 : Obtenir les fichiers et données d'exemple
FlightAware héberge des fichiers d'exemple sur GitHub. Commencez par télécharger et éditer les fichiers d'exemple avec votre nom d'utilisateur et clé API.
git clone https://github.com/flightaware/firehose_examples.gitcd firehose_examples/perl/example1
sudo nano example1.pl
Modifiez les champs username et apikey pour correspondre à vos informations, puis quittez ([Ctrl]+[x]) et sauvegardez.
perl example1.plVous devriez voir des données au format JavaScript Object Notation (JSON) :
$VAR1 = {
'aircrafttype' => 'B738',
'heading' => '105',
'pitr' => '1490038420',
'gs' => '334',
'clock' => '1490038413',
....
'hexid' => 'A44591',
'ident' => 'DAL751'
'alt' => '25100',
'lon' => '-117.38051',
'lat' => '33.53288'
};
Étape 3 : Configurer votre Pi pour collecter des données
Firehose est à juste titre nommé en ce qu'il peut produire une quantité écrasante de données en très peu de temps (~1 Go/jour) — remplissant votre disque et augmentant les frais de votre compte. Donc quand vous créez un script pour rassembler de l'information, vous devriez le vérifier à intervalles réguliers car vous pourriez très rapidement remplir votre disque et vider votre compte de dépenses.
Selon la taille de votre carte MicroSD et ce que vous espérez collecter, vous pourriez avoir besoin d'ajouter du stockage additionnel ou de revenir à raspi-config et d'étendre votre système de fichiers (option 7, option A1).
Pour mon exemple, je vais collecter des données pour une zone géographique de 2° × 2° qui inclut LGB, LAX, ONT, SNA, etc. (34° N ± 1°, 118° W ± 1°). J'ai choisi cette région car elle approxime ma zone de réception.

La zone d'intérêt va de 33° N à 35° N et 117° W à 119° W.
Le code suivant est example1.pl, avec modifications aux lignes 18 et 45. Toutes les lignes sont montrées ci-dessous pour que les lecteurs puissent suivre sans avoir à télécharger le fichier. Créez une copie de example1.pl appelée position.pl et utilisez nano pour éditer position.pl.
cp example1.pl position.plsudo nano position.pl
1 #!/usr/local/bin/perl
2
3 use strict;
4 use IO::Socket::SSL;
5 use JSON::PP;
6 use IO::Uncompress::Inflate qw($InflateError);
7 use Data::Dumper;
8
9 my $username = 'allaboutcircuits';
10 my $apikey = 'allaboutcircuitsreallylongapikey';
11 my $compression = 0;
12
13 # Ouvrir la connexion socket TLS vers FlightAware.
14 my $sock = IO::Socket::SSL->new('firehose.flightaware.com:1501') or die $!;
15 # print "Connected!\n";
16
17 # Envoyer la commande d'initiation au socket non compressé.
18 my $initcmd = "live version 8.0 user $username password $apikey events \"position\" latlong \"33 -117 35 -119\"";
19 if ($compression) {
20 $initcmd .= " compression compress";
21 }
22 binmode $sock;
23 print $sock "$initcmd\n";
24
25 # Activer la compression, si demandée.
26 my $zsock;
27 if ($compression) {
28 $zsock = new IO::Uncompress::Inflate $sock
29 or die "IO::Uncompress::Inflate failed: $InflateError\n";
30 } else {
31 $zsock = $sock;
32 }
33
34 # Boucle principale, lecture lignes JSON du serveur.
35 my $i = 1;
36 while (my $line = $zsock->getline()) {
37 #print "LINE $i\n";
38 #print "LINE $i: ", $line, "\n";
39
40 my $data = eval { decode_json $line };
41 die "Failed to decode JSON: $line" if !defined($data) || $@;
42
43 print $data->{ident}." \t".$data->{lat}." \t " . $data->{lon} . " \t". $data->{alt}." \n";
44
45 last if ($i++ >= 10);
46 }
47 close $sock;
48
49 # print "All done.\n";
La ligne 18 limite la requête aux avions dans la région géographique entre 117° W et 119° W (dénotés par -117 et -119). La ligne 43 est modifiée pour démontrer une méthode pour cibler juste les champs d'intérêt. Dans ce cas, nous ciblerons le numéro de vol, la latitude, la longitude et l'altitude d'un avion. La ligne 45 demande 10 avions du serveur (cette ligne peut être commentée dans un script final).
Les deux commandes suivantes exécutent le programme et vous permettent de surveiller la progression du programme :
sudo perl position.pl >> position.txt &tail -f position.txt
La première ligne a le superutilisateur utiliser le programme perl pour exécuter le programme position.pl et ajouter (>>) la sortie au fichier position.txt et le symbole & cause le programme à s'exécuter en arrière-plan.
La seconde ligne utilise le programme tail pour suivre (-f) les changements au fichier position.txt, ce qui vous permet de surveiller la commande pour achèvement. Quand fini, utilisez [Ctrl]+[c] pour quitter tail. Si vous n'êtes plus intéressé par la collecte de données, utilisez fg pour amener le programme position.pl au premier plan et l'arrêter ou l'interrompre avec [Ctrl]+[c].
Le fichier .zip ci-dessous contient les programmes modifiés et la sortie qui démontrent espérons comment de légers changements dans la syntaxe peuvent amener différentes informations au point, avec des exemples de sortie des programmes.
- arrivals.pl donne une sortie JSON pour les avions qui viennent d'atterrir (soit arrivant soit partant de LAX)
- test_landing.pl donne une sortie lisible (ex. : AAL1155 atterri le 03/21/2017 22:00:01)
- position.pl donne une sortie JSON pour tous les avions dans le rectangle géographique (34° N ± 1°, 118° W ± 1°)
- test_overhead.pl donne identification de vol, latitude, longitude et altitude (N721PP 34.36011 -118.37837 18100)
Ces fichiers ont été faits avec des modifications mineures au example1.pl fourni par FlightAware. Pour faire le vôtre qui capture seulement les données qui vous intéressent, utilisez la documentation FlightAware Firehose API pour demander l'information appropriée en format JSON, et puis utilisez la syntaxe correcte à l'intérieur du fichier pour ne sortir que l'information dont vous avez besoin.
Projet 3 : Utiliser le Pi Zero Wireless pour contrôler une matrice RGB 64×64
| Pièce | Coût | Notes |
|---|---|---|
| (2) 2× 32×32 matrice d'affichage RGB + alimentation | 75 $ (150 $) | Nécessite quatre matrices 32×32 RGB au total pour créer un affichage 64×64 pixels |
| Adafruit RGB matrix HAT + horloge RTC | 25 $ | Fiches techniques |
| Câble IDC 20 broches (Hub75) | 7-13 $ | La longueur requise dépend de la configuration des panneaux et de la distance au Pi |
| En-têtes mâles 0,1" (40 broches, 2×20) | 1 $ | 2,54 mm |
Étape 1 : Préparation du HAT matrice Adafruit
Soudez les en-têtes mâles et femelles sur le HAT Adafruit selon les instructions sur Adafruit.com. Puis soudez un fil ou attachez un cavalier entre les broches 4 et 18. Pour ce projet, vous n'avez pas besoin d'attacher ni la prise jack DC ni les connecteurs à vis.
Étape 2 : Préparation du Raspberry Pi
Soudez les en-têtes mâles 2×20 en place.
Étape 3 : Préparation de la matrice RGB
Orientez les matrices RGB pour que les flèches sur la rangée du bas pointent vers le bas et les flèches sur la rangée du haut pointent vers le haut (voir image ici). Utilisez un câble IDC 2×10 pour connecter la sortie du HAT Adafruit à l'entrée du premier panneau. Puis connectez la sortie du premier panneau à l'entrée du second, la sortie du second à l'entrée du troisième, etc.

L'arrière du panneau de matrice RGB. Le signal voyage de panneau en panneau en forme de « C ».
Si vous avez la chance d'avoir une découpeuse laser ou une machine CNC à votre disposition, j'ai inclus les dessins pour une plaque arrière qui peut tenir les quatre plaques de matrice RGB utilisées. Les trous de montage sont remplacés par des fentes pour permettre l'alignement depuis un point central commun.

Modèle pour monter quatre panneaux 32×32 pour faire un grand panneau 64×64 ; Diverses dispositions de panneaux sont possibles.
Hughes_4x4RGBMatrix.zip
Documentation complète et Code Source par Hennen Zeller.
Une fois toutes les connexions électriques faites, alimentez le Raspberry Pi. Après environ une minute, essayez de vous connecter au Pi avec Putty ou SSH.
Une fois connecté, tapez ce qui suit pour désactiver le son sur le Pi (la documentation indique un conflit de sous-système matériel avec le son et le matériel de matrice RGB).
cat << EOF | sudo tee /etc/modprobe.d/blacklist-rgb-matrix.confblacklist snd_bcm2835
EOF
sudo update-initramfs -u
Puis utilisez apt-get pour installer Python et les fichiers d'imagerie.
sudo apt-get install -y build-essential libconfig++-dev python-dev python-imaging libgraphicsmagick++-dev libio-socket-ssl-perlObtenez les fichiers nécessaires pour faire tourner la matrice RGB et compilez-les.
git clone https://github.com/hzeller/rpi-rgb-led-matrixcd rpi-rgb-led-matrix
HARDWARE_DESC=adafruit-hat-pwm make -C examples-api-use
sudo examples-api-use/demo -L -D0
cd utils/
HARDWARE_DESC=adafruit-hat-pwm make
Optionnellement, si vous avez aussi une caméra connectée à votre Pi, vous pouvez capturer une image 64×64 pixels et l'envoyer à l'affichage.
raspistill -w 64 -h 64 -o myimg.pngsudo ./led-image-viewer -L -f myimg.png
Les deux lignes précédentes capturent une image 64×64 vers l'affichage et utilisent le programme led-image-viewer (compilé dans la section précédente) pour l'afficher sur le Grand affichage (-L) pour toujours (-f).
Et ensuite ?
Vous avez maintenant un ordinateur à 10 $ qui peut suivre (soit avec une antenne et un récepteur SDR, soit avec un appel API) les avions autour de vous et afficher toute information sur ceux-ci que vous voulez sur votre affichage 64 pixels par 64 pixels, ou sur la sortie HDMI du Raspberry Pi Zero W.
Ce que vous en faites est limité seulement par votre imagination.
Puisque cet article n'introduit que les outils, la première étape que je recommande est de lire la documentation pour l'affichage et FlightAware et puis d'ouvrir les programmes d'exemple des deux pour mieux comprendre leurs capacités.
Et n'oubliez pas que votre Raspberry Pi Zero est une installation Linux fonctionnelle complète avec des commandes souvent utilisées telles que Cron, Grep, et Awk. Tout ce qui n'est pas déjà sur votre Pi est à juste un court apt-get install de distance.
Regardez la vidéo ci-dessous pour voir l'aboutissement de ces projets !
Essayez ce projet vous-même ! Obtenez la nomenclature.
Équipement industriel
- Pixus Technologies : Radios Logicielles Ruggedized de Pointe pour Environnements Mission-Critiques
- Connecter plusieurs capteurs DS18B20 1-Wire à un Raspberry Pi pour une surveillance température précise
- Surveiller efficacement les températures de salle avec Raspberry Pi et Nagios
- Centre Énergie Domestique : Surveillance panneaux solaires PV, thermiques et températures pièces avec Raspberry Pi et Moteino
- Construire un contrôleur domotique 433 MHz avec Sensorflare et Raspberry Pi
- Lecture de capteurs analogiques avec Raspberry Pi et Zabbix : Guide étape par étape
- Réaliser votre premier projet IoT avec Raspberry Pi, DHT11 et ThingSpeak
- Construire un système aéroponique automatisé avec Raspberry Pi et capteur d'humidité
- Construire une passerelle LoRa avec le module RAK831 sur Raspberry Pi 3 – Guide pas à pas