raspberry-websdr
raspberry-websdr copied to clipboard
Raspberry PI based WebSDR server
WebSDR node based on a Raspberry PI
Leer en Inglés, Español. Read in English, Spanish.

- WebSDR node based on a Raspberry PI
- General hardware requirements
- Required setup and software
- Install WebSDR
- Single band WebSDR
- Time-controlled, dual band WebSDR
- Antenna controller
- Enable WebSDR for dual band operation
- Cron
- Manual control
- GPIO Setup
- Software reset
- How to fix the LibSSL issue
- Blacklist RTL modules
- RTL SDR direct sampling (500khz - 28.8Mhz without upconverter!)
This WebSDR setup covers a dual band receiver (80/40 meters bands) time-based switched. It uses a relay to switch between antennas who is managed by one GPiO pin on the Raspberry PI (using a driver transistor).
Very special thanks to Pieter PA3FWM, Mark G4FPH and Jarek SQ9NFI for the helpful hand on configuring the progfreq setting.
General hardware requirements
- Raspberry PI 3
- Raspbian 9 installed and working
- Internet access setup and working
- RTL-SDR USB Dongle
Required setup and software
sudo apt update && sudo apt upgrade
sudo apt install -yq g++ make libsigc++-1.2-dev libgsm1-dev libpopt-dev tcl8.5-dev libgcrypt-dev libspeex-dev libasound2-dev alsa-utils libqt4-dev
sudo apt install -yq libsigc++ cmake groff rtl-sdr libpng12-0 libusb-1.0-0-dev
Install WebSDR
- Ask Pieter to get a copy of WebSDR.
- Copy the websdr-rpi binary and files to your home directory (/home/pi/)
- Edit websdr.cfg (for single band use), or websdr-80m.cfg and websdr-40m.cfg (for dual band use) to fulfill your configuration
- Create Systemd units to manage websdr and rtl_tcp
sudo cp etc/systemd/system/[email protected] /etc/systemd/system/[email protected]
sudo cp etc/systemd/system/[email protected] /etc/systemd/system/[email protected]
Single band WebSDR
The setup described in this section is the most usual: a single band SDR receiver (say, 40m band).
- Create systemd units to manage
websdrandrtl_tcp:
sudo cp etc/systemd/system/websdr.service /etc/systemd/system/websdr.service
sudo cp etc/systemd/system/[email protected] /etc/systemd/system/[email protected]
- Enable the
rtl_tcpsystemd unit:
sudo systemctl enable [email protected]
- Enable the
websdrunit:
sudo systemctl enable websdr.service
Time-controlled, dual band WebSDR
The setup described in this section is a more powerful one, where the Raspberry PI switches the WebSDR bands according to the time you define in crontab.
Antenna controller
This WebSDR setup uses one RTL-SDR dongle for two bands (40/80 meters), crontab takes control of which band is working. As wave length isn't the same on both two bands, I'm using a GPiO port to switch between them using a DPDT relay. GPIO3 is controlled by the check_band.sh cron script.

Enable WebSDR for dual band operation
- Enable just the
rtl_tcpsystemd unit. Websdr is managed by crontab
sudo systemctl enable [email protected]
Cron
- I built a crontab configuration to switch between 40m and 80m bands time-based. Just import the crontab lines into your crontab.
Manual control
You can always control band changes manual way. Disable cron lines to avoid automatic setup changes. Then you can use
sudo systemctl stop [email protected]
sudo systemctl start [email protected]
Where 40 is the band you want to receive. You can use and setup almost any band you want, as long as you had setup your websdr-{{band}}m.cfg
GPIO Setup
- Copy the etc/rc.local file to your /etc/rc.local
sudo cp etc/rc.local /etc/rc.local
- Check and match GPIO ports for relay control to switch antennas and a button to soft reset the Raspberry pi.
Software reset
- There is a Python script that handles Raspberry PI reboots from a hardware switch without killing power.
- Check the /etc/rc.local file and match the desired GPIO port for this task.
- Copy lib/systemd/system/reset.service to /lib/systemd/system/reset.service
sudo cp opt/reset.py /opt/reset.py
sudo cp etc/systemd/system/reset.service to /etc/systemd/system/reset.service
chmod 644 /lib/systemd/system/reset.service
systemctl enable reset.service
systemctl start reset.service
This is the software reset schematic. It has a 5v pull-up signal between a 10k resistor.

How to fix the LibSSL issue
I've noticed several websdr nodes that fails to start websdr-rpi using Raspbian. That's due a missing library called libcrypto.
pi@raspberrypi:~/dist11 $ ./websdr-rpi websdr-40m.cfg
./websdr-rpi: error while loading shared libraries: libcrypto.so.1.0.0: cannot open shared object file: No such file or directory
Fix is really easy:
sudo dpkg -i libssl1.0.0_1.0.1t-1+deb8u11_armhf.deb
Blacklist RTL modules
You'll need to blacklist some modules in order to get rtl_tcp working. Edit or create the file /etc/modprobe.d/blacklist.conf with the following content:
blacklist dvb_usb_rtl28xxu
RTL SDR direct sampling (500khz - 28.8Mhz without upconverter!)
If your SDR dongle supports direct sampling (such as RTL-SDR.com V3 receiver), there's a way to receive 500khz-28.8mhz without an external upconverter hardware, easing the node build. Install cmake first!
- Unzip rtl-sdr-driver-patched.zip and prepare the environment to build
unzip rtl-sdr-driver-patched.zipcd pkg-rtl-sdr/buildrm *
- Build it
cmake ../ -DINSTALL_UDEV_RULES=ON -DDETACH_KERNEL_DRIVER=ONmakesudo make installsudo ldconfig
Once finished, configure rtl_tcp to use direct sampling mode with the -D 2 switch as follows:
/usr/bin/rtl_tcp -s1024000 -g10 -d0 -p9990 -D2Don't forget to remove theprogfreqline from the websdr configuration file(s).