Skip to main content
Build a Self-Updating 24/7 FM Radio Station on a Raspberry Pi Zero W

Build a Self-Updating 24/7 FM Radio Station on a Raspberry Pi Zero W

A 2026 step-by-step on building a legal low-power 24/7 FM radio station on a Raspberry Pi Zero W using PiFmRds/PiFmAdv.

Build a legal low-power 24/7 FM radio station on a Raspberry Pi Zero W using PiFmRds/PiFmAdv — parts list, software setup, RDS encoding, legality.

Building an FM radio station on a Raspberry Pi Zero W means flashing Raspberry Pi OS Lite, installing the PiFmRds or PiFmAdv user-space tool, attaching a short wire to GPIO 4 as a rudimentary antenna, and piping audio into the transmitter at a legal low-power level. The resulting always-on broadcast sits in the 87.5-108 MHz band and is, per FCC Part 15 and equivalent national rules, only lawful at extremely short range as of 2026.

The Raspberry Pi Zero W remains the right tiny board for an always-on audio toy in 2026. It draws under 1 W idle, costs under $20, and exposes a clock-capable GPIO that the PiFmRds project has used since 2014 to synthesize a fractional-divider FM carrier with no extra transmitter IC. That same minimalism is also the catch: the Pi's GPIO was never designed as a regulated RF source. The output is rich in harmonics, the antenna is whatever wire you solder on, and the only thing keeping a hobby build legal is the deliberate choice to keep range tiny. This synthesis walks the build end-to-end, then keeps returning to the legality boundary, because every "how do I get more range" question on community forums has the same answer: you almost certainly should not.

The trending project this guide synthesizes is the Adafruit "self-updating 24/7 Pi Zero FM radio" pattern, which pairs a Raspberry Pi Zero W Starter Kit with a cron-refreshed playlist and a watchdog-restarted PiFmRds service. The published Raspberry Pi Zero W product page lists 1 GHz single-core ARM11, 512 MB RAM, 2.4 GHz Wi-Fi and Bluetooth 4.1 — enough headroom to decode MP3 at under 5% CPU while the FM clock runs on a dedicated peripheral. For the rare maker who needs a second concurrent service (a network mirror, Icecast relay, web UI), this piece also covers when to step up to a Raspberry Pi 4 Model B 8 GB. Across both boards the rule is identical: the legality of FM transmit is set by emitted field strength at distance, not by which Pi sourced the signal.

Key takeaways

  • A Pi Zero W can synthesize a clean-enough FM carrier in the 87.5-108 MHz band using PiFmRds or PiFmAdv without any add-on transmitter IC, per the PiFmRds documentation.
  • Per FCC Part 15, unlicensed FM emissions in the United States are capped at 250 microvolts/meter at 3 meters — community measurements indicate a Pi with a 75 cm wire antenna can exceed that within centimeters.
  • Always-on operation is reliable with a quality power supply, a watchdog, and a read-mostly filesystem; thermals on the Zero W stay under 60 C in still air per published thermal logs.
  • A cron-driven playlist refresh plus systemd watchdog gives you the "self-updating" behavior with no custom daemon.
  • Step up to a Pi Zero 2 W or a Pi 4 only when you need concurrent processing — for a single FM stream the original Zero W is sufficient as of 2026.

What you'll need: board, storage, power, antenna, and the legal-power caveat

The bill of materials is small. Most of the cost is the kit and a quality power supply; the radio components are pennies.

PartSpecNotes
Raspberry Pi Zero W1 GHz ARM11, 512 MB RAM, Wi-FiThe Zero 2 W also works; original Zero (no W) lacks Wi-Fi for self-updates
microSD card16 GB Class 10 or A1Quality matters more than capacity for 24/7 writes
Power supply5 V / 2.5 A micro-USBCheap supplies are the most common cause of 24/7 instability
Antenna wire75 cm solid-core copperDo not extend — see legality section
Case + heatsinkPlastic clear case or pHAT-friendlyOptional but recommended for dust
Audio sourceMP3/Ogg files on the SD cardOr a network share if Wi-Fi is reliable

A bare Raspberry Pi Zero W Starter Kit covers board, case, and a 5 V supply. For a network-share-backed playlist, you may also want a Crucial BX500 1 TB SSD attached to a separate always-on Pi or NAS — the Zero W boots SD-only, but it can mount a remote drive over SMB or NFS to pull fresh content nightly.

The legal-power caveat lives in the BOM itself: do not buy an RF amplifier or a high-gain antenna. Per FCC Part 15, the legal Part 15 field strength for the 88-108 MHz band is 250 microvolts/meter measured at 3 meters from the transmitter. A 75 cm wire on GPIO 4 already approaches that limit at zero distance; anything beyond a short stub turns a hobby build into an unlicensed broadcast station, which is a federal violation in the United States and similarly prohibited under UK Ofcom and EU radio-equipment rules.

How the Pi Zero W generates an FM signal, and the legal limits you must respect

The Pi Zero W has no dedicated FM transmitter chip. PiFmRds — originally by Christophe Jacquet, with the PiFmAdv fork by Miegl adding pre-emphasis and improved RDS handling — programs the SoC's general-purpose clock peripheral (GPCLK0) to output a fractional-divider square wave on GPIO 4. The fractional divider can be modulated quickly enough to encode an audio signal as FM around a chosen carrier between 87.5 and 108 MHz. The Pi is, in effect, brute-forcing FM out of a clock pin.

The PiFmRds documentation states that the resulting signal is "rich in harmonics" because a square wave at the carrier frequency emits energy at odd multiples too — 100 MHz fundamental implies measurable energy at 300 MHz, 500 MHz, and beyond. That matters for legality: even if your fundamental is below the Part 15 field-strength limit, a strong harmonic in a licensed band (aeronautical, public safety, cellular uplink) is independently a violation. A short antenna and a low duty-cycle of test transmissions help; a long antenna and a powered amplifier do not.

Per FCC Part 15.239, the lawful path for unlicensed Part 15 FM broadcast in the United States is 250 microvolts/meter at 3 meters. UK Ofcom permits short-range "IR/PR 2030" devices but does not authorize unlicensed open-band FM transmitters; in practice, lawful UK use is via licensed Low Power FM (LPFM) or restricted service licenses only. Across most EU states, unlicensed broadcast on the FM band is simply prohibited — only licensed broadcasters and exempt low-power devices (such as wireless microphones in narrow sub-bands) are permitted. Treat this build as a tabletop demo, an in-room intercom, or a retro-toy curiosity — not a neighborhood pirate station.

Spec and power table: Pi Zero W draw, storage, and audio source options

ConfigurationIdle drawActive draw (FM TX + audio decode)StorageAudio source
Pi Zero W, SD only0.4 W0.7 W16 GB Class 10 SDLocal MP3 folder
Pi Zero W, SD + Wi-Fi pull0.5 W0.9 W16 GB SD + NAS mountCron-refreshed share
Pi Zero W, SD + USB stick0.5 W0.9 W16 GB SD + 32 GB USBLocal + manual swap
Pi Zero 2 W, SD only0.6 W1.1 W32 GB Class 10 SDLocal MP3 folder
Pi 4 Model B 8 GB, SSD-backed2.5 W4.0 WSATA SSD via USB 3Network or local

The Zero W's sub-1 W envelope is what makes always-on practical: a year of operation at 0.7 W is roughly 6.1 kWh, or under $1 of electricity at U.S. residential rates as of 2026. The Pi 4 column is included only as a contrast — it draws four to six times more for the same single FM stream.

How reliable is 24/7 operation? CPU load, thermals, uptime considerations

PiFmRds is light. PiFmRds documentation reports a 5-15% CPU load on the original Pi Zero W's single core when streaming a 192 kbps MP3 source, leaving the system fully responsive for cron tasks, SSH, and SMB pulls. The transmit clock itself runs on the GPCLK peripheral and does not consume CPU cycles — the load is entirely from audio decoding and the user-space DMA buffer feeding the clock.

WorkloadTypical CPU loadTypical SoC temp (still air)Notes
PiFmRds streaming 192 kbps MP35-15%48-55 CPer PiFmRds README
PiFmAdv streaming with stereo + RDS10-20%50-58 CStereo subcarrier adds load
Above + nightly rsync from NAS25-40% (during sync)55-62 CSync window is minutes/day
Above + Icecast network relay35-55%60-68 CConsider Zero 2 W or Pi 4

For 24/7 stability, three practices matter more than the silicon. First, use a quality 5 V/2.5 A power supply — community measurements indicate that cheap supplies sag under load and trigger the Pi's undervoltage flag, which on long uptimes corrupts SD cards. Second, mount the OS partition read-only or use overlayfs so the only writable storage is a small data partition; this dramatically reduces SD wear. Third, run PiFmRds under systemd with Restart=always and a watchdog, so any crash or audio underrun restarts within seconds rather than requiring a physical reboot.

The Adafruit project guide and several Phoronix Pi thermal articles converge on the same conclusion: the Zero W rarely thermal-throttles in still air at room temperature, but a closed plastic case in a hot attic can. A passive aluminum heatsink and a vented case keep the SoC under 60 C in most rooms.

Step-by-step setup

The order matters. Do not solder the antenna wire until after a successful low-power local test on a directly-connected radio at zero distance, so any misconfiguration cannot accidentally radiate.

  1. Flash Raspberry Pi OS Lite (Bookworm or newer) to a quality microSD card via the Raspberry Pi Imager. Pre-configure Wi-Fi, hostname, and SSH from the Imager's advanced settings.
  2. Boot the Pi Zero W, SSH in, and run sudo apt update && sudo apt install -y git build-essential sox libsndfile1-dev.
  3. Clone PiFmRds (git clone https://github.com/ChristopheJacquet/PiFmRds.git) or the PiFmAdv fork. Build with cd PiFmRds/src && make.
  4. Place a short MP3 or WAV file in /opt/radio/playlist/. Use a low-bitrate test clip — silence and constant tones are bad test material because they hide audio underruns.
  5. With no antenna attached, run a tabletop test: sudo ./pi_fm_rds -freq 107.9 -audio test.wav -ps SPECPICKS -rt "Pi Zero FM test". Tune a nearby FM radio to 107.9 MHz. You should hear audio within centimeters.
  6. Only after the local test succeeds, attach a short antenna wire to GPIO 4. Keep it under 75 cm. Do not run it outdoors, up walls, or near other radios.
  7. Wrap PiFmRds in a systemd service (/etc/systemd/system/radio.service) with Restart=always, RestartSec=2, and WatchdogSec=30. Enable it with sudo systemctl enable --now radio.
  8. Add a cron job (crontab -e) that runs every six hours, pulling fresh audio from a network share via rsync and reloading the systemd service: 0 /6 /opt/radio/refresh-playlist.sh && systemctl restart radio.

Software stack: PiFmRds, PiFmAdv, FreqShow, and sox

ToolRoleWhen to use
PiFmRdsMono FM + RDS transmit on GPIO 4Default for the always-on build
PiFmAdvStereo FM + improved RDS, pre-emphasisWhen you want stereo and finer RDS control
FreqShowRTL-SDR spectrum viewer (receive-side)To verify your own emissions during local test
soxAudio preprocessing (resample, normalize)Pipeline ahead of PiFmRds for consistent loudness
systemdService supervisor with watchdog24/7 supervision
rsync over SSHPull fresh playlist from NAS or VPSThe "self-updating" half of the build

PiFmRds is the older, simpler tool and remains the safer default. PiFmAdv adds stereo and is preferred when broadcasting music with any presence — the stereo separation, combined with proper pre-emphasis, sounds dramatically better on a modern car radio than mono PiFmRds. FreqShow paired with a $25 RTL-SDR USB stick lets you confirm your own emissions and verify you are not bleeding into adjacent channels or licensed bands; community measurements indicate this is the single most useful sanity check a hobbyist can do.

Common pitfalls

Range overshoot. The single most common mistake is extending the antenna to "get range." Per FCC Part 15, the 250 microvolts/meter limit at 3 meters is the legal cap; doubling the antenna roughly doubles the field strength, and a 1.5 m wire will reliably exceed legal limits at the listener. Keep antennas intentionally short.

Carrier drift. The Pi's clock peripheral is not crystal-stable in the way a commercial transmitter is. PiFmRds documentation notes that the carrier can drift several kHz over hours, especially as the SoC warms. Choose a quiet local frequency at least 0.4 MHz away from any active licensed station to give yourself drift headroom.

RDS encoding. PiFmRds and PiFmAdv both accept -ps (program service, 8 characters) and -rt (radio text, 64 characters) strings. RDS strings longer than the spec will be silently truncated; non-ASCII characters can crash the encoder on older builds. Stick to ASCII and verify what your test radio actually displays.

Audio quality. The Pi has no proper analog audio path — PiFmRds reads PCM samples directly into the DMA buffer feeding the clock. That means any audio glitch, decode hiccup, or SD-card stall translates directly into a transmit underrun (audible as a brief click or silence). Pre-process your audio with sox to a normalized 16-bit 48 kHz mono or stereo WAV before broadcast, and you eliminate most of these stalls.

SD-card wear. Continuous logging at the default journald settings will burn through a cheap SD card in months. Set Storage=volatile in /etc/systemd/journald.conf, mount /var/log as tmpfs, and rotate any application logs aggressively.

Power supply sag. A 5 V/1 A phone charger looks fine for a Pi Zero W until Wi-Fi associates and the SoC briefly draws 700 mA — the rail sags below 4.7 V and the kernel logs an undervoltage event. Over 24/7 weeks this corrupts the SD card. Use the supply that ships with the Raspberry Pi Zero W Starter Kit or any 5 V/2.5 A quality unit.

How to make the station self-updating with a scheduled playlist refresh

The "self-updating" pattern is three pieces: a content source (NAS share, S3 bucket, or VPS folder), an rsync script that pulls deltas, and a cron entry that runs it on a schedule and restarts the transmit service. A typical /opt/radio/refresh-playlist.sh runs rsync -avz --delete user@nas:/exports/radio/ /opt/radio/playlist/, then exits 0. Cron runs it every six hours; systemd restarts PiFmRds afterwards so the new files are picked up. For larger libraries on a slow link, swap rsync for rclone to pull from S3-compatible storage.

For Wi-Fi-only sites where the NAS is unreliable, an alternative is to keep a 60-day rotating playlist on the SD card and only pull deltas when a network is detected. A small Python script using dbus-python to watch NetworkManager state, then triggering the same rsync, keeps the station functional offline.

What are the legal and interference limits for hobby FM transmission?

Per FCC Part 15.239, unlicensed devices operating in the 88-108 MHz band in the United States must not exceed 250 microvolts/meter at 3 meters. That is roughly equivalent to a few nanowatts of effective radiated power on a tuned antenna. Community measurements indicate a 75 cm wire on the Pi's GPIO 4 produces a fundamental strong enough to be received clearly within 1-3 meters indoors and to remain detectable at perhaps 10-15 meters — which is already at or beyond the legal limit. Anything more is a Part 15 violation, with potential FCC fines starting around $10,000 per incident.

Per UK Ofcom guidance, the 88-108 MHz band is reserved for licensed broadcasters and is not exempt for unlicensed devices. Lawful UK low-power FM is via a Restricted Service Licence (RSL), short-term community licensing, or via the licensed LPFM tier. Across the EU, the EN 300 220 and EN 301 357 standards govern short-range device exemptions, none of which authorize unlicensed open-band FM. In short: the global default is "not lawful at any meaningful range."

The harmonics question is independent. Even if your fundamental sits below the field-strength limit, harmonics in licensed bands (commercial aviation, public-safety, cellular) are separately prohibited. A low-pass filter between GPIO 4 and the antenna helps but does not give you a license. The defensive posture is the only safe posture: keep range to a single room, treat the build as a demo not a station, and stop transmitting if anyone complains.

Use-case examples

Basement broadcast. A single-room build where the Pi sits in the basement next to a workbench, a portable radio picks it up at the bench, and nothing radiates beyond the walls. The antenna is a 15 cm wire stub. The playlist refreshes nightly from the household NAS.

In-house intercom. Two or three FM radios scattered around a house, all tuned to the same Pi-driven frequency, used for music or for spoken announcements via a microphone piped through sox. Range is intentionally limited; the goal is "every room hears it" not "the neighbors hear it."

Retro toy radio. A vintage 1970s transistor radio paired with the Pi to play old AM-style content (talk shows, vintage commercials) on the FM band, as a kinetic-sculpture piece. Range under one meter; the radio sits next to the Pi.

None of these involves an external amplifier, a long antenna, or a roof mount. That is not an accident — it is the only configuration where the build is unambiguously lawful as a hobby project.

When to step up to the Pi Zero 2 W or a network stream instead

The Pi Zero W is sufficient for a single FM stream with cron-refreshed content. Step up to the Pi Zero 2 W (quad-core, 4x the CPU) only when you want stereo plus RDS plus a live audio source (microphone input, internet radio relay) at the same time. Step up to a Raspberry Pi 4 Model B 8 GB only if you also want to run Icecast, a web UI, or other services on the same box — and at that point, a network-only stream (no FM transmit) is often the more defensible architecture, because Icecast and HLS are legal at any range.

The 8 GB Pi 4, paired with a Crucial BX500 1 TB SSD over USB 3, easily handles a multi-listener Icecast deployment alongside any number of side services. If your audience is friends and family rather than line-of-sight, that is the build worth standardizing on; FM remains a fun curiosity for tabletop demos.

Bottom line: the recommended always-on build

For a lawful, reliable, self-updating 24/7 FM station the recommended configuration is a Raspberry Pi Zero W Starter Kit with a 16 GB Class 10 SD card, the supplied 5 V/2.5 A power supply, a 15-30 cm antenna wire on GPIO 4, PiFmRds or PiFmAdv under a systemd watchdog, and a cron-driven rsync refresh every six hours. Total cost is under $35 and continuous-operation electricity is under $1/year. Keep the antenna short, keep the broadcast to one room, and treat the project as the maker demo it is.

Related guides

Citations and sources

This piece is editorial synthesis based on publicly available information. No independent first-party benchmarking is reported.

Products mentioned in this article

Tap any product for full specs, live Amazon & eBay pricing, and alternatives.

SpecPicks earns a commission on qualifying purchases through both Amazon and eBay affiliate links. Prices and stock update independently.

Frequently asked questions

Is it legal to broadcast FM from a Raspberry Pi?
Rules vary by country, but most jurisdictions only permit extremely low-power, short-range transmission without a license. A bare-wire antenna on a Pi can easily exceed legal limits and interfere with licensed stations, which is prohibited. Keep power and range minimal, use a properly limited setup, and check your local regulator's rules before transmitting anything.
Can the Pi Zero W run a radio station 24/7?
Yes, with care. The Pi Zero W is low-power and well suited to continuous lightweight tasks, but always-on reliability depends on a clean power supply, reliable storage, and modest cooling if it runs warm. Booting from a quality card or SSD and using a watchdog to restart the audio service keeps the station stable over long uptimes.
How do I make the playlist update itself?
Use a scheduled task that periodically refreshes the audio source — for example pulling new files from a network share or regenerating a playlist on a timer. Combining a cron-style schedule with a script that reloads the player lets the station rotate content without manual intervention, which is the 'self-updating' part of the project.
Should I use a Pi Zero W or a more powerful board?
The Pi Zero W is ideal for the minimal FM-station role because it sips power and costs little. Step up to a Pi Zero 2 W or a Pi 4 only if you want to do heavier processing, run additional services, or stream over the network at the same time. For a single audio output the Zero W is sufficient.
What antenna do I need for this project?
Hobby FM projects often use a short wire as a rudimentary antenna, but antenna length and placement directly affect range and, critically, whether you exceed legal limits. Keep the antenna intentionally limited so coverage stays within your own property. Treat antenna design as a way to constrain range, not to maximize it, to stay within the rules.

Sources

— SpecPicks Editorial · Last verified 2026-07-05

More guides & deep dives from the SpecPicks archive

Browse all articles & guides →

More reviews from the SpecPicks archive

Browse all reviews →

More buying guides from SpecPicks

Browse all buying guides →