Run an OpenSDR station
This guide takes you from a box of parts to a station that anyone can listen to on the OpenSDR map. With the OpenSDR SD card image you need no terminal at all, and it takes about half an hour.
1. What you need
| Part | Notes |
|---|---|
| Raspberry Pi 4 or 5 | 2 GB of memory is enough. A Pi 3 B+ can run one receiver |
| Official Pi power supply | A weak supply is the most common cause of a station that drops out. The owner panel warns you about under-voltage |
| microSD card, 16 GB or more | A good brand (A1 or A2 rated) |
| RTL-SDR USB receiver ("dongle") | For example the RTL-SDR Blog V3 or a Nooelec NESDR. Up to four per station |
| Antenna for what you want to receive | Outdoors and high up makes the biggest difference. A 2 m / 70 cm vertical, an airband ground plane, a marine whip |
| Network | Ethernet is best; Wi-Fi works. No ports need to be opened on your router: the station only makes outgoing connections |
| Powered USB hub | Only for more than one dongle |
Each dongle listens to one slice of the radio spectrum, at most about 2.4 MHz wide (for example 144.0–146.0 MHz). Listeners can tune anywhere inside that slice, but not outside it. Four dongles give four separate slices, not the whole radio spectrum.
The RTL-SDR Blog V4 needs a newer driver than the one Raspberry Pi OS ships. Until OpenSDR installs it for you, a V3 or a Nooelec dongle is the easier choice.
2. Make an account
- Open
https://opensdr.online/owner/registerand sign up. - Open the link in the email we send you. You cannot add a station until your email address is confirmed.
3. Put OpenSDR on the SD card
- Download the OpenSDR station image: opensdr-station.img.xz (about 1 GB). It is Raspberry Pi OS Lite (64-bit) with the OpenSDR software already installed and set up for this server.
- Check the download (optional, but it catches a broken download). Download its checksum file, then compare the long number it contains with the one this command prints:
- Windows (PowerShell):
Get-FileHash .\opensdr-station-*.img.xz - macOS:
shasum -a 256 opensdr-station-*.img.xz - Linux:
sha256sum opensdr-station-*.img.xz
- Windows (PowerShell):
- Install Raspberry Pi Imager from raspberrypi.com and start it. Choose your Pi model; for the operating system scroll down to Use custom and pick the
.img.xzfile you downloaded (no need to unpack it); then choose your microSD card. - When Imager asks whether to apply OS customisation, choose Edit settings if you want to: set your Wi-Fi (not needed with a network cable) and, if you would like to log in to the Pi later, a user name and password and Enable SSH. Everything else works without it.
- Write the card. Imager checks it and ejects it.
Wi-Fi without Imager's settings
The card has a drive called bootfs with a file opensdr.txt. Open it with any text editor (Notepad works), fill in your network, and save:
wifi_country=KW
wifi_ssid=My home network
wifi_password=my wifi password
The same file holds the server address and the station's network name (hostname), and switches the SD card protection (below) on or off. The station reads it every time it starts, so you can change your Wi-Fi later by editing it on a computer.
4. Start the station
Put the card in the Pi, plug in the antenna, the dongle and the network cable if you use one, then the power supply. The first start takes two or three minutes: the Pi sets itself up and restarts once.
5. Link the Pi to your account
On a phone or computer on the same network as the Pi, open http://opensdr.local/ (if that does not open, use the Pi's address from your router's list of devices, such as http://192.168.1.23/). This status page shows a claim code such as ABCD-EFGH, a link and a QR code. Then either:
- open
https://opensdr.online/owner/claim(in the owner panel: Claim a station), enter the code, the station's name and its location; or - in the OpenSDR phone app, sign in, then Add a station and scan the QR code.
Within a few seconds the status page says Online. The code is valid for 30 minutes; after that the page shows a new one.
SD card protection. After its first start the station runs with a read-only system: every restart starts clean, and a power cut cannot damage the SD card. The station's own settings, its link to your account and its updates are kept on a separate part of the card. To install other software on the Pi, set read_only=no in opensdr.txt, restart it, and set it back to yes when you are done.
Install by hand instead
Use this if you prefer to start from plain Raspberry Pi OS, or want OpenSDR on a Pi that already runs other things.
-
Write Raspberry Pi OS Lite (64-bit) with Raspberry Pi Imager. In its OS customisation set a hostname such as
opensdr, a user name and password, your Wi-Fi if needed, and turn on SSH. -
Start the Pi, wait about two minutes, and connect from your computer (Windows Terminal, macOS Terminal or PuTTY):
ssh your-user-name@opensdr.local -
Install the OpenSDR software:
sudo apt update && sudo apt install -y git git clone --depth 1 https://github.com/amzad78692/opensdr-web.git opensdr cd opensdr/pi sudo ./install.shThe installer sets up the radio driver, the OpenSDR service, the status page and two watchdogs that restart the station by themselves if it ever hangs.
-
Tell the station where your server is: run
sudo nano /etc/opensdr/node.env, change the first line toOPENSDR_SERVER=https://opensdr.online, save with Ctrl+O, Enter, and close with Ctrl+X. -
Restart once, so the radio driver and the hardware watchdog take effect:
sudo reboot. -
Link it as in step 5: the status page at
http://opensdr.local/shows the claim code, and so does the log (journalctl -u opensdr-node -f).
A hand-installed station does not have the read-only SD card protection.
About the location: it is shown publicly on the map. Enter a nearby point, such as your neighbourhood, rather than your exact address if you prefer.
Moving to a new Pi: set up the new Pi the same way (a new card, or the same card in the new Pi), and when you claim it choose A replacement Pi for one of my stations. The old Pi stops working for that station.
6. Choose what your station receives
In the owner panel, open My stations, your station, then the Dongles tab. Each dongle the Pi found is listed. For each one, set:
- Center frequency: the middle of the slice you want, in Hz. 145 MHz is
145000000. - Sample rate: how wide the slice is. 2.048 MS/s gives about 2 MHz: centered on 145 MHz, listeners can tune from about 144.0 to 146.0 MHz. Lower rates use less of the Pi's processor.
- Policy: what listeners may do.
- Open: tune anywhere in the slice.
- Band-locked: tune only between a start and an end frequency you set, for example only the repeater part of a band.
- Fixed: one frequency you choose; listeners cannot retune.
The form shows what listeners will be able to tune before you save. The Pi picks up the change within 15 seconds.
Some starting points:
| To receive | Center frequency | Sample rate |
|---|---|---|
| 2 m amateur band | 145000000 | 2.048 MS/s |
| Airband (part of it) | the middle of your local tower and approach frequencies | 2.4 MS/s |
| Marine VHF | 156800000 | 2.048 MS/s |
| 70 cm amateur band (part of it) | 433500000 | 2.4 MS/s |
| PMR446 | 446100000 | 1.024 MS/s |
Supported modes are NFM, AM, USB, LSB and CW. Broadcast FM (WFM) is not supported.
Only receive what you are allowed to share. In many countries it is illegal to receive, or to pass on, some transmissions: often police, emergency services, private business radio or phone calls. Check your local rules and set your frequencies and policy so that your station stays within them. Never connect a transmitter to your station. See the terms of use.
7. Check that it works
- Your station page (Open public page on the station in the owner panel, or the station on the home page map) shows Online. Press play and listen.
- The station's Health section shows its temperature, load, software version and any power problems. The panel marks the temperature from 70 °C; at about 80 °C the Pi slows itself down. Give it a case with a fan, or more air.
- The Listening tab shows when people listened and to what.
8. Day to day
- Pause your station from the owner panel or the app when you need the dongle yourself or are working on the antenna. Paused stations disappear from the map until you resume them.
- Remote control: Restart agent restarts the OpenSDR software; Rescan dongles looks for receivers you plugged in or out (only while nobody is listening).
- Updates install themselves. If an update fails to start, the station goes back to the previous version by itself and the Health section says so.
- Change the name, description, location or listing under the station's settings. Turn off Listed in the public directory to keep the station off the map.
Troubleshooting
| Problem | What to try |
|---|---|
http://opensdr.local/ does not open |
Your phone or computer must be on the same network as the Pi. Use the Pi's address from your router's device list instead. On Wi-Fi, check wifi_ssid, wifi_password and wifi_country in opensdr.txt (letters are case-sensitive); a network cable avoids the question |
| Status page says Cannot reach the server | The Pi has no internet, or the server= line in opensdr.txt is wrong (it must start with https://) |
| "This code is not valid or has expired" | Use the newest code on the status page; codes change every 30 minutes |
| No dongles in the Dongles tab | Unplug the dongle and plug it in again, then Remote control → Rescan dongles. On a hand-installed Pi, reboot once after the install; lsusb should list "Realtek RTL2838" |
| Station shows Offline | Is the Pi on and online? Its status page tells you what it is doing. Logged in, systemctl status opensdr-node shows whether the service runs and journalctl -u opensdr-node -n 50 the last messages |
| Under-voltage warning | Use the official power supply, a shorter USB cable or a powered USB hub |
| Only noise | Check the antenna and its cable, and that the center frequency is right. Try a known busy frequency, such as a local repeater or airport tower |
| "Outside what this station can receive" | The listener's frequency is outside the slice: change the center frequency or sample rate, or the policy's band |
Still stuck? Write to the contact address on the OpenSDR website. Include what the status page says or, if you can log in, the last 50 lines of journalctl -u opensdr-node.