← Projects
raspberry-pi beginner 1 hr ago ◯ 6 min read

Build an ACARS and VDL2 Aircraft Message Decoder with Raspberry Pi and RTL-SDR

Build time: An afternoon for software setup; a full day if also building the antenna
Tools needed: Computer to flash the microSD card, basic Linux command-line familiarity, crimping tool or soldering iron for a custom antenna feedline
Parts List
acarsvdl2rtl-sdrraspberry piaircraft trackingsdr

<p>An ADS-B receiver tells you where aircraft are; an ACARS/VDL2 receiver tells you what they're actually saying — text messages between aircraft and airline operations covering everything from gate assignments and weather requests to maintenance reports and out-of-range position updates. It's a genuinely different data feed from position tracking, decoded from a completely different set of frequencies, and it pairs naturally with an existing ADS-B setup since both run happily on the same low-cost RTL-SDR hardware. This build turns a spare Raspberry Pi and a second RTL-SDR dongle into a dedicated ACARS and VDL2 message decoder with a local web dashboard, and optionally feeds the decoded messages to community aggregators the same way a flight tracker feeds ADS-B data.</p>

<h2>ACARS and VDL2: What's Actually Being Decoded</h2> <p>ACARS (Aircraft Communications Addressing and Reporting System) is a narrowband digital data link aircraft have used for decades to exchange short text messages with airline operations centers over VHF — think of it as a slow, aviation-specific precursor to modern data messaging. VDL2 (VHF Data Link Mode 2) is a newer, faster digital mode carrying similar traffic plus some ADS-C and CPDLC (controller-pilot data link) content on a dedicated frequency. Both are unencrypted and legal to receive in most jurisdictions under the same general allowances that cover receiving ADS-B and other public aeronautical broadcasts — this build is receive-only and transmits nothing.</p>

<h2>Difficulty, Time, and Requirements</h2> <p>This is a beginner-to-intermediate software-focused build — no soldering or fabrication required unless you're also building a dedicated antenna. Budget an afternoon for software setup if you're reusing an existing Raspberry Pi and RTL-SDR, or a full day if building the antenna from scratch alongside it. A Raspberry Pi 4 or 5 is recommended if this Pi is also running other services (like an existing ADS-B feeder); a Pi Zero 2 W is workable as a dedicated single-purpose decoder given ACARS/VDL2 decoding's modest CPU requirements compared to something like ADS-B's higher message rate.</p>

<h2>Parts List</h2> <ul> <li>RTL-SDR dongle (RTL2832U + R820T2 tuner, the standard budget SDR chipset)</li> <li>Raspberry Pi (4, 5, or Zero 2 W depending on whether this is dedicated or shared with other services)</li> <li>MicroSD card, 32GB or larger, high-endurance rated for continuous logging</li> <li>VHF discone or ground-plane antenna covering 118-137 MHz</li> <li>Coaxial feedline (RG-58 or better for short runs, LMR-400 for longer outdoor runs)</li> <li>SMA to the RTL-SDR's antenna connector adapter, matching your chosen antenna's connector</li> <li>Weatherproof enclosure or mast mount if installing the antenna outdoors</li> <li>USB extension cable to keep the RTL-SDR's own heat away from the Pi and reduce self-generated RF noise near the tuner</li> <li>5V power supply appropriately rated for your chosen Pi model</li> <li>Ferrite chokes for the USB and antenna cables (reduces common electrical noise reaching the receiver)</li> </ul>

<h2>Tools Required</h2> <p>A computer to flash the microSD card, basic Linux command-line familiarity, and a crimping tool or soldering iron only if building a custom antenna feedline rather than buying pre-terminated cable.</p>

<h2>Software Setup</h2> <ol> <li><strong>Flash Raspberry Pi OS Lite</strong> to the microSD card and complete a headless first boot with SSH enabled — this site's headless Pi setup guide covers the standard process in detail.</li> <li><strong>Install RTL-SDR drivers and blacklist the kernel's default DVB-T driver</strong>, which otherwise claims the dongle before your decoding software can use it — the same first step needed for any RTL-SDR project on a fresh Pi image, including this site's ADS-B and NOAA satellite receiver guides.</li> <li><strong>Install <code>acarsdec</code> (for ACARS) and/or <code>dumpvdl2</code> (for VDL2)</strong> — both are open-source, actively maintained decoders built specifically for RTL-SDR-based reception, packaged for easy build from source on Raspberry Pi OS or available as pre-built binaries depending on your distribution.</li> <li><strong>Configure the decoder with your region's active ACARS/VDL2 frequencies.</strong> Frequency assignments vary by region and are published by hobbyist aviation communities — common US ACARS frequencies cluster around 130-137 MHz, with VDL2 commonly on 136.975 MHz in most regions, but always confirm current assignments for your area rather than assuming these carry over exactly.</li> <li><strong>Install a web dashboard</strong> such as <code>acarshub</code>, which combines ACARS and VDL2 decoding with a browser-based live message feed, searchable history, and a built-in database that annotates messages with flight and airline information where available.</li> <li><strong>Set the decoder and dashboard to start on boot</strong> via systemd services, so the station comes back online automatically after a power interruption without manual intervention — the same reliability pattern used for any always-on Pi service on this site, including the ADS-B and Pi-hole setup guides.</li> </ol>

<h2>Antenna Considerations</h2> <p>ACARS and VDL2 both live in the VHF aviation band (roughly 118-137 MHz), which is a meaningfully different antenna design target than the 1090 MHz used by ADS-B — a discone or ground-plane antenna cut for VHF aviation frequencies will outperform a generic "wideband" antenna bundled with a cheap RTL-SDR kit, and outdoor placement with a clear view of the sky matters even more here than for ADS-B, since VHF signals are more sensitive to obstruction from buildings and terrain. A simple homemade ground-plane antenna (a length of coax with radial elements cut to a quarter-wavelength at your target frequency) is a legitimate and cheap starting point before investing in a commercial discone.</p>

<h2>Reading What You've Decoded</h2> <table> <tr><th>Message Type</th><th>What It Tells You</th></tr> <tr><td>OOOI reports (Out, Off, On, In)</td><td>Automated timestamps for pushback, takeoff, landing, and gate arrival — the backbone of airline operational tracking</td></tr> <tr><td>Position reports</td><td>Periodic lat/long updates, particularly valuable over oceans and remote areas with no ADS-B or radar coverage</td></tr> <tr><td>Weather requests/uplinks</td><td>Crew requests for current weather at destination or alternate airports, and the uplinked responses</td></tr> <tr><td>Maintenance/fault reports</td><td>Automated aircraft system messages sent to maintenance operations, sometimes visible in the raw decoded traffic depending on airline configuration</td></tr> <tr><td>Free text messages</td><td>Crew-to-dispatch text communication, gate/ground handling coordination</td></tr> </table>

<h2>Contributing to Community Aggregators</h2> <p>Several community-run aggregators (airframes.io among others) accept ACARS/VDL2 feeds from home stations similarly to how flightaware and adsbexchange accept ADS-B feeds, building a crowd-sourced picture of message traffic well beyond any single receiver's range. Feeding is optional and configured separately from local decoding — check the current submission requirements and feeder software for whichever aggregator you choose, since these details change over time and each project maintains its own onboarding documentation.</p>

<h2>Troubleshooting Common Issues</h2> <ul> <li><strong>No messages decoding at all:</strong> Confirm the RTL-SDR is actually detected (<code>rtl_test</code> should report the device) and that no other process — including a conflicting ADS-B decoder also trying to claim the same dongle — is holding the device open. Running ACARS/VDL2 and ADS-B decoding simultaneously requires two separate RTL-SDR dongles, one per frequency range.</li> <li><strong>Sparse message reception:</strong> Antenna placement is almost always the limiting factor before software configuration — an indoor antenna near a window will hear a fraction of the traffic an outdoor, elevated antenna with a clear sky view will catch.</li> <li><strong>Frequent dropouts or garbled messages:</strong> Check for nearby noise sources (switching power supplies, unshielded USB 3.0 ports on some Pi models are a documented RTL-SDR noise source) and add the USB extension cable and ferrite chokes from the parts list if not already installed.</li> </ul>

<p>An ACARS/VDL2 station is a natural next step for anyone who's already built an ADS-B feeder and wants a genuinely different slice of the same airspace — instead of watching dots move on a map, you're reading the actual operational chatter behind those flights. It runs happily alongside an existing Pi-based ADS-B setup on separate hardware, and the decoded message history builds into a surprisingly interesting log of what's actually happening in the sky overhead.</p>