What you need before you start
A working flight tracker takes three parts: a Raspberry Pi with USB and networking, a receiver dongle tuned to 1090MHz, and an antenna mounted as high as you can reasonably get it. The dongle is where the money goes. An RTL-SDR Blog V3 or V4, an Airspy Mini, and the FlightAware Pro Stick Plus all decode the same signal, but the Pro Stick Plus packs the amplifier and the band filter into one stick, so you skip buying a separate filter later. Antenna placement counts for more than most builders expect: indoors behind a concrete wall you might see 40km, while the same dongle on a roof mast reaches past 200km.
What James Mitchell built
Pi-Sky is a single Python application and web server, written up as a tutorial on the Raspberry Pi blog. It reads the aircraft feed off your own receiver, enriches it through public APIs, and streams live JSON to any browser on your network. You get a card-style flight list with route details and airline logos, a live map, stored history, and a replay mode that plays back an entire day of traffic at once. An optional split-flap display shows the newest flight in airport departure-board style. Nothing phones home, so the data stays on the Pi.
How the radio side actually works
ADS-B stands for Automatic Dependent Surveillance-Broadcast. Modern aircraft transmit it on 1090MHz in short bursts several times a second, carrying an ICAO hex address, a callsign such as RYR3EM, GPS position, altitude, speed, track, vertical rate, and squawk code. Depending on the aircraft’s altitude, your terrain, and your antenna, anything within roughly 100 to 250km lands in your receiver. Decoding is handled by dump1090, which publishes what it hears as JSON at a local path like /data/aircraft.json, and that file is the entire interface Pi-Sky reads from. Here is the gotcha: the broadcast never includes aircraft type, origin, destination, or schedule. Those fields arrive from the enrichment APIs, which is why a tracker with no internet still plots positions but leaves the route cards blank.
Worth a weekend on the bench
For a school electronics club or a thesis group, this build sits in a useful spot: a real RF receiving chain, a decoder, and a web front end, with every stage producing something you can point at and measure. Read the full write-up at raspberrypi.com, then run dump1090 on its own first and confirm you are getting hits in /data/aircraft.json before you add the Pi-Sky library on top. If your aircraft count sits at zero, move the antenna to a window before you touch a line of code.
Frequently Asked Questions
What hardware do I need to pick up aircraft signals?
Any Raspberry Pi with USB and networking, plus a USB receiver tuned to 1090MHz such as an RTL-SDR Blog V3 or V4, an Airspy Mini, or a FlightAware Pro Stick Plus. The Pro Stick Plus has the amplifier and band filter built in, which saves adding an external filter. Antenna height matters as much as the dongle.
Does Pi-Sky need an internet connection to work?
Only partly. dump1090 decodes the 1090MHz broadcasts locally, so positions, altitude and speed keep plotting with no internet at all. Aircraft type, origin, destination and schedule are not in the broadcast, so those route cards stay blank until Pi-Sky can reach its enrichment APIs.
What will I learn if I build this?
You touch a full signal chain end to end: antenna placement and RF reception, software-defined radio decoding with dump1090, parsing a live JSON feed in Python, and serving a real-time dashboard over the local network. It is a strong capstone or club project because each stage fails visibly, so debugging teaches you where the problem actually sits.
