Multi-APRS-Digipeater mit dxlAPRS auf Raspberry Pi
Go to file
Jörg Deckert 64afdf537b Dire Wolf development version installation 2024-11-28 11:23:24 +01:00
LICENSE Initial commit 2023-10-15 12:33:27 +02:00
README.md Dire Wolf development version installation 2024-11-28 11:23:24 +01:00

README.md

Table of Contents

APRS Digipeater

Ziel

Aufgebaut werden soll ein Multi-APRS-Digipeater für 2m und LoRa mit dxlAPRS auf einem Raspberry Pi.

Hardware

Für dieses Projekt wird während der Testphase die folgende, vorhandene Hardware benutzt:

  • Raspberry Pi 3B+ 2MB mit 8GB SD-Card
  • LoRa Raspberry Pi HAT der SWISS-ARTG
  • SHARI PiHat Mod2 Board

Sobald alles wie gewünscht funktioniert, wird auf passendere Hardware umgestellt (z.B. Raspberry Pi Zero W, einfacher 2m Transceiver)

Installation Betriebssystem

Als Betriebssystem wird Raspberry Pi OS Lite (64 Bit) verwendet. Am einfachsten geht die Installation mit dem Raspberry Pi Imager, dieser kann hier heruntergeladen werden: Install Raspberry Pi OS using Raspberry Pi Imager

Nach dessen Installation auf einem PC und Start mit eingelegter SD-Card werden das zu installierende Betriebssystem (RASPBERRY PI OS LITE (64-BIT)) und die SD-Card ausgewählt. Mittels Klick auf das Settings-Icon unten rechts werden die erweiterten Optionen aufgerufen und wie folgt angepaßt (damit später der Zugriff per SSH über WLAN möglich ist):

  • Hostname: digipeater
  • SSH: aktivieren
    empfohlen wird "Authentifizierung via Public-Key", notfalls geht auch "Paßwort zur Authentifizierung benutzen"
  • Benutzernamen und Paßwort setzen
    Im Folgenden wird der Benutzer "aprsadmin" verwendet, andere Namen sind aber auch möglich.
  • WiFi einrichten
    Hier werden SSID und der zugehörige Schlüssel (Passwort) eingetragen. WiFi-Land sollte in Deutschland "DE" sein.
  • Spracheinstellungen festlegen
    Zeitzone Europe/Berlin, Tastaturlayout de

Nach dem Speichern der erweiterten Einstellungen wird das Image durch Anklicken von "Speichern" auf die SD-Card geschrieben.

Konfiguration Betriebssystem

Zuerst eine Aktualisierung und die Installation von Git und des Midnight Commanders:

sudo apt update
sudo apt upgrade
sudo apt install git mc

Die folgenden Anpassungen werden mit dem Tools "raspi-config" vorgenommen, welches nach dem Login per SSH wie folgt gestartet wird:

sudo raspi-config

  • Komplette SD-Card nutzen:
    • 6 Advanced Options
      A1 Expand Filesystem
    • 3 Interface Options
      I5 Serial Port
      login shell: none
      serial port enable: yes

Um dem Benutzer aprsadmin Zugriff auf einen möglicherweise per USB angeschlossenen KISS-TNC zu geben, wird er zur Gruppe dialout hinzugefügt:

sudo usermod -a -G dialout aprsadmin

Anpassungen Betriebssystem

Alle wesentlichen Anpassungen aus Betriebssystem-Ebene können mitels RasPi-Config vorgenommen werden:

sudo raspi-config

So können z.B. das Betriebssystem aktualisiert oder die WLAN-Zugangsdatenm geändert werden.

SHARI PiHat 2m Transceiver

Der SHARI PiHat besteht im Wesentlichen aus dem Transceiver-Modul SA818S (VER:2.0) und einem Soundkarten-Chip von C-Media (CM119A). Das Transceiver-Modul SA818 muß programmiert werden, die Programmierung wird im einem Flash gespeichert, muß also nicht bei jedem Start wiederholt werden. Die Programmierung erfolgt über die serielle Schnittstelle des RaspBerry mittels eines speziellen Python-Programmes, SA818-prog2.01.py. Das kann unter https://groups.io/g/SHARI/files heruntergeladen werden, dazu ist aber leider eine Anmeldung erforderlich. Nach dem Download wird SA818-prog2.01.py auf dem RaspBerry unter ~/SHARI plaziert. Zusätzlich wird noch das Python-Modul pyserial benötigt, welches wie folgt installiert wird:

sudo apt install python3-serial

Die Konfiguration wird nun gestartet:

python ~/SHARI/SA818-prog2.01.py
SA818-prog, Version 2.01
Programing SHARI PiXX / SHARI PiHat / SA818(U/V) Module
Programming Device name:
      /dev/ttyS0

------------------------------------------------------

Testing serial communications
Serial communications with the SA818 module are OK

What are you programming?
Enter 1,2 or 3 where SHARI PiXX=1, SHARI PiHat=2, SA818 Module=3: 3

Programming a generic SA818 module
Enter Channel Spacing (Narrow=0 or Wide=1): 0

	Programming an SA818 module
	Narrow channel spacing

Enter band (VHF=1, UHF=2): 1
	You chose VHF

Enter transmit frequency in MHz (xxx.xxxx): 144.8000
	The transmit frequency is 144.8000 MHz

Enter receive frequency in MHz (xxx.xxxx): 144.8000
	The receive frequency is 144.8000 MHz

Do you want to use a sub audible tone? (0 = No, 1 = CTCSS, 2= DCS): 0
	You chose No SubAudible Tone

Enter Squelch Value (0-8): 0
	Squelch is set to 0

Enter Volume (1-8): 6
	Volume is set to 6

Enable Pre/De-Emphasis (y/[n]): n
	Pre/De-Emphasis is not enabled

Enable High Pass Filter (y/[n]): n
	High Pass Filter is not enabled

Enable Low Pass Filter (y/[n]): n
	Low Pass Filter is not enabled


Verify:
------------------------------------------------------
     Channel Spacing: 0
        Tx Frequency: 144.8000
        Rx Frequency: 144.8000
       Tx CTCSS code: 0000
       Rx CTCSS code: 0000
       Reverse Burst: n
       Squelch Value: 0
        Volume Value: 6
 PreEmphasis Enabled: n
   High Pass Enabled: n
    Low Pass Enabled: n
------------------------------------------------------

Is this correct ([y]/n) ?y
Sending Frequency, Sub Audible Tone, and Squelch Information...
Frequency, Sub Audible Tone, and Squelch information correct
Setting Volume - 6
Setting Reverse Burst
Setting Filters

Programming Successful

Configuration log written to /home/aprsadmin/.SA818.log

Bei "What are you programming?" wird nicht "SHARI PiHat=2" gewählt, weil damit automatisch Wide channel spacing (25kHz) konfiguriert werden würde. Für APRS ist aber "Narrow channel spacing" mit 12,5kHz korrekt.

SHARI PiHat Audio

Wir benötigen die Id der Soundcard des PiHat:

$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Da steht "card 1", demzufolge ist die Id die "1". Damit kann nun alsamixer mit dem Parameter "-c 1" gestartet werden:

alsamixer -c 1 -V all

Dort wird werden der MIC (Capture)- und der Speaker-Channel unmuted (mit Cursor links/rechts auswählen, mit "M" Mue umschalten). "Auto Gain Control" und MIC (ohne Capture) wird dagegen gemutet. Für den Anfang wird der Speaker-Level auf 25 und der MIC (Capture)-Level auf 60 eingestellt. Danach kann alsamixer mit Esc beendet werden.

Dire Wolf

Aus dem Debian-Repository

Dire Wolf ist ein APRS-Software-Modem. Die Installation erfolgt mittels:

sudo apt install direwolf

Die Konfiguration wird erstellt:

sudo mcedit /etc/direwolf.conf
ADEVICE plughw:1,0
CHANNEL 0
PTT CM108

Nun kann Dire Wolf für einen ersten Test gestartet werden:

/usr/bin/direwolf -c /etc/direwolf.conf

Damit sollten die empfangenen APRS-Pakete angezeigt werden.

Aus dem Github-Repository

Die Debian-Version ist recht alt (in Bookworm Version 1.6). Diese Version hat u.a. alle per RF (LoRa und 2m) doppelt wieder gesendet. Deswegen sollte die aktuelle Development-Version von Dire Wolf direkt aus dem Githob-Repository erstellt und installiert werden. Zuerst werden einige Abhängigkeiten benötigt:

sudo apt install cmake libasound2-dev libgpiod-dev libudev-dev

Jetzt kann Dire Wolf gebaut und installiert werden:

cd
mkdir Develop
cd Develop
git clone https://github.com/wb2osz/direwolf.git
cd direwolf
git checkout dev
mkdir build && cd build
cmake ..
make -j2
sudo make install

Die Development-Version ist nun unter /usr/local/bin installiert. Um die Systemd-Unit und die Konfiguration der Debian-Installation nutzen zu können, wird über ein Drop-in-File der Verweis auf /usr/bin nach /usr/local/bin geändert:

sudo mkdir /etc/systemd/system/direwolf.service.d
sudo nano /etc/systemd/system/direwolf.service.d/use-dev-github.conf
sudo systemctl daemon-reload

Das Drop-in-File /etc/systemd/system/direwolf.service.d/use-dev-github.conf hat folgenden Inhalt:

[Service]
ExecStart=
ExecStart=/usr/local/bin/direwolf -c /etc/direwolf.conf

Installation dxlAPRS

Ein möglicher Weg zur Installation wäre die Nutzung der fertigen Archive von DL1NUX, welche hier verfügbar sind: dl1nux/dxlAPRS. Das Selbst-Compilieren aus den Original-Quellen ist aber auch nicht viel schwerer, wenn man das direkt auf dem Raspberry macht (unter dem Nutzer "aprsadmin"):

sudo apt install libjpeg62-turbo-dev libx11-dev libxext-dev libfftw3-dev
cd
mkdir Develop
cd Develop
git clone git@github.com:oe5hpm/dxlAPRS.git
cd dxlAPRS/src/
EXTLIB=/usr/lib/aarch64-linux-gnu/ make all
rm ../out/*.o
sudo chown root:root ../out/*
sudo mv ../out/* /usr/local/bin/
sudo mkdir /usr/local/share/dxlAPRS
sudo cp -R ../dxlAPRS_common/www /usr/local/share/dxlAPRS/

Der Start der einzelnen Dienste (Programme) erfolgt nicht per Script, sondern über Systemd. Das hat u.a. den Vorteil, daß die Dienste überwacht und bei Bedarf (z.B. Absturz) neu gestartet werden. Die Systemd-Units können später hier heruntergeladen und instaliert werden:

sudo mkdir -p /usr/local/lib/systemd/system
sudo cp udpgate4.service /usr/local/lib/systemd/system/

Konfiguration

udpgate4

Für die Startparameter sind in der Systemd-Unit Defaultwerte eingetragen. Diese können (müssen) über ein Drop-in-File angepaßt werden:

sudo mkdir /etc/systemd/system/udpgate4.service.d
sudo nano /etc/systemd/system/udpgate4.service.d/<call>.conf
sudo systemctl daemon-reload

Außerdem werden die nötigen Konfigurationsdateien erzeugt:

sudo mkdir /etc/dxlAPRS
sudo nano /etc/dxlAPRS/netbeacon.txt
sudo nano /etc/dxlAPRS/password.txt

Start

Der Start der einzelnen Programme erfolgt mittels:

sudo systemctl start udpgate4.service

Der Digipeater sollte dann auf https://aprs.fi su finden sein. Dem Status kann man sich im Browser unter http://:14501/ ansehen.