Günstiges Flugtracking: Raspberry Pi Zero Wireless, SDR und FlightAware
Dieser Artikel zeigt Ihnen zwei Wege, einen Raspberry Pi Zero Wireless zu nutzen, um Flüge in Ihrer Gegend zu tracken. Er demonstriert auch, wie er eine 64×64 RGB Matrix steuern kann.
Der Raspberry Pi Zero Wireless ist ein $10 Mikrocomputer, fähig zu vielen Dingen. Dieser Artikel zeigt Ihnen zwei Wege, diesen Pi zu nutzen, um Flüge in Ihrer Area zu tracken. Er demonstriert auch, wie er eine 64×64 RGB Matrix steuern kann, um Flugnummern anzuzeigen!
In diesem Artikel mache ich drei separate Projekte mit dem Raspberry Pi Zero Wireless. In Projekt 1 erstelle ich ein Plane-Tracking Device usando PiAware. In Projekt 2 sammle ich Daten von besagten Planes. In Projekt 3 zeige ich, wie man den RPi Zero W nutzt, um eine 64×64 RGB Matrix zu steuern.
Projekt 1: Raspberry Pi Zero Wireless Plane Tracker
| Part | Cost | Notes |
|---|---|---|
| Raspberry Pi Zero Wireless | $10 | |
| SDR Receiver | $21 | Viele andere USB SDR Receiver werden wahrscheinlich funktionieren |
| 4GB microSD Card | $6 | Größere Cards werden funktionieren |
| USB-to-MicroUSB Adapter | $5 | |
| MicroUSB Hub (optional) | $8 | Der Pi Zero hat nur MicroUSB Ports; um Accessoires anzuschließen, brauchen Sie Hub/Converter |
| Wideband Antenne (optional) | $50 | Antenna muss 1090 MHz abdecken |
| 1090 MHz Bandpass Filter (optional) | $20 |
Ressourcen
- Raspbian Jessie (Installation Guide)
- PiAware Installation
Dieses Experiment wurde mit dem Raspberry Pi Zero Wireless durchgeführt. Der folgende Code sollte jedoch auf jedem Raspberry Pi Version 2 oder später funktionieren. Wenn Sie einen Pi Zero ohne Wireless kaufen, können Sie es mit einem Wireless USB Network Dongle hinzufügen.
Schritt 1: SD Karte vorbereiten
Laden Sie das neueste Raspbian Jessie auf Ihren Computer herunter.
Schreiben Sie das Image auf Ihre SD Karte (Guides für Linux, Mac OS und Windows).
Schritt 2: SD Karte modifizieren
Erstellen Sie eine Datei namens „ssh“ im Root Directory der SD Karte. Keine File Extension, keine File Contents. Diese Datei aktiviert SSH, was Remote Access zum Pi erlaubt.
Erstellen Sie eine Datei namens „wpa_supplicant.conf“ mit folgendem Inhalt. Ändern Sie die Werte für YourWifiName und YourWifiPassword zu Name und Passwort, die Sie nutzen, um zu Ihrem Wi-Fi Netzwerk zu verbinden.
network={
ssid="YourWifiName"
psk="YourWifiPassword"
key_mgmt=WPA-PSK
}
Schritt 3: Installieren und Booten
Ejecten Sie die SD Karte von Ihrem Computer und installieren Sie sie im Raspberry Pi Zero Wireless. Verbinden Sie den Raspberry Pi mit einer Stromquelle über den MicroUSB Port, der dem Boardende am nächsten ist. Warten Sie ca. eine Minute, bis der Raspberry Pi gebootet und mit Wi-Fi connected ist. Mit diesen Konfigurationsdateien ist kein Keyboard, Mouse oder Display mit Ihrem Device nötig.
Schritt 4: Ihren Pi Locaten
Identifizieren Sie die IP Adresse Ihres Pi – dies kann accomplished werden, indem Sie sich in Ihren Router einloggen und Attached Devices ansehen, oder durch einen IP Scanner wie Look@Lan (Windows) oder nmap (Linux und Mac). Wenn Ihr Device nicht innerhalb von zwei bis drei Minuten erscheint, trennen Sie Power, entfernen Sie die SD Karte vom Pi, und reinserten Sie sie in Ihren Computer und double-check die ssh und wpa_supplicant.conf Files.
Schritt 5: Mit Ihrem Pi Verbinden
Windows: Nutzen Sie ein Tool wie Putty, um zu Ihrem Pi zu verbinden. Downloaden und starten Sie das Programm, tippen Sie die IP Adresse Ihres Pi ein, und klicken Sie „connect“. Ein Fenster erscheint, das nach Security Certificate fragt – klicken Sie „yes“.
Linux und Mac: Öffnen Sie ein Terminal und tippen Sie „ssh pi@raspberrypi.local“ oder „ssh pi@ipaddress“ (z. B. „ssh pi@192.168.0.52“).
An der Prompt, Default Username ist „pi“ und Default Password ist „raspberry“.
Schritt 6: Ihren Pi Konfigurieren
Tippen Sie „sudo raspi-config“ und drücken Sie Enter.
Ändern Sie Ihr Passwort, Timezone und Localization.
Wenn der Passwort Prompt erscheint, ist das aktuelle Passwort „raspberry“; Sie sollten es zu etwas Sichererem ändern, um es zumindest marginal schwierig zu machen, Ihr Device zu hacken. Als Side Note: Statt Passwörtern sollten Sie Zertifikate für Authentication nutzen, aber das wird in diesem Artikel nicht diskutiert.
Dann tippen Sie folgende Commands und erlauben Sie ihnen zu laufen:
wget https://flightaware.com/adsb/piaware/files/packages/pool/piaware/p/piaware-support/piaware-repository_3.3.0_all.deb sudo 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
Nachdem der Raspberry Pi den Boot Prozess beendet hat, öffnen Sie einen Webbrowser auf Ihrem Computer und navigieren Sie zu https://raspberrypi.local:8080 (oder ersetzen Sie raspberrypi.local mit der IP Adresse Ihres Devices). Zoomen Sie aus und dann in Ihre Location, während Planes anfangen zu erscheinen und dann von Ihrem Screen zu verschwinden.
Um die Anzahl der Planes zu erhöhen, nehmen Sie Ihren Pi, SDR und Antenna System nach draußen. Weitere Verbesserungen finden sich durch Hinzufügen des 1090 MHz Bandpass Filters und einer besseren Antenne.

Screenshot von PiAware Receiver, zeigt ein Gebiet östlich von Los Angeles, Kalifornien, am 3/14/17 (Pi Day!). Lineare Tracks oben zeigen Planes, bereit zu landen bei LAX. Auch sichtbar ist ein Regierungsplane, der in Kreisen fliegt.
Schließlich, erstellen Sie einen FlightAware.com Account und assoziieren Sie dann Ihren Receiver mit Ihrem FlightAware.com Account.
ADS-B, PiAware und dump1090
Transponder, an Aircraft affixed, erlauben ihnen, einen vierstelligen oktalen Identifier (Mode-A AKA „Squawk“) Identifier plus Altitude (Mode-C), eine 24-bit einzigartige ICAO Nummer (Mode-S) und die 24-bit ICAO Nummer mit zusätzlicher Information (Mode S Extended Squitter) zu broadcasten. Der letzte Mode ist auch als ADS-B bekannt.
Automatic Dependent Surveillance-Broadcast (ADS-B) nimmt eine Aircraft Position (wie bestimmt durch GPS, GLONASS, etc.), kombiniert sie mit identifizierender Information, und broadcastet sie bei 1090 MHz. Im Gegensatz zu den anderen Transponder Codes, die nur als Reply auf eine Interrogation durch ein Radar Signal transmitted werden, wird ADS-B approximativ zweimal pro Sekunde gesendet.
PiAware und dump1090 nutzen ein Software Defined Radio (SDR) getunt auf 1090 MHz, um Broadcasts aller Aircraft in der Nähe zu empfangen und zu decoden und sie an FlightAware's Server zu senden. Die Information wird auf einer Web Page gehostet auf dem Raspberry Pi an Port 8080 displayed.

Illustration von John Macneil, www.aopa.org.
Alle Aircraft müssen bis January 1, 2020 mit ADS-B Out Transpondern ausgestattet sein. Aber bis dahin nutzt FlightAware Multilateration, um die Location von Planes zu bestimmen, die ihre Latitude und Longitude nicht broadcasten. Multilateration nutzt die bekannte Position von mindestens drei Receivern und die Empfangszeiten einer Message, um die Position eines Planes zu berechnen.
Projekt 2: Pi Zero Wireless nutzen, um Plane Data von FlightAware.com zu sammeln
FlightAware.com hat zwei Application Program Interfaces (API), die Data Mining und Utilization erlauben: FlightXML und Firehose. Wählen Sie zwischen den beiden basierend auf der Art der Information, die Sie benötigen, und wie viele Queries Sie monatlich brauchen. Für dieses Projekt erhielt All About Circuits kostenlosen Zugang für einen Monat. Um mitzumachen, müssen Sie FlightAware.com für einen API Key kontaktieren.
Ressourcen:
- Flight Aware Firehose Documentation
Schritt 1: Connectivity Testen
Verbinden Sie zu Ihrem Pi Zero über SSH und testen Sie Connectivity zum Firehose API.
openssl s_client -host firehose.flightaware.com -port 1501 -tls1
Wenn Sie eine oder zwei Seiten Certification Details sehen, hat alles korrekt funktioniert.
Schritt 2: Sample Files und Data Holen
FlightAware hostet Sample Files auf GitHub. Beginnen Sie mit Downloaden und Editieren der Sample Files mit Ihrem Username und API Key.
git clone https://github.com/flightaware/firehose_examples.git cd firehose_examples/perl/example1 sudo nano example1.pl
Ändern Sie die username und apikey Felder zu matchen Ihre Information, dann Exit ([Ctrl]+[x]) und Save.
perl example1.pl
Sie sollten Data in JavaScript Object Notation (JSON) Format sehen:
$VAR1 = {
'aircrafttype' => 'B738',
'heading' => '105',
'pitr' => '1490038420',
'gs' => '334',
'clock' => '1490038413',
....
'hexid' => 'A44591',
'ident' => 'DAL751'
'alt' => '25100',
'lon' => '-117.38051',
'lat' => '33.53288'
};
Schritt 3: Ihren Pi Konfigurieren, um Data zu Sammeln
Firehose ist aptly named, da es eine überwältigende Menge Data in sehr kurzer Zeit produzieren kann (~1 GB/Tag) – füllt Ihren Disk und erhöht Charges zu Ihrem Account. Also, wenn Sie ein Script erstellen, um Information zu sammeln, sollten Sie es in regelmäßigen Intervallen checken, da Sie sehr schnell Ihren Disk füllen und Ihr Expense Account leeren könnten.
Abhängig von der Größe Ihrer MicroSD Card und was Sie zu sammeln hoffen, könnten Sie Additional Storage hinzufügen oder zurück zu raspi-config und Expand Your Filesystem (Option 7, Option A1) gehen.
Für mein Beispiel werde ich Data für ein 2° × 2° Geographic Area sammeln, das LGB, LAX, ONT, SNA, etc. inkludiert (34° N ± 1°, 118° W ± 1°). Ich wählte diese Region, weil sie mein Empfangsbereich approximiert.

Der Interest Area reicht von 33° N bis 35° N und 117° W bis 119° W.
Der folgende Code ist example1.pl, mit Änderungen an Line 18 und 45. Alle Lines sind unten gezeigt, damit Leser folgen können, ohne die File herunterladen zu müssen. Erstellen Sie eine Kopie von example1.pl namens position.pl und nutzen Sie nano zu Edit position.pl.
cp example1.pl position.pl sudo nano position.pl
Machen Sie die notwendigen Edits und Exit mit [Ctrl]+[x].
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 # Open the TLS socket connection to FlightAware.
14 my $sock = IO::Socket::SSL->new('firehose.flightaware.com:1501') or die $!;
15 # print "Connected!\n";
16
17 # Send the initiation command to the uncompressed socket.
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 # Activate compression, if requested.
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 # Main loop, reading lines of JSON from the server.
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";
Line 18 limitiert den Request auf Planes in der Geographic Region zwischen 117° W und 119° W (denoted by -117 und -119). Line 43 ist modifiziert, um eine Methode zu demonstrieren, nur die Fields of Interest zu targeten. In diesem Fall targeten wir Flugnummer, Latitude, Longitude und Altitude eines Planes. Line 45 requested 10 Planes vom Server (diese Line kann in einem finalen Script commented out werden).
Die nächsten zwei Commands execute das Programm und erlauben Ihnen, den Progress zu monitoren:
sudo perl position.pl >> position.txt & tail -f position.txt
Die erste Line hat den Superuser das Programm perl nutzen lassen, um position.pl zu starten und Output an die File position.txt zu appenden (>>) und das & Symbol veranlasst das Programm, im Background zu laufen.
Die zweite Line nutzt das Programm tail, um (-f) Changes an der File position.txt zu folgen, was Ihnen erlaubt, das Command für Completion zu monitoren. Wenn Done, nutzen Sie [Ctrl]+[c] zum Exit tail. Wenn Sie nicht mehr an Datensammlung interessiert sind, nutzen Sie fg, um das Programm position.pl in den Foreground zu bringen und zu stoppen oder mit [Ctrl]+[c] zu breaken.
Die unten .zip File enthält modifizierte Programme und Output, die hoffentlich demonstrieren, wie slight Changes in Syntax unterschiedliche Information in Focus bringen können, entlang mit Sample Output von den Programmen.
- arrivals.pl gibt JSON Output für Planes, die gerade Touchdown gemacht haben (entweder arriving oder departing LAX)
- test_landing.pl gibt readable Output (z. B. AAL1155 landed at 03/21/2017 22:00:01)
- position.pl gibt JSON Output für alle Planes im Geographic Rectangle (34° N ± 1°, 118° W ± 1°)
- test_overhead.pl gibt Flight Identification, Latitude, Longitude und Altitude (N721PP 34.36011 -118.37837 18100)
Diese Files wurden mit Minor Modifications an example1.pl von FlightAware gemacht. Um Ihre eigene zu machen, die nur Data captures, die Sie interessieren, nutzen Sie FlightAware Firehose API Documentation, um die appropriate Information in JSON Format zu requesten, und dann die korrekte Syntax inside der File zu nutzen, um nur die Information zu Outputen, die Sie brauchen.
Projekt 3: Pi Zero Wireless nutzen, um eine 64×64 RGB Matrix zu steuern
| Part | Cost | Notes |
|---|---|---|
| (2) 2× 32×32 RGB Display Matrix + Power Supply | $75 ($150) | Erfordert vier total 32×32 RGB Matrix zu 64×64 Pixel Display erstellen |
| Adafruit RGB Matrix HAT + RTC Clock | $25 | Datasheets |
| 20-pin IDC Cable (Hub75) | $7-$13 | Die benötigte Länge hängt von Konfiguration der Panels und Distanz zum Pi ab |
| 0.1" Male Headers (40-pin, 2×20) | $1 | 2,54 mm |
Schritt 1: Adafruit Matrix HAT Preparation
Löten Sie Male und Female Headers auf dem Adafruit HAT gemäß Instruktionen auf Adafruit.com. Dann löten Sie einen Wire oder attachen einen Jumper zwischen Pins 4 und 18. Für dieses Projekt benötigen Sie weder DC Barrel Jack noch Screw Terminal Konnektoren anzuschließen.
Schritt 2: Raspberry Pi Preparation
Löten Sie die 2×20 Male Headers in Place.
Schritt 3: RGB Matrix Preparation
Orientieren Sie die RGB Matrizen so, dass die Pfeile auf der Bottom Row nach unten zeigen und die Pfeile auf der Top Row nach oben (see Image hier). Nutzen Sie ein 2×10 IDC Cable, um den Output des Adafruit HAT zum Input des First Board zu verbinden. Dann verbinden Sie Output des First Board zum Input des Second, Output des Second zum Input des Third, etc.

Die Rückseite des RGB Matrix Panels. Das Signal reist von Board zu Board in einer „C“ Form.
Wenn Sie das Glück haben, einen Laser Cutter oder CNC Machine zu Ihrer Verfügung zu haben, habe ich Drawings für eine Back Plate inkludiert, die alle vier RGB Matrix Plates halten kann. Die Mounting Holes sind mit Slots ersetzt, um Alignment von einem Common Center Point zu erlauben.

Template für Mounting vier 32×32 Panels zu einem Large 64×64 Panel; Various Panel Arrangements sind möglich.
Hughes_4x4RGBMatrix.zip
Full Documentation und Source Code von Hennen Zeller.
Once alle elektrischen Verbindungen gemacht wurden, Power On den Raspberry Pi. Nach approximativ einer Minute, Attempt to Log onto den Pi mit Putty oder SSH.
Once In, tippen Sie Folgendes, um Sound auf dem Pi zu disable (Documentation indicates a Hardware Subsystem Conflict mit Sound und RGB Matrix Hardware).
cat << EOF | sudo tee /etc/modprobe.d/blacklist-rgb-matrix.conf blacklist snd_bcm2835 EOF sudo update-initramfs -u
Dann nutzen Sie apt-get, um Python und Imaging Files zu installieren.
sudo apt-get install -y build-essential libconfig++-dev python-dev python-imaging libgraphicsmagick++-dev libio-socket-ssl-perl
Holen Sie die notwendigen Files, um die RGB Matrix zu runnen und compilieren Sie sie.
git clone https://github.com/hzeller/rpi-rgb-led-matrix cd 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
Optional, wenn Sie auch eine Camera an Ihrem Pi connected haben, können Sie ein 64×64 Pixel Image capture und es zum Display feeden.
raspistill -w 64 -h 64 -o myimg.png sudo ./led-image-viewer -L -f myimg.png
Die vorherigen zwei Lines capture ein 64×64 Image zum Display und nutzen das Programm led-image-viewer (compiled in der vorherigen Section) um es auf dem Large Display (-L) Forever (-f) anzuzeigen.
Was kommt als Nächstes?
Sie haben nun einen $10 Computer, der (entweder mit Antenne und SDR Receiver oder mit einem API Call) Aircraft um Sie herum tracken und jede Information über jene auf Ihrem 64-Pixel by 64-Pixel Display oder auf dem Raspberry Pi Zero W HDMI Output anzeigen kann.
Was Sie damit machen, ist nur durch Ihre Imagination limitiert.
Da dieser Artikel nur die Tools introduced, ist der erste Step, den ich empfehle, die Documentation für das Display und FlightAware zu lesen und dann die Example Programme von beiden zu öffnen, um ihre Capabilities besser zu verstehen.
Und vergessen Sie nicht, dass Ihr Raspberry Pi Zero eine funktionierende Linux Installation ist, komplett mit oft-used Commands wie Cron, Grep und Awk. Alles, was nicht bereits auf Ihrem Pi ist, ist nur ein kurzer apt-get install weg.
Checken Sie das Video unten, um die Krönung dieser Projekte zu sehen!
Probieren Sie dieses Projekt selbst aus! Holen Sie die BOM.
Industrielle Ausrüstung
- Pixus Technologies: State-of-the-Art Ruggedized SDRs für Mission-Critical Environments
- Mehrere DS18B20 1-Wire Sensoren an Raspberry Pi anschließen für präzises Temperaturmonitoring
- Raumeffizient Temperaturen mit Raspberry Pi und Nagios überwachen
- Home Energy Centre: Solar PV, Thermische Panels & Raumtemperaturen mit Raspberry Pi & Moteino überwachen
- 433 MHz Smart-Home-Controller mit Sensorflare und Raspberry Pi selbst bauen
- Analoge Sensoren mit Raspberry Pi und Zabbix auslesen – Schritt-für-Schritt-Anleitung
- Erstes IoT-Projekt mit Raspberry Pi, DHT11 und ThingSpeak bauen
- Automatisiertes Aeroponik-System mit Raspberry Pi und Feuchtigkeitssensor bauen
- LoRa-Gateway mit RAK831-Modul auf Raspberry Pi 3 bauen – Schritt-für-Schritt-Anleitung
- Roboter mit Raspberry Pi und Python bauen: Komplette Anleitung