En la primera parte del fichero .ino del rs41-nfw vienen las definiciones generales y las especiíficas de los diversos modos en los que es capaz de trabajar:
- PIP
- CW
- APRS
- RTTY
- FOX
- HORUS V2
- HORUS V3
En todos ellos puede ponerlos activos (true) o inactivos (false)
(No se ha probado si funciona correctamente con dos o mas modos activos)
LED DOBLE DE LA PLACA
Secuencia de arranque de rs41-nfw cuando se pulsa el interruptor rojo
Secuencia de arranque correcta
- rojo
- rojo y verde (naranja)
- rojo y verde (naranja) intermitente 2 por segundo
- rafaga de 5 verdes => Fin arranque
- rojo y verde (naranja) intermitente 2 seguidos
- verde intermitente
- verde fijo => OK
Secuencia de arranque erronea por baterias bajas
- rojo
- naranja
Secuencia de parada del rs41-nfw cuando se pulsa el interruptor rojo
- rojo intermitente 3 ó 4 veces
Significado
Durante el arranque:
- Rojo parpadea 3 veces: condiciones incorrectas para la calibración
de humedad cero; se sale de la calibración.
- Rojo parpadea 5 veces: calibración de humedad cero cancelada debido
a un error en el brazo del sensor.
- Rojo fijo: inicialización del hardware.
- Naranja fijo: inicialización del brazo del sensor y del circuito
de calefacción, y también inicialización parcial del GPS.
- Naranja intermitente breve: calibración en curso, ya sea reacondicionamiento,
corrección de temperatura o comprobación de humedad cero.
- Verde parpadea 5 veces: configuración del firmware completada,
ingreso al programa principal
Durante el funcionamiento:
- Rojo fijo: error importante, como error en el brazo del sensor,
error de calibración inicial del sensor, error de conexión RPM411 (si está configurado).
- Naranja fijo: advertencia, como falta de señal GPS o voltaje
de la batería por debajo de 'vBatWarnValue'.
- Naranja intermitente: modo de rendimiento GPS mejorado habilitado y
la sonda sigue buscando satélites.
- Verde intermitente: modo de rendimiento GPS mejorado habilitado y
la sonda ha encontrado varios satélites y pronto volverá al modo listo para volar.
- Verde fijo: todos los sistemas funcionan correctamente y sin errores; la sonda está lista para ser lanzada.
La información del LED para el caso del GPS depende de la opción
de gpsOprationmode del .ino
0 - Totalmente desactivado (uso estacionario, como en una estación meteorológica;
las coordenadas estacionarias se pueden especificar en gpsLat-gpsLong)
1 - Por defecto, siempre activado;
2 - Ahorro de energía estándar en posición estable (solo RSM4x2;
función antigua que reduce el consumo cuando la señal GPS es fuerte;
vuelve automáticamente al máximo rendimiento cuando es necesario).
3 - Gestión inteligente de GPS: algoritmo disponible solo para placas
RSM4x4. Este algoritmo, junto con las funciones Super-S, PSMCT, ITFM,
constelaciones y mensajes GNS del GPS M10 u-blox, permite una mejora
considerable en el consumo de energía y la resistencia a interferencias.
LED DEL GPS (bajo el chip)las coordenadas estacionarias se pueden especificar en gpsLat-gpsLong)
1 - Por defecto, siempre activado;
2 - Ahorro de energía estándar en posición estable (solo RSM4x2;
función antigua que reduce el consumo cuando la señal GPS es fuerte;
vuelve automáticamente al máximo rendimiento cuando es necesario).
3 - Gestión inteligente de GPS: algoritmo disponible solo para placas
RSM4x4. Este algoritmo, junto con las funciones Super-S, PSMCT, ITFM,
constelaciones y mensajes GNS del GPS M10 u-blox, permite una mejora
considerable en el consumo de energía y la resistencia a interferencias.
Verde intermitente (Funciona del GPS)
MODOS
Parámetros comunes a todos los modos
Potencia de emisión
// TX power, 0 = -1dBm (~0.8mW), 1 = 2dBm (~1.6mW),
2 = 5dBm (~3 mW), 3 = 8dBm (~6 mW), 4 = 11dBm (~12 mW),
5 = 14dBm (25 mW), 6 = 17dBm (50 mW), 7 = 20dBm (100 mW)
PIP
Emitir un pitido de forma intermitente
// Pip:
bool pipEnable = false; // Enable pip tx mode (carrier)
constexpr float pipFrequencyMhz = 432.7; // Pip tx frequency
constexpr uint16_t pipLengthMs = 100; // Pip signal length in ms
constexpr uint16_t pipRepeat = 3; // Pip signal repeat count in 1 transmit window
constexpr int8_t pipRadioPower = 7;
Transmite en Morse
La velocidad de transmisión viene fijada por el parámtro morseUnitTime
que por defecto es de 40, que es una velocidad muy alta para la
decodificación manual
Tabla con los valores
| Valor (ms) | Velocidad (WPM) | Sensación |
| 40 | 30 | Muy rápido (Nivel experto) |
| 60 | 20 | Rápido pero legible |
| 80 | 15 | Velocidad ideal para pruebas |
| 100 | 12 | Lento y muy claro |
Parámetros
// Morse:
// bool morseEnable = true; // Enable morse tx mode
bool morseEnable = false; // disable morse tx mode
constexpr float morseFrequencyMhz = 434.6; // Morse tx frequency
constexpr uint16_t morseUnitTime = 40; // Morse unit time
constexpr int8_t morseRadioPower = 7;
Se modifica:
- La velocidad a 100, que representa unas 12 ppm
- La potencia a 6 unos 100 mW
Se prueba recibiendo la señal con RTL-SDR &SDR++ sin problemas y
se recibe el indicativo y la telemetria en formato UKHAS, sin embargo solamente he decodificado el indicativo, 29 numeros y un D1D final
Falta conocer exactamente el formato y significado de los datos transmitidos
APRS
Para trabajar con APRS además de configurar el modo APRS en el programa rs41-nfw se deberá disponer de un iGate próximo que funcione como AFSK 1200 (audio analógico modulado en FM) en 432,500 MHz, no sirven los mas populares en esta banda que lo hacen con modulación LoRa en 433,775 MHz por lo que no valdrá el iGate visto en APRS Automatic Packet Reporting System: Una nueva aproximación a esta red ni tampoco el APRS digital
iGate APRS AFSK UHF
En este punto se ha probado configurar el igate sobre un ordenador personal, en nuestro caso macOS & SDR y sobre una raspberry Pi con SDR
Hay dos lecciones importantes que se han aprendido
- La libreria usada rtl_fm funciona bien para SDR V3 (originales RTl-SDR o clon), pero no funciona para SDR V4 (RTL-SDR)
- La frecuencia configurada en rs41-nfw de 432,500 MHz termina siendo en real 433,780 MHz como se puede comprobar con un programa como SDR++ & SDR o con un walkie-Talkie
Instalando sobre un ordenador personal
Se puede hacer de dos formas, aprovechando la salida de un programa SDR para mediante una aplicación como blackhole 2 CH llevarla al decodificador APRS que es Direwolf o hacerlo directamente desde consola (Esta ultima es por la que finalmente se optó)
Mediante programa
- Instalar Blackhole 2CH y reiniciar
- Instalar Direwolf, en macOS hacer en la consola
- brew install direwolf
- Probar la instalación con direwolf -v y si da probremas hacer brew install portaudio hamlib gpsd direwolf
- Configurar el SDR (p.e.e RTL-SDR) y el software (p.e. GQRX, CubicSDR, etc.).
- Sintonía: la frecuencia real a la que está transmitiendo la radiosonda
- Modo: NFM (Narrow FM)
- Ancho de banda (Bandwidth): 12 kHz
- Salida de Audio: Cambia la salida del programa SDR de "Altavoces" a "BlackHole 2ch".
- Crear archivo de configuración direwolf.conf
ADEVICE BlackHole2ch
CHANNEL 0
MYCALL NOCALL-10
MODEM 1200
AGWPORT 8000
KISSPORT 8001
# Si quieres que lo suba a internet (APRS-IS):
IGSERVER euro.aprs2.net 14580
IGLOGIN NOCALL12345 # <--- Aquí indicativo radioaficionado y va tu passcode de APRS
- Ejecutar en donde este direwolf.conf m que en En macOS en el terminal direwolf -c direwolf.conf
###############################################################
# CONFIGURACIÓN iGATE EA5JTT - macOS (Direwolf 1.8.1)
###############################################################
# 1. Identificación
MYCALL NOCALL-10
# 2. Entrada de Audio (SDR via stdin)
ADEVICE stdin null
CHANNEL 0
MODEM 1200
# 3. Servidor APRS-IS (Internet)
IGSERVER euro.aprs2.net
IGLOGIN NOCALL 123456
IGFILTER m/50
# 4. Opciones de Red (Versión 1.8)
IGVIA 0
# 5. Baliza de posición (Para que salgas en el mapa desde el Mac)
PBEACON sendto=IG delay=0:30 every=60:00 symbol="i" overlay=M lat=xx^xx.xxN long=xxx^xx.xxW comment="iGate macOS RS41 UPV NOCALL"
Mediante consola
Comando
rtl_fm -f 433.780M -s 24000 -g 25 | direwolf -c ~/sonda.conf -r 24000 -n 1 -D 1 -a 10 -t 0 -
LOG (En rojo la decodifiación de la trama APRS de la radiosonda)
Dire Wolf Release 1.8.1, November 2025
Includes optional support for: gpsd hamlib cm108-ptt dns-sd
Reading config file /Users/Juan/sonda.conf
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
Audio input device for receive: stdin (channel 0)
Audio out device for transmit: null (channel 0)
Audio input buffer has unexpected extreme size of 0 bytes.
Detected at /private/tmp/direwolf-20260228-81855-mmd526/direwolf-1.8.1/src/audio_portaudio.c, line 738.
This might be caused by unusual audio device configuration values.
Using 2048 to attempt recovery.
Audio output buffer has unexpected extreme size of 0 bytes.
Detected at /private/tmp/direwolf-20260228-81855-mmd526/direwolf-1.8.1/src/audio_portaudio.c, line 747.
This might be caused by unusual audio device configuration values.
Using 2048 to attempt recovery.
Channel 0: 1200 baud, AFSK 1200 & 2200 Hz, A+, 24000 sample rate, Tx AX.25.
Note: PTT not configured for channel 0. (OK if using VOX.)
When using VOX, ensure that it adds very little delay (e.g. 10-20) milliseconds
between the time that transmit audio ends and PTT is deactivated.
For example, if using a SignaLink USB, turn the DLY control all the
way counter clockwise.
Using VOX built in to the radio is a VERY BAD idea. This is intended
for voice operation, with gaps in the sound, and typically has a delay of about a
half second between the time the audio stops and the transmitter is turned off.
When using APRS your transmiter will be sending a quiet carrier for
about a half second after your packet ends. This may interfere with the
the next station to transmit. This is being inconsiderate.
If you are trying to use VOX with connected mode packet, expect
frustration and disappointment. Connected mode involves rapid responses
which you will probably miss because your transmitter is still on when
the response is being transmitted.
Read the User Guide 'Transmit Timing' section for more details.
Ready to accept AGW client application 0 on port 8000 ...
Ready to accept KISS TCP client application 0 on port 8001 ...
DNS-SD: Announcing KISS TCP on port 8001 as 'Dire Wolf on mbp-de-juan-2'
Found Rafael Micro R820T tuner
Tuner gain set to 25.40 dB.
Tuned to 434032000 Hz.
Oversampling input by: 42x.
Oversampling output by: 1x.
Buffer size: 8.13ms
Exact sample rate is: 1008000.009613 Hz
Sampling at 1008000 S/s.
Output at 24000 Hz.
Now connected to IGate server euro.aprs2.net (193.237.219.53)
Check server status here http://193.237.219.53:14501
[ig] # aprsc 2.1.19-g730c5c0
[ig] # logresp EA5JTT verified, server T2UK
[ig] EA5JTT-10>APDW18:!3928.91NM00020.67W#iGate macOS RS41 UPV EA5JTT
EA5JTT-11 audio level = 27(4/3) __|||____
[0.3] EA5JTT-11>APRNFW,WIDE2-1:!3928.92N/00019.87WO/A=000042/F33S24V2463C6I20T24H80P10225J0R4 NFWv65
Position, Original Balloon (think Ham balloon), UNKNOWN vendor/model
N 39 28.9200, W 000 19.8700, alt 13 m (42 ft)
/F33S24V2463C6I20T24H80P10225J0R4 NFWv65
ADEVICE0: Sample rate approx. 23.8 k, 0 errors, receive audio level CH0 34
Instalando sobre una Raspberry Pi
Se decidió reusar una Raspberry Pi que tenía instalado el software Pi-STAR y conectado el hardware "Jumbospot UHF y VHF MMDVM" pensando que podría reusarse la parte de radio, sin embargo eso no fue posible por lo que se terminó conectando un SDR al puerto USB, que como ya se ha comentado debe ser V3 pues con V4 no se consiguió que funcionara
Por lo tanto no ganamos nada con el uso de la Pi-Star mas haya de darle un nuevo uso ahora que se tenía parada.
Configurando en PI-Star (Raspberry Pi)
Una Pi-Star tanto si la compra ya montada como si se construye con una Raspberry Pi y un Jumpospot no deja de ser una Raspberry Pi a la cual se puede entrar sin problemas desde un navegador con la http://pi-star.local/ y en su consola llendo a la opción "Modo expert" SSH ACCESS
Al entrar hay que hacer logon introduciendo el User (por defecto pi-star) y Password (por defecto raspberry) y comenzar a instalr el software necesario.
Desbloquear la protección de escritura
rpi-rw
Comprobar si está instalado direwolf y en caso contrario instalarlo
whereis direwolf
rpi-rw
sudo apt-get install direwolf -y
Comprobar si está instalado rtl-sdr y en caso contrario instalarlo
whereis direwolf
sudo apt-get update
sudo apt-get install rtl-sdr -y
Conectar pincho USB SDR (ojo solo he conseguido que funcionen los V3) y probar
rtl_test -t
Probar el SDR y su software
sudo modprobe -r dvb_usb_rtl28xxuCrear el fichero de configuración que hemos llamado /home/pi-star/igate_upv.conf con el editor nano
# Identificación del iGate
MYCALL NOCALL-10
# Conexión a la red APRS-IS
IGSERVER euro.aprs2.net
IGLOGIN NOCALL NOPASSWORD
# Configuración del canal de radio (SDR)
ADEVICE stdin null
CHANNEL 0
MODEM 1200
# Filtros y comportamiento (Lo que hablábamos)
IGVIA 0
IGFILTER m/50
# Baliza de posición (Para que salgas en el mapa)
PBEACON sendto=IG delay=0:30 every=60:00 symbol="i" overlay=R lat=xx^xx.xxN long=0xx^xx.xxW comment="iGate RS41"
Automatizacion
- nano /home/pi-star/run_aprs.sh
- # Forzar modo escritura y liberar el USB
- sudo mount -o remount,rw /
- sudo modprobe -r dvb_usb_rtl28xxu
- # Lanzar el iGate
- rtl_fm -d 0 -f 432.500M -s 48000 -g 40 | direwolf -c /home/pi-star/igate_upv.conf -r 24000 -D 1 -t 0 -
- chmod +x /home/pi-star/run_aprs.sh
- rpi-rw
Editar /etc/rc.local consudo nano /etc/rc.localañadir /home/pi-star/run_aprs.sh & antes de exit 0.Quitar automatización en caso de que no arranqueEditar /etc/rc.local consudo nano /etc/rc.localcomentar o quitar /home/pi-star/run_aprs.sh & antes de exit 0.- Escribe: nano /home/pi-star/.bashrc
- Ve al final del todo y añade esta línea:
- alias sonda='/home/pi-star/run_aprs.sh'
- Guarda y sal.
- escribienso
sonda funcionara
- Comprobación del voltaje
- vcgencmd get_throttled
- ok throttled=0x00000
- Fallo throttled=0x50000
- Comprobación de fecha
- date
- Sat 28 Feb 16:56:40 CET 2026
- comprobación de SDR-USB
- lsusb
- Bus 001 Device 005: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
- Bus 001 Device 003: ID 0424:ec00 Microchip Technology, Inc. (formerly SMSC) SMSC 9512/9514 Fast Ethernet Adapter
- Bus 001 Device 002: ID 0424:9514 Microchip Technology, Inc. (formerly SMSC) SMC9 514 Hub
- Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
- comprobación Internet
- ping -c 3 google.com
- PING google.com (142.250.185.14) 56(84) bytes of data.
- 64 bytes from mad41s11-in-f14.1e100.net (142.250.185.14): icmp_seq=1 ttl=118 time=14.8 ms
- 64 bytes from mad41s11-in-f14.1e100.net (142.250.185.14): icmp_seq=2 ttl=118 time=14.2 ms
- 64 bytes from mad41s11-in-f14.1e100.net (142.250.185.14): icmp_seq=3 ttl=118 time=14.7 ms
- --- google.com ping statistics ---
- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 14.232/14.580/14.824/0.252 ms
- Comprobacion procesos
- ps aux | grep direwolf
- Comprobación direcworf
- direwolf -c /home/pi-star/igate_upv.conf
- comporbacion errores
- sudo journalctl -u rc.local -f
- -- Journal begins at Fri 2024-09-06 00:06:17 CEST. --
- Limpieza de procesos por si se queda zombie
- sudo killall direwolf rtl_fm
EL COMANDO (probado y funciona OK)
rtl_fm -f 433.780M -s 24000 -g 25 | direwolf -c /home/pi-star/igate_upv.conf -r 24000 -n 1 -D 1 -t 0 -a 10 -
- Corrección de frecuencia en el comando -f 432.500M , probar con -f 433.775M
- rtl_fm -d 0 -f 433.775M -s 24000 -g 40 | direwolf -c /home/pi-star/igate_upv.conf -r 24000 -D 1 -a 10 -
- Correccion nivel en el comando de -g60 a -g25
- rtl_fm -d 0 -f 432.248M -s 24000 -g 25 | direwolf -c /home/pi-star/igate_upv.conf -r 24000 -D 1 -a 10 -
| Parámetro | Función | Por qué es importante para ti |
-f | Frecuencia | El centro de la sintonía. Como vimos, en el Mac pones 433.780M para compensar el error, pero en equipos precisos pondrías 432.500M. |
-M fm | Modo de Modulación | Indica que la señal es FM. Aunque el APRS son tonos, viajan "dentro" de una portadora FM (NFM). |
-s | Sample Rate (SDR) | Es el ancho de la "ventana" que el SDR mira. Con 24k miras una ventana estrecha; con 250k miras una muy ancha que perdona errores de sintonía. |
-r | Resample (Salida) | Es la velocidad del audio que sale hacia Direwolf. Debe coincidir con el -r de Direwolf (ej. 24000 o 48000). |
-g | Gain (Ganancia) | El volumen del "micro" del SDR. 25 es un buen medio. Si subes a 40-50 oyes señales lejanas pero saturas las cercanas. |
-p | PPM Error | Corrección de error del cristal. En el Blog V4 es 0, en clones baratos puede ser 50 o más. |
-F | Filtro | -F 9 activa un filtro de mayor calidad (baja latencia) que ayuda a que los tonos AFSK no se deformen. |
-d | Device Index | Si tienes varios pinchos SDR, -d 0 elige el primero. |
Parámetros de direwolf
| Parámetro | Función | Por qué es vital para tu sonda |
-c | Config File | Indica dónde está tu archivo de configuración (sonda.conf). Sin esto, Direwolf no sabe quién eres (NOCALL) ni a qué servidor conectarse. |
-r | Sample Rate | Es la "velocidad" a la que espera recibir el audio. Debe coincidir con el -r (o -s) de rtl_fm (ej. 24000). Si no coinciden, el audio suena "acelerado" o "lento" y no decodifica. |
-n | Canales | -n 1 le dice que solo use un canal de audio (mono), que es lo que saca el pincho SDR. |
-D | Debug/Detail | -D 1 es el nivel de detalle. Te muestra qué está pasando "por dentro". Es lo que nos permitió ver el mensaje de éxito de la sonda. |
-a | Audio Stats | -a 10 te muestra el nivel de audio cada 10 segundos. Fundamental para saber si el volumen del SDR es el correcto (recuerda: busca un nivel de 30-50). |
-t | Text Colors | -t 0 desactiva los colores de la terminal. Útil si la terminal del Mac o la Pi hace cosas raras con los caracteres. |
-X | FX.25 (Pro) | -X 1 activa la detección de FX.25. Como la RS41-NFW usa este sistema de corrección de errores, este parámetro es tu "red de seguridad" si la señal llega débil. |
-B | Baud Rate | -B 1200 fuerza la velocidad a 1200 baudios (estándar APRS). |
- | Stdin (El guion) | El guion final le dice: "No abras el micrófono del Mac, escucha lo que te llega por la tubería de rtl_fm". |
LOG (En azul el iGate en verde el tracker RS41)
FOX
- Now connected to IGate server euro.aprs2.net (86.123.190.5)
- Check server status here http://86.123.190.5:14501
- [ig] # aprsc 2.1 # T2Romania - APRS Tier 2 Network
- [ig] # logresp EA5JTT verified, server T2ROMANIA
- [ig] EA5JTT-10>APDW18:!3928.91NM00020.67W#iGate macOS RS41 UPV EA5JTT
- EA5JTT-11 audio level = 15(7/6) [NONE] _||||:___
- [0.3] EA5JTT-11>APRNFW,WIDE2-1:!3928.92N/00019.87WO/A=000042/F93S23V2366C18I22T2 6H74P10209J0R4 NFWv65 Position, Original Balloon (think Ham b, APRStraffic N 39 28.9200, W 000 19.8700, alt 42 ft /F93S23V2366C18I22T26H74P10209J0R4 NFWv65
![]() |
| Prueba de funcionamiento correcto vista por aprs.fi en la que se observa el iGare (-10) y el tracker (-11) |
RTTY
Se ha comprobado que emite, pero no se ha conseguido decodificar con éxito con RTL-SDR & SDRANgel (RTTY). Se volverá a intentar teniendo en cuenta el desplazamiento de frecuencias observado en APRS
FOX
No se ha probado
HORUS V2
No se ha probado, pues es necesaria una labor previa de buscar un software decodificador adecuado y en base a ello configurar el receptor
HORUS V3
No se ha probado, pues es necesaria una labor previa de buscar un software decodificador adecuado y en base a ello configurar el receptor
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.




