How I built my first ADS-B receiver, on a Sunday, in Brussels

A not-very-technical walkthrough by someone who is not, strictly speaking, very technical.


Right, then.

Last Saturday I came back from a short hop down to Le Touquet. South-westerly at 12, the kind of weather that makes you forget the forecast was meant to be worse. On the way home — somewhere over the Pas-de-Calais, watching a quiet string of A320s several thousand feet above me on SkyDemon — I had a thought I have had at least four times before and never acted on.

I should set up an ADS-B receiver.

This time, on the train back from Grimbergen, I ordered the bits.

By Sunday lunchtime I was watching aircraft over Brussels on my own kit. From a windowsill. With a kettle on. The whole thing took roughly two and a half hours, two cups of coffee, and one short moment of confusion that resolved itself when I read the line of documentation I had skipped. I’d estimate that ninety minutes of the total was me reading more carefully than I actually needed to.

This post is for anyone who has ever opened a Raspberry Pi guide and quietly closed the tab. It is the version of the guide I would have wanted on Saturday morning.

The shopping list

I had a Raspberry Pi 5 sitting in a drawer. I have no good explanation for why; I bought it last spring with the intention of doing something interesting and then did not. If you don’t already have a Pi, get a Pi 5 (8 GB is plenty) and a power supply. An older Pi 4 works fine — the Pi 5 is just what I had.

To that I added two things from Amazon.de:

  • A NooElec NESDR Smart USB SDR dongle — aluminium case, R820T2 chip, the size of a fat USB stick with a small antenna jack on one end. Around €30. (It is, in fairness, the prettiest piece of kit in my apartment.)
  • A Bingfu dual-band magnetic-base antenna — 978 / 1090 MHz, 7 dBi, three metres of cable, SMA connector. Around €25. It looks like a small black salt shaker on a magnetic puck. It is, broadly, fine. More on that further down.

Plus a microSD card I had to dig out of a desk drawer. (It had been in there since approximately 2019. It has had a more interesting life than I have given it credit for.)

Total spend, since the Pi was already mine: about €55 and one Sunday morning. Prices wander around — listings on Amazon shift with stock and sellers, so check before you buy; treat the figures here as an order-of-magnitude guide, not a quote.

The myth, and the reality

The myth is that setting up a Pi is the part of the project where you discover you don’t really understand computers, your wifi, or yourself.

The reality is closer to flight prep. There’s a checklist; you do it in order; if you miss a step you find out within forty seconds because something doesn’t work. Aviation people are trained to like this. Anyone who has flown a circuit and run a HASELL check has the right brain for the hobby.

So — checklist.

What’s actually happening on this Pi

Two pieces of software end up living on this little box.

The first is readsb — an open-source decoder maintained by a small group of people who understand radio engineering better than is healthy for one human. It listens to the faint 1090 MHz bursts your dongle pulls in off the antenna, untangles thousands of overlapping aircraft transponders every second, and writes the result to a tidy JSON file once a second. It is, broadly, the hard part of the whole project. Someone else has already done it.

The second is the Dataero feeder — a small Python service that reads readsb’s JSON file and forwards it to the Dataero network at radar.dataero.eu. It’s the easy half of the problem; it is also the half that makes your kit useful to anyone other than yourself.

You install readsb first, confirm it’s hearing aircraft, then install the Dataero feeder on top.

That’s the whole architecture. From here it really is just a checklist.

Step 1 — Flash the SD card

Download Raspberry Pi Imager on your laptop. It exists for Windows, Mac and Linux, and it is quietly one of the better installers I’ve ever used. Plug the SD card into your laptop. Pick Raspberry Pi OS Lite (64-bit) — Lite, because there’s no need for a desktop on a thing that’s going to live on a windowsill and never see a monitor.

Before you click Write, open the gear-icon settings. Set the hostname (mine is radar-etterbeek, because I am not subtle), set a username and password, paste in your wifi credentials, and tick Enable SSH. This pre-bakes everything you need; you will not have to plug a screen into the Pi at any point.

Click write. Get a coffee. Come back in five minutes.

Step 2 — Boot the Pi

Eject the SD card from the laptop. Slide it into the underside of the Pi. Plug in the power supply.

There is a particular silence that settles over a kitchen when a Raspberry Pi boots for the first time. It lasted about ninety seconds in mine. Soundtracked by Brothers in Arms, which felt about right.

When the Pi has finished thinking, find it on your network. The router admin page is the easiest way — look for radar-etterbeek (or whatever you called it) and note the IP address.

Step 3 — SSH in and update

From your laptop terminal:

ssh sandy@192.168.1.42

(Use your username and your Pi's IP.) The first time it'll ask if you trust the host. You do. Then:
sudo apt update && sudo apt upgrade -y
This takes a few minutes. Make a second coffee.

Step 4 — Plug in the dongle and the antenna

Power down the Pi (sudo shutdown now). Plug the NooElec dongle into one of the Pi’s USB-A ports. Screw the antenna’s SMA cable onto the end of the dongle — finger-tight, then a quarter-turn with two fingers; do not get heroic with pliers.

Stand the antenna somewhere with a view of the sky. I put mine on the inside of my living-room window, on the magnetic puck stuck to a steel biscuit tin because the windowsill is wood. Whatever works.

Power the Pi back up. SSH back in.

Step 5 — Create a Dataero account and grab your API key

Two short browser steps that don’t happen on the Pi.

  1. Open radar.dataero.eu in your laptop browser. Click Register, fill in the form, confirm your email if it asks.
  2. Once logged in, click your username in the top-right corner, go to your Profile, find the API Key section, and click Request API Key. Copy the key somewhere you can find it in the next thirty seconds.

That’s it. Treat the key like a password — don’t paste it into Discord, don’t commit it to a public repo, don’t read it out at dinner.

Step 6 — Install the Dataero feeder

Back to the SSH session on the Pi. You should still be in the dataero-adsb-feeder folder from Step 5; if you’ve wandered off:

cd ~/dataero-adsb-feeder
Then run the feeder installer:
sudo bash installer.sh

It'll ask you a couple of polite questions — most importantly to paste the API key you just copied from your Dataero profile. The installer creates a Python virtual environment under /usr/local/dataero-adsb-feeder, drops your key into a .env file there, and registers the feeder as a systemd service that starts on boot.

Once it’s done, check it’s alive:

sudo systemctl status dataero-feeder.service
Same drill: active (running), green. If it isn't, the most common cause is a typo in the API key, which journalctl -u dataero-feeder.service -e will mention with notable directness.

Step 7 — First contact

Open radar.dataero.eu again, log in, and find your station on the map. Within a minute or two of the feeder coming up you should see your station-marker turn green and a small constellation of aircraft fanning out from it.

The first aircraft I saw was a Lufthansa A320 climbing out of Frankfurt at FL340, heading west. The second was a Boeing C-17 high over the Netherlands, eastbound at FL310 — presumably the long way to somewhere in the Gulf. The third was the one that made me grin properly: a Cirrus SR22 — not mine, but close enough — wandering up the Belgian coast.

That’s the moment. Once you’ve watched your first three or four traces appear on your own screen, picked up by your own kit, the technical part of the project is over and the hobbyist part begins.

Useful commands you’ll want later

A short reference card for when you come back next weekend and have forgotten everything:

# Status
sudo systemctl status readsb
sudo systemctl status dataero-feeder.service

# Live logs
sudo journalctl -u readsb -f
sudo journalctl -u dataero-feeder.service -f

# Restart after editing config
sudo systemctl restart dataero-feeder.service

# Edit the feeder's config (API key, paths, debug)
sudo nano /usr/local/dataero-adsb-feeder/.env

Setting DEBUG=TRUE in the .env and restarting the service is the right first move when something is unhappy and the reason isn’t obvious. Set it back to FALSE once you’re solved; the logs are quieter that way.

What an indoor antenna actually buys you

To be honest? More than I expected, and less than I’d like.

From my window in Etterbeek I see, in the right geometry, almost anything above 5,000 feet within about 100 nautical miles. That covers the major arrivals into Zaventem, the high-altitude European traffic crossing Belgium, and most of the GA out of Grimbergen and Charleroi once it’s clear of the buildings.

What I miss is the low and the close — the circuit work at small fields, the helicopters under 1,500 feet, the medical flights at night staying low. The Bingfu is doing the job it’s designed for, which is to be small, indoors, and reasonable. It is not designed to be the best you can do.

So I have done what every ADS-B feeder has done before me. I am already eyeing an outdoor antenna. The Auratrove 1090 SMA outdoor, around €60, is the realistic next step — better gain, weather-rated, mounts to a balcony rail. The reception jump from indoor to outdoor is, by all accounts, not subtle. I will report back.

A small bow in the direction of readsb

It would be wrong to wrap this up without saying it plainly: the genuinely clever part of this project is not the Pi, and it isn’t the Dataero feeder either. It’s readsb. The Dataero side — including this whole article — is the easy half.

readsb is what listens to faint 1090 MHz radio bursts from aircraft potentially 200 nautical miles away, untangles thousands of overlapping Mode-S transponder messages every second, and turns all of that into a clean JSON file on a small computer that costs less than a decent dinner. It descends from dump1090, was carried forward by Mictronics, and is currently maintained by wiedehopf and a community of contributors. None of us at Dataero wrote any of it. We pass the bytes along.

If this software were a band, readsb would be the lead vocalist, the lead guitarist, the drummer, the bassist, the producer, the sound engineer, and the person who wrote every song. The Dataero feeder is the one handing out flyers at the door.

So — small bow, sincerely.

A note on Dataero

I pointed my feed at Dataero — the European community-built ADS-B network we run — partly because it’s where I work, and partly because layering my receiver into a network that’s owned by the people running it appeals to me more than handing my data to a company I’ll never speak to. The install is no different from anything else; what changes is what happens to the data after.

If you’re already feeding somewhere, you don’t need to switch. Dataero runs alongside.

What I’d tell Saturday-morning Sandy

That the Raspberry Pi is, broadly, just a small Linux computer that does one thing very well if you ask it nicely. That the SDR dongle is the size of a USB stick. That the antenna is the size of a kitchen tool. That the two pieces of software you need are both installed by scripts; that one of them is open-source magic and the other is a sixty-line relay; that nothing here is unsalvageable. If a step doesn’t work, you re-read the line above it and try again.

That the satisfaction of opening a browser tab and watching real aircraft, picked up by your own kit, sitting on your windowsill, in your flat — is, quietly, out of all proportion to the work involved.

Anyway. Cup of tea, and back to it.


If you’d like to add your node to Dataero, the feeder repo is at github.com/dataero-adsb/dataero-adsb-feeder and the network it joins is at radar.dataero.eu. I’ll be on it this evening.