Auf dem Elektronikmarkt gibt es inzwischen jede Menge ESP32 Boards mit LoRa Funkmodul welche man für LoRa APRS einsetzen kann. Die meisten sind nur mit einer WLAN Schnittstelle ausgestattet. An manchen Standorten ist aber nur eine Einbindung per LAN-Kabel möglich. Hier gibt es eine Möglichkeit den TTGO oder andere ESP32 LoRa Boards per USB mit einem PC (z.B. Raspberry Pi) zu verbinden. Auf dem PC läuft dann z.B. dxlAPRS als APRS-Software, der TTGO dient quasi nur noch als Modem. Vielleicht interessiert man sich aber auch nur für die vielen Möglichkeiten, die einem dxlAPRS bietet und wählt diesen Weg.
Heutzutage ist es relativ einfach geworden einen TTGO an einem Raspberry Pi oder anderen PC als Modem zu nutzen. Möglich macht es die gut entwickelte Software von Ricardo CA2RXU, welche inzwischen auch über einen Webflasher installierbar ist. Das „Martyrium“ mit einer Installation von diversen Tools und Aufspielvorgängen ist damit nicht mehr notwendig. Die „alte“ Anleitung habe ich aus Archivgründen am Ende dieses Beitrags gelassen.
In der folgenden Anleitung wird beschrieben, wie man einen TTGO bzw. ein anderes ESP32 LoRa Board (die Software unterstützt bereits viele Boards) mit dem Webflasher bespielt und passend für die Funktion als LoRa Modem einstellt. Anschließend wird die beispielhafte Anbindung an dxlAPRS beschrieben. Weil die meisten einen RaspberryPi (RasPi) und ein TTGO Board verwenden, werden diese Begriffe für die Anleitung verwendet.
Schritt 1 – Software auf TTGO flashen und einrichten
Zum flashen des TTGO benötigt ihr nur ein USB-Datenkabel und einen Chromebasierten Webbrowser (z.B. Chrome, Edge etc.). Der Firefox unterstützt diese Funktion derzeit leider noch nicht. Zunächst öffnet man die Seite vom Webflasher, wählt dort das passende Board aus (standardmäßig ist ein TTGO LoRa Board ausgewählt) und klickt auf „FLASH FIRMWARE“.
Anschließend folgt man den weiteren Anweisungen (ggf. muss der Zugriff auf die serielle Schnittstelle noch erlaubt werden).
Der Flashvorgang dauert ca. 1-2 Minuten. Die Software auf dem TTGO startet von alleine neu. Es ist ratsam nach dem ersten Start das USB Kabel noch einmal abzuziehen und neu zu stecken. Nach dem Starten der Software sieht man folgendes auf dem Display:
Das Gerät erstellt einen eigenen WLAN AccesPoint, mit dem man sich für die Erstkonfiguration verbinden muss. Das kann man schnell mit Smartphone oder Tablet machen. Der AccessPoint nennt sich „NOCALL-10-AP“ und man kann sich mit dem Passwort „1234567890“ verbinden. Ist die Verbindung hergestellt, öffnet man am Smartphone einen Webbrowser und gibt in der Adresszeile folgende IP-Adresse ein: 192.168.4.1 . Es erscheint die Weboberfläche der Software, an der alle Einstellungen vorgenommen werden können.
Die wichtigste Einstellung ist die Aktivierung des Serial KISS Protokolls für die USB Schnittstelle.
Alle weiteren Einstellungen sind für die weitere Nutzung irrelevant. Trotzdem macht es ggf. Sinn noch folgendes zu konfigurieren:
- LORA: Bei Bedarf alternative Frequenzen oder Übertragungsmodi (Standardeinstellungen passen für die meisten europäischen Länder)
- DISPLAY: Bildschirm dauerhaft ausschalten, falls es später unbemannt betrieben wird.
- WiFi Auto AP: Passwort für den automatischen AccessPoint ändern (aktuell ist das Deaktivieren des AP nicht möglich. Falls jemand in der Nähe ist und das Passwort kennt, könnte er sich verbinden und Einstellungen ändern!)
- Admin Passwort einrichten (zusätzliche Sicherheit, damit bei Zugriff nichts ohne Adminpasswort geändert werden kann).
Schritt 2 – Modem an dxlAPRS anbinden
Wenn man bereits eine dxlAPRS Grundinstallation auf dem RasPi hat, hat man bereits alles drauf, was man benötigt. Zunächst benötigt man den Namen der Schnittstelle im System, mit dem das TTGO Board angesprochen werden kann. Dieses findet man unter /dev/ und beginnt mit „tty“. In den meisten Fällen wird die Bezeichnung /dev/ttyACM0 oder /dev/ttyUSB0 lauten.
Um das Modem mit dxlAPRS nutzen zu können, ist eine Anbindung mit udpflex notwendig. Die Zeile dazu lautet:
udpflex -t PORTNAME:PORTSPEED -U 127.0.0.1:DESTINATIONPORT:0 -V
Beispielhaft wäre das (auf Groß-/Kleinschreibung achten!):
udpflex -t /dev/ttyACM0:115200 -U 127.0.0.1:9702:0 -V
- Der Parameter -t baut die serielle Verbindung über die USB Schnittstelle auf. Standardmäßig sind die TTGO Boards mit 115200 Baud ansprechbar. Bei anderen Boards kann es abweichen.
- Der Parameter -U ist die UDP Verbindung zu dxlAPRS. Es handelt sich hierbei um eine Zweiwegeverbindung.
- 127.0.0.1 ist die lokale Adresse des Rechners und braucht i.d.R. nicht geändert zu werden
- :9702 ist hier der „Destination Port“. Alle über KISS eingehenden Daten (was der TTGO empfängt) werden per UDP an diesen lokalen Port gesendet.
- :0 ist der „Listen Port“. Alle APRS Daten die an diesen Port gesendet werden, werden an das TTGO zum Aussenden weitergereicht. Wenn wie hier der Port 0 steht, wird nichts gesendet und das TTGO arbeitet rein im Empfangsbetrieb. Wichtig: Mit dem iGate auf LoRa APRS senden lassen erfordert sehr viel Wissen darüber was man tut! Sehr schnell kann damit die QRG zugemüllt werden. Es ist daher grundsätzlich nicht zu empfehlen!
- Der Parameter -V lässt den udpflex alle ein- und ausgehenden Pakete an der Konsole anzeigen – dann sieht man auch was alles passiert.
Als Zielport kann man entweder direkt einen Eingangsport am iGate udpgate4 angeben. Oder man nutzt udpbox um vorher noch ggf. die Daten zu duplizieren (z.B. für APRSMAP oder andere Zwecke).
Beispiel ohne udpbox:
udpflex -t /dev/ttyACM0:115200 -U 127.0.0.1:10702:0 -V
udpgate4 -s MYCALL -R 127.0.0.1:0:10702#LoRa -n 30:/home/pi/dxlAPRS/aprs/netbeacon.txt -g rotate.aprs2.net:14580 -p PASSCODE -t 14580 -w 14501 -D /home/pi/dxlAPRS/aprs/www/ -v
Beispiel mit udpbox:
udpflex -t /dev/ttyACM0:115200 -U 127.0.0.1:9702:0 -V
udpbox -R 127.0.0.1:9702 -l 127.0.0.1:10702 -r 127.0.0.1:9999 -v
udpgate4 -s MYCALL -R 127.0.0.1:0:10702#LoRa -n 30:/home/pi/dxlAPRS/aprs/netbeacon.txt -g rotate.aprs2.net:14580 -p PASSCODE -t 14580 -w 14501 -D /home/pi/dxlAPRS/aprs/www/ -v
Bitte die dargestellten Zeilenumbrüche nicht mit einbauen! Die Darstellung der Webseite lässt es nicht anders zu.
Beispielskripte (start-lora-rx-esp32.sh) findet man auch in meinem Github repository.
Alte Anleitung vom 01.09.2021 mit DL9RDZ Software
Hier habe ich schonmal beschrieben wie man LoRa APRS mit einem LoRa HAT für den RaspberryPi mit dxlAPRS verbinden kann. Kompatible LoRa HATs für den RaspberryPi sind aber inzwischen sehr schwierig zu bekommen. Wenn man keinen Selbstbau nach Andreas OE1ROT macht, bleibt einem nur das OE1ACM Board (Gateway V) übrig. Das ist aber derzeit schwer zu bekommen.
Es lag also Nahe mit den beliebten TTGO Boards etwas anzufangen. Doch wie bringt man die TTGO Boards und dxlAPRS zusammen?
Von SQ9MDD wurde eine Software für die TTGO Boards entwickelt, welche eine KISS Schnittstelle bieten soll. Dies funktionierte ad hoc jedoch nur mit der Software APRX. Alle Versuche diese mit dxlAPRS (udpflex) zu verbinden, scheiterten bei mir. Es wurde keine KISS Verbindung hergestellt. Andere wollen es geschafft haben, keiner schreibt aber wie 🙂
Im August 2021 entdeckte ich die Software von Hansi DL9RDZ auf Github, welche auf der iGate Software von OE5BPA basiert und um eine KISS Schnittstelle erweitert wurde. Hansi hat auch gut die Verbindung zu dxlAPRS beschrieben. Einmal ausprobiert hat dies einwandfrei funktioniert. Das TTGO arbeitet quasi als KISS-TNC und übermittelt die Daten zuverlässig an udpflex aus den dxlAPRS Tools. Dieses wiederum schickt die Frames an das iGate udpgate4.
Man kann so auch ein bestehendes iGate einfach mit LoRa APRS erweitern. Das ist praktisch und günstig.
TTGO Board vorbereiten
Man muss als erstes das TTGO mit der Software von Hansi DL9RDZ bespielen. Eine Anleitung dazu gibts auf Github und auch auf Youtube. In Windows nimmt man am besten MS Visual Studio Code mit dem Plugin Platform.io. Es muss zuerst die Datei data/is-cfg.json bearbeitet werden.
Folgende Zeilen müssen geändert werden:
- im Abschnitts „aprs_is“ => „active“: false, (deaktiviert iGate in der Software)
- im Abschnitt „digi“ => „active“: false, (deaktiviert den digipeater)
- Bei „callsign“: „NOCALL-10“ muss noch ein Rufzeichen eintragen, da die Software auf dem TTGO nicht startet wenn anderes Call eingetragen wird
- Optional: im Abschnitt „display“ => „always_on“: false, (deaktiviert das Display am TTGO, wird in der Regel ja nicht benötigt)
Anschließend muss die Software kompiliert und hochgeladen werden. Die Konfigurationsdatei wird im Platform-IO mit „Upload File System image“ hochgeladen. Das Board muss sowohl nach dem Hochladen der Software als auch nach dem Hochladen der Config-Datei rebootet werden. Das TTGO Board kann nun mit einem USB Kabel an den RaspberryPI angeschlossen werden und erscheint dort z.B. als Device /dev/ttyUSB0.
Mit dxlAPRS verbinden
Hansi beschreibt, das die direkte serielle KISS Verbindung nicht auf Anhieb klappt. Ähnliches hatte ich schon mit der Software von SQ9MDD erfahren. Es wird daher socat als Bindeglied zwischen dem USB-Device und udpflex verwendet. Falls socat nicht installiert ist, kann es wie folgt schnell installiert werden:
sudo apt-get install socat
Beispielkonfiguration laut DL9RDZ Github:
socat -v TCP-LISTEN:8888,reuseaddr /dev/ttyUSB0,b115200,raw,echo=0 &
udpflex -T 127.0.0.1:8888 -V -U 127.0.0.1:9001:0 &
udpgate4 -S MYCALL-10 -R 127.0.0.1:0:9001#LoRa -g rotate.aprs.net:14580 -p passcode ...
- socat Verbindet das USB-Device mit dem TCP-KISS Port 8888
- udpflex wandelt den TCP-KISS Port 8888 um in zwei AXUDP Ports 9001 (destination port = empfangene Daten) und 0 (listen port = zu sendende Daten). Da nichts gesendet werden soll (reines RX iGate) bleibt der Sendeport auf 0. Wenn man damit auch Aussendungen machen will (Bestimmungen zu unbemannten Stationen beachten!), muss bei udpflex und udpgate4 ein passender Port (z.B. 9002) eingetragen werden.
- udpgate4 ist das eigentliche iGate und ist hier nicht vollständig konfiguriert, daher nur als Beispiel anzusehen.
Wenn man zusätzlich APRSMAP verwenden will um die empfangenen Daten auf der Karte lokal darzustellen, ist es sinnvoll, die udpbox dazwischen zu schalten.
socat -v TCP-LISTEN:8888,reuseaddr /dev/ttyUSB0,b115200,raw,echo=0 &
udpflex -T 127.0.0.1:8888 -V -U 127.0.0.1:9001:0 &
udpbox -R 127.0.0.1:9001 -l 127.0.0.1:9101 -l 127.0.0.1:9105 -v &
udpgate4 -S MYCALL-10 -R 127.0.0.1:0:9101#LoRa -g rotate.aprs.net:14580 -p passcode ...
In diesem Beispiel sendet udpflex die Daten erst an die udpbox, welche den Datenstrom verdoppelt. Auf Port 9101 gehts zum iGate udpgate4 und auf Port 9105 gehts zu APRSMAP.
Links:
TTGO Software von DL9RDZ auf Github
TTGO Board (Beispiel)
Selbstverständlich kann man ein bestehendes dxlAPRS auf diese Weise mit LoRa APRS ergänzen. Aber auch der eigenständige Betrieb des TTGO mit dxlAPRS hat große Vorteile, denn das sehr umfangreiche iGate udpgate4 mit seinem genialen Webinterface ist sowohl für Sysops als auch für User eine große Bereicherung.
Es gibt aber auch einen großen Nachteil beim Betrieb von LoRa APRS mit einem TTGO Board in Bezug auf dxlAPRS. Es können über den KISS Weg keine Informationen zu RSSI und SNR übertragen werden. Diese Informationen können daher leider nicht im udpgate4 Webinterface angezeigt werden. Diese Funktion ist derzeit nur über den Weg der Einspielung der Daten über AXUDP vom RPi-LoRa-KISS-TNC möglich.
Support
Diese Anleitung wurde mit bestem Wissen und Gewissen erstellt. Aber auch hier kann sich natürlich der Fehlerteufel verstecken. Deshalb sind alle Angaben ohne Gewähr! Auch geht die Entwicklung der dxlAPRS Tools und der TTGO Software geht immer weiter, was auch Veränderungen mit sich bringen kann. Wenn ihr einen Fehler findet oder Fragen habt, zögert nicht mich zu kontaktieren. Gerne auch als Kommentar auf der Webseite.
Kontaktmöglichkeiten:
per E-Mail attila [at] dl1nux . de
per IRC Chat im Hamnet (HamIRCNet) im Kanal #hamnet-oberfranken
per Packet-Radio im DL/EU Converse Kanal 501
Support für dxlAPRS:
dxl-Wiki: http://dxlwiki.dl1nux.de
Telegram-Gruppe: https://t.me/joinchat/CRNMIBpKRcfQEBTPKLS0zg