Raspberry Pi como RX WSPR: rtlsdr-wsprd

Si queremos disponer de un receptor de WSPR  en una  Raspberry Pi podemos usar un dongle RTL-SDR original para recibir HF y el software rtlsdr-wsprd que corre sobre una Raspberry Pi OS 32Bits (ATENCION sobre la versioón 64b da error en el make final “clang: error: clang frontend command failed with exit code 139 (use -v to see invocation)”) 

El software está muy bien pero el proceso de instalación es largo y tedioso y nadie asegura un final feliz. 


Pasos

  • Descargar e instalar Raspberry Pi OS 32b con Raspberry Pi Imager, aprovechando este paso para definir el usuario y la contraseña, la red WiFi, el teclado, el uso horario, etc. en una tarjeta microSD
  • Arrancará definirá cosas del sistema y se rearrancará solo, sacando ya el escritorio
  • Introducir la tarjeta de memoria en la Raspberry y conectarla a la alimentación.
  • Abrir un terminal y actualizar sistema (Recomendable)
    • sudo apt-get update && sudo apt-get upgrade
  • Descargar dependencias
    • sudo apt-get update && sudo apt-get -y install build-essential clang cmake libfftw3-dev libusb-1.0-0-dev libcurl4-gnutls-dev help2man ntp git
  • Instalar rtl-sdr
    • git clone https://github.com/osmocom/rtl-sdr
    • cd rtl-sdr
    • mkdir -p make
    • cd make
    • cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DDETACH_KERNEL_DRIVER=ON -Wno-dev ..
    • make
    • sudo make install
    • cd ../..

  • Clonar repositorio rtlsdr-wsprd
    • git clone https://github.com/Guenael/rtlsdr-wsprd
  • Build 
    • make
    • sudo make install
    • cd rtlsdr-wsprd
  • Star 
    • Ejemplo: rtlsdr_wsprd -f 2m -c A1XYZ -l AB12cd -g 29

    Pruebas

    rtl_test este comando de consola nos comprueba que encuentra el RTL-SDR conectado al puerto USB de la Raspberry Pi

    Errores 
    • No supported devices found: compruebe la conexión
    • Please fix the device permissions: https://github.com/jopohl/urh/wiki/SDR-udev-rules que consiste en crear un fichero /etc/udev/rules.d/10-rtl-sdr.rules con un contenido especifico (ojo hay que dar permisos al fichero, y podian venir ya con la instalación), tras ello hay que ejecutar el comando sudo udevadm control --reload-rules, desconectar y conectar el RTL-SDR
    No arranca automáticamente: basta con incluir el comando de arranque en el fichero /etc/rc.local, para ello podemos editarlo de la siguiente forma o con el editor de Raspberry Pi OS
    • sudo nano /etc/rc.local 
    No ejecuta el carrusel por las bandas:  con lo que es monobanda y no multibanda, en el enlace hay una ingeniosa solución https://it9ybg.blogspot.com/2018/02/tutorial-wspr-reception-band-change.html 

    • Crear un fichero apra cada banda del tipo, cambiando /home por su directorio
      • #!/bin/bash
      • #
      • # # # # Edit following variable with your correct data # # # #
      • call="put your call"
      • gain="-a 1"
      • locator="put your locator"
      • hz="14.0956M"
      • info_rx="Start reception 20 meters"
      • # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ##
      •     sleep 1
      •       pgrep rtlsdr_wsprd > /dev/null 2>&1
      •        if [ $? -eq 0 ]; then
      •          echo $'\n'"---Kill rtlsdr_wsprd pid---" >> /home/pi/Desktop/wsprd
      •         killall rtlsdr_wsprd &>> /home/pi/Desktop/wsprd
      •        fi
      •          echo $'\n'"$(date)" >> /home/pi/Desktop/wsprd
      •        echo "$info_rx"$'\n' >> /home/pi/Desktop/wsprd
      •      sleep 1

      •    /home/pi/rtlsdr-wsprd/rtlsdr_wsprd -f "$hz" -c "$call" -l "$locator" "$gain" -d 2 &>> /home/pi/Desktop/wsprd &
    • Cmabiar los mermisos con chmod -x <nombre fichero>, igual necesita declarara chmod 777 <nombre fichero<
    • Ve r directorio con pwd
    • Crear fichero en cron sudo crontab -e
    • Ejecutar con ./10m por ejemplo
    • para parar killall rtlsdr_wsprd
    • ps muestra los procesos
    • CRONTAB
      • crontab -l => lista las tareas
      • sudo systemctl status cron => muestra su estado
      • sudo systemctl enable cron => arranca cron 
      • sudo systemctl stop cron => para cron
    Se observa que no hace el carrusel por las bandas de radioaficionado, pero tiene solución.

    Tampoco se especifican los valores de los parametros con los que se invoca el receptor pero tambien tiene solución entrando en el fuente 
    rtlsdr_wsprd.c

    Basicos
    -f dial frequency [(,k,M) Hz] or band string If band string is used, the default dial frequency will used: LF MF 160m 80m 60m 40m 30m 20m 17m 15m 12m 10m 6m 4m 2m 1m25 70cm 23cm
    -c your callsign (12 chars max)"
    -l your locator grid (6 chars max)
    -g gain [0-49] (default: 29)
    Opciones Extras del receptor
    -a auto gain (off by default, no parameter)
    -o frequency offset (default: 0)
    -p crystal correction factor (ppm) (default: 0)
    -u upconverter (default: 0, example: 125M)
    -d direct sampling [0,1,2] (default: 0, 1 for I input, 2 for Q input)
    -n max iterations (default: 0 = infinite loop)
    -i device index (in case of multiple receivers, default: 0)
    Opciones Extras del Decoder:
    -H use the hash table (could caught signal 11 on RPi, no parameter)
    -Q quick mode, doesn't dig deep for weak signals, no parameter
    -S single pass mode, no subtraction (same as original wsprd), no parameter
    -x do not report any spots on web clusters (WSPRnet, PSKreporter...)
    Debugging options:
    -t decoder self-test (generate a signal & decode), no parameter
    -w write received signal and exit [filename prefix]
    -r read signal with .iq or .c2 format, decode and exit [filename] (raw format: 375sps, float 32 bits, 2 channels)
    Other options:
    --help show list of options
    --version show version of program

    No recibe nada : el programa se ejecuta, reconoce el dispositivo RTL_SDR. pero no recibe nada, lo cual es muy muy raro, tras comprobar antenas y alimentadores



    Una de las posibles causas por las que no recibe nada puede ser si el reloj de la Raspberry Pi no está sincornizado

    Si no tiene la hora exacta la Raspberry se estaría escuchando en un intervalo de tiempo en el que no hay trasnmisiones WSPR por lo que hay que revisar que está activo el NTP y funciona, para ello
    • SI NTP no se sincroniza o no está activo 
      • Instalar systemd-timesyncd que es un demonio que hace de cliente NTP
        • Sudo apt install systemd-timesyncd 
      • Activar
        • timedatectl set-ntp true
      • Sincronizar
        • Timedatectl
    • Muestra valores
      • timedatectl show-timesync –all
      • timedatectl set-ntp true => arranque 
      • timedatectl status =>estandar
      • timedatectl timesync-status =>con detalle
    • https://wiki.archlinux.org/title/Systemd-timesyncd_(Espa%C3%B1ol)



     

    Comentarios

    Entradas populares de este blog

    ESP32 LoRa for dummys - Inicio

    Receptores DAB/DAB+

    Antena exterior logarítmica UHF/VHF : Metronic 425010 - Ia Características