APRS Digipeater mellom LoRa og AX.25

 220 total views,  6 views today

Ingress: Posisjonsmeldinger i et APRS-system kan sendes både mellom LoRa-noder og AX.25 noder (AFSK over FM). Vanlige digipeatere for AX.25 vil ikke bry seg om meldinger over LoRa-linker, og vice versa. Dette fikser vi her, med å bygge en digipeater som videresender meldinger på kryss mellom to link-typene.

(c) Anders Fongen, 2026

Denne artikkelen er skrevet for deg som ønsker å konstruere enn cross-link digipeater mellom LoRa og AX.25. Den forutsetter noe kjennskap til APRS-kommunikasjon og hvilke roller en Digipeater og en IG (Internet Gateway) fyller.

Men også for dem som ønsker å sette opp en Direwolf-basert tracker, kartapplikasjon eller APRS internet gateway, de vil finne en del nyttig veiledning.

Artikkelen kommer heller ikke til å gi detaljerte oppskrifter på alle deloperasjoner, f.eks. hvordan man oppretter og redigerer filer på Linux, eller hvordan Linux installasjon og nettverkskonfigurasjon foregår på en Raspberry Pi. Likeså kabling av et lydkort, men det finnes mange instruksjonsvideoer for denne oppgaven på Internet. Denne artikkelen vil altså befatte seg med hvordan disse enkeltdelene kan koples sammen for det angitte formålet.

Innledende komponentoversikt

Hva trengs av komponenter for å sette opp en cross-link Digipeater?

Komponentoversikt for en cross-link Digipeater
  • En VHF-transceiver med FM-modulasjon. Transceiveren kan erstattes med en receiver (mottager) dersom digipeateren skal vidersende kun fra AX.25 til LoRa, men ikke omvendt.
  • En mikrokontroller med integrert WiFi og LoRa-transceiver. Denne må være av en type som er støttet av det vanligste APRS-kontrollprogrammet. Vi kommer tilbake til hvor man finner slike.
  • En Raspberry Pi microcomputer. Den dyreste og sterkeste versjon 5 er ikke nødvendig. Endog en Pi Zero W versjon 1 (til ca.200 kroner) klarer fint opgaven.
  • To antenner. 144 MHz for AX.25-linken, 433 MHz for LoRa-linken.
  • Et lyd-interface (SignaLink, Yaesu SCU-17 eller tilsvarende, evt. noe du har bygget selv)
  • Strømforsyning, kabler, o.l.

Dobbel TNC-oppsett

Tegningen over viser hvordan komponentene samarbeider for det gitte formålet. Hovedkomponenten er Direwolf, en software basert TNC installert på Raspberry Pi som konfigureres som en Digipeater. Direwolf kan kople seg til et en radio gjennom et lydkort, eller til en annen TNC gjennom en såkalt Network Channel (fra Direwolf version 1.8 og senere)

Om Raspberry Pi har internet-forbindelse er det en smal sak å utvide den til å være en “Internet Gateway” og formidle meldinger mellom gateway og de to radiolinkene den disponerer

Installasjon av Direwolf på an Raspberry Pi

Her forutsettes en kurant Raspberry Pi (versjon 3 eller senere, eller Pi Zero W) med Internet-forbindelse og et egnet kommandokonsoll (skjerm/tastatur eller SSH-forbindelse). Du bør boote maskinen i tekstmodus (dette konfigureres i raspi-config) for å spare minneressurser. I et tekst-konsoll skriver du:

$ sudo apt update
$ sudo apt install git cmake sox rtl-sdr multimon-ng gpiod
$ sudo apt install libasound2-dev libgpiod-dev
$ cd ~
$ git clone https://www.github.com/wb2osz/direwolf.git
$ cd direwolf
$ mkdir build
$ cd build
$ cmake ..
$ make -j4
$ sudo make install
$ make install-conf

Oppskriften over vil laste ned Direwolf i kildetekst (source) form og kompilere den til maskinkode tilpasset den aktuelle maskinen. Ikke forsøk å flytte den kompilerte versjonen til en ulik Raspberry Pi, kompilere fra kildetekst også der (om det oppstår problemer i denne prosessen, så finnes det mange tilsvarende oppskrifter på nettet som du kan sammenligne med).

Skru av intern lydutgang

Din Raspberry Pi bør skru av lydutgangen for å unngå nummereringsploblemer i lydsystemet. Redigere filen /boot/firmware/config.txt og gjør følgende endringer:

$ sudo nano /boot/firmware/config.txt

Gjør så endringene som er uthevet på to av linjene:

# Enable audio (loads snd_bcm2835)
dtparam=audio=off

# Enable DRM VC4 V3D driver
dtoverlay=vc4-kms-v3d,noaudio

Kople sammen VHF-radio og Raspberry Pi

Direwolf mottar analoge lydsignaler fra VHF-radioen i PCM-format (Pulskodemodulert) som produseres av et lydkort. Det finnes egne lydkort (som eksterne enheter) kalt SignaLink, Yaesu MCU-17 m.m. som kan gjøre dette. Om du vil gjøre dette billigere for deg kan du anskaffe et generelt USB-basert lydkort til 20-30 kr.

SignaLink lydkort
Billig generelt USB-lydkort

Dersom VHF-radioen har en “data port”, bør den brukes både for å sende og motta lyd, og å kontrollere aktivering av senderen (PTT – Push To Talk). Et billig lydkort kan ikke styre PTT-signalet direkte, men du kan konfigurere Direwolf til å styre PTT gjennom et signal på CPIO-pinnene på Raspberry Pi, eller kjøpe et billig USB-serie adapter og bruke DTR eller RTS-signalene fra serieporten til å trigge PTT. Dessuten kan det oppstå et problem at høyttalersignalet fra radioen overstyrer mikrofoninngangen på lydkortet, og du må lodde inn et potensiometer for å regulere dette.

Om VHF-radioen ikke har en data-port må signalene gå via mikrofon- og høyttaler-portene, og du må finne ut hvordan PTT-signalet kan koples til. Her er det så mange varianter å se at det ikke er mulig å gi en detaljert instruksjon.

Noen forsøker å omgå bruk av PTT ved å sette opp radioen som VOX (Voice operated transmit). IKKE FORSØK DET, RESULTATET BLIR ALDRI BRA!!

Koplingen mellom lydkort og VHF-radio er den mest plundrete delen av hele APRS-prosjektet, alt annet blir enklere.

Om du kun trenger å lytte på AX.25-signalene, adri sende dem, kan du også bruke en RTL-SDR dongle som radiomottaker, noe som unngår det analoge lydsignalet. Da blir det heller ikke noe behov for et lydkort. Denne varianten blir beskrevet senere i artikkelen.

Installasjon av LoRa TNC

Plattformen for en LoRa TNC inneholder kontrollprosessor, WiFi og LoRa-transceiver. VI tar utgangspunkt i programvaren som er utviklet av CA2RXU,
LoRa APRS Igate“. Programvaren installeres i LoRa-modulen direkte fra websiden via en USB-kabel. Ved første gangs oppstart lager modulen sitt eget WiFi som man kopler seg til fra en PC/nettbrett og modulen konfigureres gjennom et web-grensesnitt. Basert på konfigurasjonen som man legger inn i brikken vil den senere logge seg inn på et stedlig WiFi for videre konfigurasjon og meldingsutveksling med Internet Gateway. Detaljerte opplysninger om denne prosedyren finnes på den viste websiden. Der finner man også en liste over hvilke LoRa-produkter som er støttet av programvaren, som bør leses før man gjør noe innkjøp. Pass på at modulen opererer på riktig frekvensområde for APRS, som er 433 MHz.

En god kandidat som LoRa TNC: TTGO LoRa32 V2.1

Med utgangspunkt i at denne LoRa-modulen skal ikke fungere som Digipeater eller IGate (siden de oppgavene besørges av Direwolf), blir web-konfigurasjonen enkel, slik som vist i disse bildene fra web-grensesnittet:

Ingen Internet-gateway funksjon:

Ingen “beacon”, det besørges om ønskelig av Direwolf:

Ingen Digipeater, det besørges som kjent av Direwolf:

Og den innstillingen som lar modulen være en TNC:

LoRa-modulen kan konfigureres med et kallesignal, som har betydning dersom den skal operere som Digipeater eller IG. I dette tilfellet, der den kun er en TNC, vil kallesignalet ikke ha noen betydning.

De LoRa-modulene som har et display vil vise sin IP-adresse (om de har fått SSID og passord til det lokale WiFi). For senere konfigurasjon kan denne adressen brukes fra en web-leser.

Konfigurasjon av Direwolf

Direwolf konfigureres gjennom en fil som normalt plasseres som /etc/direwolf.conf på Raspberry Pi. Ved installasjon opprettes en mal-fil på lokalt område (~/direwolf/build/direwolf.conf) som viser de vanligste parametrene, men er gjort uvirksomme med kommentartegn (#). I denne teksten viser vi bare vise de virksomme parametrene, sammen med noen forklaringer:

/etc/direwolf.conf:

Innrykket linje er å forstå som fortsettelsen på den forrige.

# Angir ALSA-nummeret til lydkortet
ADEVICE plughw:0,0
# Kun én lydkanal
ACHANNELS 1
# Seksjon for kanal 0
CHANNEL 0
# Kallesignalet til digipeateren
MYCALL LA9xxx-8
# Bitraten til AX.25-linken
MODEM 1200
# Forsinkelse på 20ms etter PTT før sending starter
TXDELAY 20
# PTT settes til RTS-pinnen på serieporten
PTT /dev/ttyUSB1 RTS
# alternativt, PTT kan settes via en GPIO-pinne
#PTT GPIOD gpiochip0 14
# Network channel til LoRa TNC kalles kanal 11
# IP-adressen endres til faktisk verdi
NCHANNEL 11 192.168.2.237 8001
# Beacon som sendes på kanal 0 (AX.25)
PBEACON delay=0 every=10:00 overlay=S symbol="digi" lat=62^8.13N
long=011^26.52E comment="Lillehammer, NO" via=WIDE1-1
# Beacon som sendes på kanal 11 (LoRa)
PBEACON delay=0:10 sendto=11 every=10:00 overlay=S symbol="digi" lat=62^8.13N
long=011^26.52E comment="Lillehammer, NO" via=WIDE1-1

# Digipeater-operasjonen: Kun cross-link, fjern kommentartegnene
# for digipeating på hver link

# Digipeat on the AX.25 channel
#DIGIPEAT 0 0 ^WIDE[3-7]-[1-7]$|^TEST$ ^WIDE[12]-[12]$ TRACE

# Digipeat from AX.25 to LoRa channel
DIGIPEAT 0 11 ^WIDE[3-7]-[1-7]$|^TEST$ ^WIDE[12]-[12]$ TRACE

# Digipeat from LoRa to AX.25 channel
DIGIPEAT 11 0 ^WIDE[3-7]-[1-7]$|^TEST$ ^WIDE[12]-[12]$ TRACE

# Digipeat on the LoRa channel
#DIGIPEAT 11 11 ^WIDE[3-7]-[1-7]$|^TEST$ ^WIDE[12]-[12]$ TRACE

Test og oppstart av Direwolf

Testing og tilpasning av konfigurasjon skjer enklest ved å starte Direwolf fra kommandolinjen i et konsollvindu:

$ direwolf -c /etc/direwolf.com

Ved oppstart og kjøring vil Direwolf logge feilmeldinger og innholdet av sendte og mottatte meldinger. Regn med noe eksperimentering her:

  • MYCALL riktig kallesignal og SSID
  • ADEVICE parameter for å finne lydkortet
  • NCHANNEL parameter for å kople seg til annen TNC. Verdien angir IP-adressen og TCP-porter faktisk riktige. Oppkopling til LoRa TNC finner sted når Direwolf starter, og LoRa-modulen må være i drift da.
  • PBEACON parameteren angir hyppighet av beacon-maldinger samt angi aktuell lokasjon.
  • DIGIPEAT mystiske parametre for Digipeater-funksjonen, trenger normalt ingen endring

PBEACON parameteren vil medføre at det sendes ut en melding ved oppstart, da kan sendefunksjonen i radioen kontrolleres (at PTT virker som det skal f.eks.)

Som tidligere nevnt kan Direwolf også kommunisere med en internet gateway, og eksempel-konfigurasjonen som følger med Direwolf (~/direwolf/build/direwolf.conf) viser hvordan. Direwolf har også grundig dokumentasjon som omtaler de mindre brukte funksjonene. De samme filene ligger trolig lokalt på Raspberry Pi på katalogen ~/direwolf/doc.

Installasjon av Direwolf for autmatisk oppstart

Vi ønsker ikke å starte Direwolf manuelt på denne måten hver gang Raspberry Pi restartes, og vil derfor installere den slik at den starter automatisk ved maskinens oppstart. Dette ordner Linux gjenom systemd, som kan konfigureres for dette formålet ved å lage filen /usr/lib/systemd/system/direwolf.service med dette innholdet:

[Unit]
Description=DireWolf is a software "soundcard" modem/TNC and APRS decoder
Documentation=man:direwolf
AssertPathExists=/etc/direwolf.conf
Wants=network-online.target
After=network-online.target

[Service]
User=direwolf
SupplementaryGroups=dialout audio gpio
ExecStart=/usr/local/bin/direwolf -c /etc/direwolf.conf
[Install]
WantedBy=multi-user.target

Når denne filen er lagret (etter at eventuelle endringer er gjort), skal følgende kommandoer skrives for å besørge automatisk oppstart:

$ sudo adduser --system --no-create-home --group direwolf
$ sudo usermod -a -G audio,gpio,dialout direwolf
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now direwolf

Disse kommandoene skal bare gis denne ene gangen, men for senere å kunne følge med på Direwolfs aktiviteter kan disse kommandoene brukes:

$ journalctl -u direwolf -f
$ sudo systemctl status direwolf

Regn med å bruke disse kommandoene ofte, fordi den viser informasjon om sending og mottak, og er en viktig informasjonskilde for feilfinning og justering. For stopp og start av Direwolf skal disse kommandoene brukes:

$ sudo systemctl stop direwolf
$ sudo systemctl start direwolf

Direwolf med en RTL-SDR dongle for AX.25 mottak

Dersom man er interessert i et oppsett med kun mottak AX.25 meldinger for å videresende til LoRa-linken, så kan man spare seg bryderiet med lydkort og VHF-radio, og erstatte disse to komponentene med en RTL-SDR dongle, som er en fullt brukbar SDR-mottaker med USB-grensesnitt.

SDR-mottaker til erstatning for lydkort og VHF-radio

Konfigurasjon av en slik digipeater involverer noe programvare for kommunikasjon med SDR-mottakeren, som ble installert innledningsvis i artikkelen (rtl-sdr, multimon-ng og sox). Følgende kommandoer i konsollvinduet kan bekrefte at SDR-mottakeren klarer å motta APRS-meldinger på 144.8 MHz med AX.25-protokoll:

$ rtl_fm -M fm -f 144.8M -s 22050 -g 50 | multimon-ng -a AFSK1200 -A -

APRS-meldinger som mottas av SDR-mottakeren vises nå i tekstformat på konsollet, i såkalt TNC-2 format. Du har vel husket å kople til en antenne, og kanskje ha en APRS-tracker som kan generere APRS-meldinger?

Konfigurasjonsfilen for Direwolf må skrives om en del, her vises en komplett utgave for denne konfigurasjonen (husk å endre til eget kallesignal og lokasjon):

ADEVICE  null null
CHANNEL 0
MYCALL LA9xxx-12
NCHANNEL 11 192.168.2.237 8001
# A LoRa channel is declared as channel 11, it can be beaconed too
PBEACON delay=0:10 sendto=11 every=10:00 overlay=S symbol="digi" lat=62^8.13N
long=011^26.52E comment="Lillehammer, NO" via=WIDE1-1
# Digipeat from AX.25 to LoRa channel
DIGIPEAT 0 11 ^WIDE[3-7]-[1-7]$|^TEST$ ^WIDE[12]-[12]$ TRACE

Innholdet vist ovenfor legges inn i filen /etc/direwolf.conf, og først skal vi teste oppsettet fra et konsollvindu,:

$ rtl_fm -f 144.8M -r 22050 -g 40 | direwolf -c /etc/direwolf.conf -r
22050 -B 1200 -

Konsollutskriften fra kjøring når det mottas AX.25-meldinger vil vise om alt fungerer som det skal. Her er et eksempel på det:

Grønne linjer indikerer her innkommende AX.25-meldinger (kanal 0), røde linjer viser LoRa-kanalen (kanal 11). Innkommende LoRa-meldinger vil også vises i denne loggen, men er uten betydning da de ikke skal videresendes.

Automatisk oppstart av Direwolf med RTL-SDR

Dersom en slik konfigurasjon av Direwolf skal gjøres til en “service” som starter automatisk i Raspberry Pi, følges den samme prosedyre som tidligere vist, men med en annet innhold i to filer.

Først, opprett filen /usr/local/bin/direwolf-rtl.sh og skriv inn dette innholdet:

#!/bin/sh
rtl_fm -f 144.8M -r 22050 -g 40 \
| direwolf -c /etc/direwolf.conf -r 22050 -B 1200 -

Sett så denne filen “kjørbar” med kommandoen

$ sudo chmod +x /usr/local/bin/direwolf-rtl.sh

Nå, redigere /usr/lib/systemd/system/direwolf.service med dette innholdet:

[Unit]
Description=DireWolf is a software "soundcard" modem/TNC and APRS decoder
Documentation=man:direwolf
AssertPathExists=/etc/direwolf.conf
Wants=network-online.target
After=network-online.target

[Service]
User=root
ExecStart=/usr/local/bin/direwolf-rtl.sh

[Install]
WantedBy=multi-user.target

Med disse endringene kan Direwolf startes og inspiseres med de vanlige kommandoene:

$ sudo systemctl daemon-reload
$ sudo systemctl enable --now direwolf
(eller) $ sudo systemctl restart direwolf

Inspiseres med:
$ journalctl -u direwolf -f

Hva om lydsignalet blir for sterkt?

Dersom loggen som vist i figuren over indikerer at signalstyrken fra radioen er for sterk, kan man sette inn et digital dempeledd mellom RTL-SDR og Direwolf med en passende dempningsverdi. Dette gjør vi med programmet sox, som ble installert innledningsvis. Da modifiserer vi filen /usr/local/bin/direwolf-rtl.sh ved sette inn et kall til sox med de nødvendig parametrene:

#!/bin/sh
/usr/bin/rtl_fm -f 144.8M -r 22050 -g 40 - \
| sox -t raw -r 22050 -v 0.5 -e signed-integer -b 16 -c 1 - -t raw - \
| /usr/local/bin/direwolf -c /etc/direwolf.conf -r 22050 -B 1200 -

Sox-parameteren “-v 0.5” betyr at signalet skal dempes med 50%, dvs. -3dB. Verdien av denne parameteren må bestemmes eksperimentelt på det aktuelle utstyret. Direwolf må stoppes og startes igjen for hver endring i denne filen.

Digipeater kun for LoRa-meldinger

Dersom behovet for digipeater begrenser seg til meldinger på LoRa-linken, kan man gjøre det enkelt for seg selv og droppe bruken av Direwolf. Programvaren for LoRa-modulen kan settes opp til denne funksjonen, både som beacon og digipeater. Dette fremgår av konfigurasjonsbildene for LoRa-modulen som er vist tidligere i artikkelen. Husk at kallesignalet nå får betydning.

Jeg håper leseren fant denne artikkelen som nyttig og hjelpsom. Send forfatteren en melding om oversette feil eller nødvendige avklaringer.

Leave a Reply

Your email address will not be published. Required fields are marked *

twenty − 14 =