no-sdr es un software para Linux/Rasberry Pi que convierte los dongles USB RTL-SDR en un receptor de radio web completo. Permite que varios usuarios se conectan a través de su navegador y sintonizan, demodulan y escuchan señales de forma independiente, compartiendo el mismo hardware. Sin plugins ni instalaciones, solo abre una URL. Viene a a ser un WebSDR privado y abierto que puedes ejecutar en tu ordenador o en un contenedor Docker (compose).
El proyecto busca alta fidelidad, procesamiento de señales débiles, calidad casi sin pérdidas, bajo consumo de ancho de banda y que todas las funciones se ejecuten también en arquitectura ARM (RPi/MAC). Para x86 se incluyen cuatro binarios y el nivel de capacidad de tu CPU se detecta al iniciar el contenedor. Los procesadores con extensiones de streaming (SSE/AVX, etc.) ofrecen un rendimiento superior y cada cliente consume menos ciclos de CPU. Todo esto es de código abierto.
También incluye un botón para identificar la canción que estás escuchando (necesitas algunas claves API para Audd).
Instalación
Se presupone que cuenta con una Raspberry Pi con piOS 64 bits y una tarjeta de de suficiente capacidad (p.e. 16 Gb)
Si no tiene acceso via web puede instalar una utilidad que le facilite el acceso como cockpit
sudo apt update
sudo apt install -y cockpit
 |
| https://192.168.1.xxx:9090/ |
Conectarse
Desde macOS abrir terminal
ssh [IP]
o desde el navegador
https://192.168.1.xxx:9090/
o
https://raspberrypi.local:9090
Comprobaciones
Comprobar que esta node.js disponible
node -v
v12.22.12 => v22.22.2
npm -v
7.5.2 => 10.9.7 => 11.15.0
Si no lo esta o no es versión 22.o hay que instalarlo forzardo la ultima versión v22.00
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
También se puede bajar directamente el binario
cd /tmp
wget https://nodejs.org/dist/v22.11.0/node-v22.11.0-linux-armv7l.tar.xz
tar -xJf node-v22.11.0-linux-armv7l.tar.xz
... si no está node.js hay que instalarlo
sudo apt-get install -y nodejs npm
Para npm hay que forzar la ultima versión con
sudo npm install -g npm@11.15.0
Comprobar que está instalado el lenguaje GO
go version
go version go1.24.4 linux/arm64
... en caso de que no esté, hay que instalar Go
sudo apt update
sudo apt install -y golang
Comprobar que están instalados los drivers de SDR
rtl_test
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
Detached kernel driver
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
[R82XX] PLL not locked!
Sampling at 2048000 S/s.
... en caso de que no estén, hay que instalar los drivers de RTL-SDR
sudo apt update
sudo apt install -y rtl-sdr
Instalación
Cuando ya tenga todas las comprobaciones realizadas y el software necesario instalado y en versión llega el momento de instalar el NO-SDR
sudo apt-get update
git clone https://github.com/gbozo/no-sdr.git
cd no-sdr
npm install
npm run build
npm start
Configuración
Modificar el fichero de configuración de NO.SDR para poner la IP local si tiene el dongle SDR conectado directamente a la Raspberry Pi
nano config/config.yaml
source:
type: rtl_tcp
host: 127.0.0.1
port: 1234
 |
| http://xxx.xxx.xxx.xxx:3000/ |
Pruebas y problemas
NO SE OYE
No se oye, dando el siguiente error cuando se intenta poner el SOUND=ENABLE
Para saltarse la limitación de los navegadores de que no reproducen si no es bajo sesión segura una de las soluciones es instalar, configurar y arranca un servidor NGINX (De este problema y de su solución no habal nada el desarrollador)
sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx
sudo nano /etc/nginx/sites-available/no-sdr
server {
listen 80;
server_name raspberrypi.local;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
sudo ln -s /etc/nginx/sites-available/no-sdr /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo systemctl restart nginx
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
Borrar y configurar de nuevo el servidor web
sudo nano /etc/nginx/sites-available/no-sdr
server {
listen 80;
listen 443 ssl;
server_name raspberrypi.local;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
sudo systemctl restart nginx
https://raspberrypi.local
Despues de este proceso de isntalación y configuración de NGINX se consigue que se oiga (problema solucionado), pero se entrecorta mucho. Hay que buscar solución a este sgegundo problema
SE ENTRECORTA
Se han probado las siguientes modificaciones
Disminuir el tamaño de la clave de cifrado
sudo nano /etc/nginx/sites-available/no-sdr
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
Bajar el sampleRate por defecto 2400000 a 1.200000 o 1.100000, para velocidades mas bajas comienza a reproducirse muy leto. Ajustelo a la potencia del procesador de la Raspberry Pi que tenga en en config/config.yaml (Raspberry Pi 3 le va justito)
nano config/config.yaml
PROBLEMAS DEL VFO
NO RESPONDE DE FORMA INMEDIATA
NO ES DE BANDA CONTINUA
SW solo de 5500 a 6600 kHz
Son temas de la versión y no podemos hacer nada al respecto
ARRANQUE
Procedimiento de arranque (Que no es trivial y hay que automatizar)
- Arrancar rtl en back
- rtl_tcp -a 127.0.0.1 -p 1234 > /dev/null 2>&1 &
- Arrancar NGINX
- sudo systemctl restart nginx
- Arrancar npm
- Conectarse
- https://raspberrypi.local/
Conclusiones
Necesita mejorar y completar el proceso de instalación y la resolución de problemas, en su estado actual no es muy usable,
Ver también
Otras instalaciones realizadas con sobre Raspberry Pi + SDR
Referencias
Advertencia importante
Las modificaciones, configuraciones y procedimientos descritos en este sitio pueden implicar riesgos técnicos, legales o de seguridad. El autor no se responsabiliza del mal funcionamiento de los equipos, daños permanentes, pérdida de garantía ni de posibles infracciones legales derivadas del uso de esta información.
El lector asume plena responsabilidad por cualquier acción que decida realizar basándose en el contenido de este blog.
© 2026 EA5JTT. Queda prohibida la reproducción total o parcial sin autorización expresa del autor.