APRS iGate mit Raspberry Pi
Dieses Projekt endstand auf Anreiz eines Bekannten, der mich auf den Kleincomputer Raspberry Pi aufmerksam gemacht hat. Da ich mir schon vor einiger Zeit vorgenommen hatte, mich wieder etwas aktiver dem Amateurfunk zu widmen, reifte die Idee ein APRS-iGate auf dieser kleinen Kiste aufzusetzen. Also wurde mal wieder Google befragt, um zu sehen, was es dort schon an Projekten gab. Die Suche erbrachte einige Ergebnisse, allerdings zeigten sich vielfach Probleme in Verbindung mit Treibern der Linux-Distributionen sowie der scheinbar etwas problematischen Firmware das Raspberry Pi. Das reizte mich, ich konnte mir einfach nicht vorstellen, dass ein einfaches iGate auf dem Mini-PC so problematisch sein sollte. Also musste eine solche Kiste her...
Hardwarebeschaffung
Der Rechner ist leider in Deutschland noch immer schwer zu bekommen, die Lieferzeiten sind teilweise lang oder aber die Preise recht hoch. Eine Suche nach brauchbaren Geräten bei Ebay führte letztendlich zum Erfolg. Zu einem akzeptablen Preis ging innerhalb kurzer Zeit ein neuer Raspberry Pi Modell B mit 512MB RAM sowie ein geeignetes Gehäse und ein Netzteil in meinen Besitz über. Weiterhin wurden noch ein USB-Hub sowie eine USB-Soundkarte benötigt, die letztendlich die APRS-Pakete als Modem decodieren sollte. Damit hielten sich die Hardwarekosten in Grenzen.
Grundinstallation und Systemupdate
Als Basissystem entschied ich mich für Raspbian, eine auf Debian "wheezy" basierende Linux-Distribution für den Raspberry Pi. Ich möchte hier nicht weiter auf die Installation des eigentlichen Systems eingehen, dafür gibt es inzwischen eine Menge Quellen im Netz. Meine Grundinstallation habe ich einfach durch Kopie eines Systemimages auf eine SD-Karte durchgeführt, wie es auf den Seiten von elinux.org beschrieben wird.
Nachdem das Basissystem installiert und konfiguriert ist, sollte es auf einen aktuellen Softwarestand gebracht werden. Das funktioniert, wie unter Debian üblich:
pi@raspberrypi ~ $ sudo apt-get upgrade
Damit sollte das Basissystem aktualisiert sein. Allerdings zeigten sich mit dem aktuellen Kernel 3.2.27+ einige Probleme, die ein decodieren der Packet-Radio Daten unmöglich machten. Die USB-Soundkarte produzierte ein heftiges Knacken und Rauschen am Mikrofoneingang. Wie sich später herausstellte, konnte das Problem durch ein weiteres Firmware- und Kernelupdate behoben werden. Einen einfachen Weg bietet das Tool rpi-update von Hexxeh.
pi@raspberrypi ~ $ sudo apt-get install ca-certificates
pi@raspberrypi ~ $ sudo wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update
pi@raspberrypi ~ $ sudo chmod +x /usr/bin/rpi-update
pi@raspberrypi ~ $ sudo rpi-update
Das Script aktualisiert die GPU-Firmware des Raspberry Pi und bringt den Kernel auf einen aktuellen Stand. Wichtig ist, daß nach der Aktualisierung ein Reboot durchgeführt wird! Anschließend sollte die Ausgabe ungefähr so aussehen:
Linux raspberrypi 3.6.11+ #366 PREEMPT
Wed Jan 30 12:59:10 GMT 2013 armv6l GNU/Linux
pi@raspberrypi ~ $ /opt/vc/bin/vcgencmd version
Jan 30 2013 12:22:28
Copyright (c) 2012 Broadcom
version 366105 (release)
Nachdem diese Dinge erledigt sind, müssen wir noch eine weitere Datei modifizieren, damit unsere USB-Soundkarte als erstes Device geladen wird. Bei der Gelegenheit entfernen wir auch gleich Pulseaudio, denn scheinbar kollidiert auch diese Paket zeitweise mit dem Userspace-Soundmodem. Anschließend installieren wir noch die erforderlichen AX.25-Pakete. Die AX.25-Unterstützung ist bei dem hier verwendeten Kernel bereits vorhanden.
# Keep snd-usb-audio from beeing loaded as first soundcard
options snd-usb-audio index=0 (statt -2 hier 0 eintragen)
pi@raspberrypi ~ $ sudo apt-get remove pulseaudio
pi@raspberrypi ~ $ sudo apt-get install soundmodem
pi@raspberrypi ~ $ sudo apt-get install ax25-tools ax25-apps
Konfiguration
Jetzt geht es an die Konfiguration der AX.25-Tools sowie des Soundmodem-Treibers. Dazu kann man meine Dateien übernehmen (bitte Rufzeichen anpassen!) oder sich eigene Dateien erstellen. Das Soundmodem wird dabei mit dem Programm "soundmodemconfig" über die grafische Oberfläche konfiguriert. Hier meine Beispieldateien:
-- /etc/ax25/axports
#
#name callsign speed paclen window description APRS DG3OBU-10 1200 255 2 APRS-iGate
-- /etc/ax25/soundmodem.conf
<modem>
<configuration name="APRS">
<chaccess txdelay="150" slottime="100" ppersist="40" fulldup="0" txtail="10"/>
<audio type="alsa" device="plughw:0,0" halfdup="1" capturechannelmode="Mono"/>
<ptt file="none" gpio="0" hamlib_model="" hamlib_params=""/>
<channel name="Channel 0">
<mod mode="afsk" bps="1200" f0="1200" f1="2200" diffenc="1"/>
<demod mode="afsk" bps="1200" f0="1200" f1="2200" diffdec="1"/>
<pkt mode="MKISS" ifname="sm0" hwaddr="DG3OBU-10" ip="10.6.0.1" netmask="255.255.255.0" broadcast="10.6.0.255"/>
</channel>
</configuration>
</modem>
Nachdem die Konfigurationsdateien erstellt wurden, muss nur noch die Lautstärke eingestellt werden. Ich nutze dazu das Programm "alsamixer". Damit die Eingangssignal nicht übersteuert, sollte die Scope-Funktion des Programms "soundmodemconfig" aufgerufen und die Aussteuerung auf ungefähr 70% eingestellt werden. Auf jeden Fall sollte bei der Soundkarte der Vorverstärker am Mikrofoneingang abgeschaltet werden! Durch Verwendung des Vorverstärkers entsteht bei den preisgünstigen USB-Karten meist ein enormer Rauschpegel und das Eingangsignal verzerrt. Abschließend müssen die Lautstärkeeinstellungen dann noch gespeichert werden, damit sie beim Rechnerstart wiederhergestellt werden können.
APRS-Software
Um den Rechner als APRS-iGate zu nutzen, standen verschiedene Softwarelösungen zur Auswahl. Vielfach wird hier in DL die Software aprs4r eingesetzt, allerdings wollte ich eine schlanke Lösung, die schnell zu installieren ist. Außerdem hatte ich bisher auf Debian-Systemen Schwierigkeiten mit der Stabilität von aprs4r. Daher habe ich mich letztendlich für aprx entschieden. Die Software ist klein, stabil, einfach zu konfigurieren und es gibt fertige Pakete für den Raspberry.
Damit lässt sich das Programm einfach installieren:
pi@raspberrypi ~ $ sudo dpkg -i aprx_2.04.455-1_armhf.deb
Nach der Installation muß die Konfiguration noch angepasst werden. Dazu wird die Datei aprx.conf editiert:
Die Konfiguration ist recht gut in der Dokumentation zu aprx erklärt. Hier meine Konfiguration als Beispieldatei:
mycall DG3OBU-10
<aprsis>
server euro.aprs2.net
</aprsis>
<logging>
pidfile /var/run/aprx.pid
rflog /var/log/aprx/aprx-rf.log
aprxlog /var/log/aprx/aprx.log
</logging>
<interface>
ax25-device $mycall
tx-ok false # Nur RX
</interface>
<beacon>
beaconmode aprsis
cycle-size 30m
beacon symbol "R&" lat "5214.27N" lon "00914.09E" comment "iGate DG3OBU-10 rx-only"
</beacon>
Damit der Soundmodem-Treiber und die APRS-Software nach dem Rechnerneustart automatisch gestartet werden, müssen noch zwei weitere Dateien editiert werden.
Da ich kein eigenes Startscript für das Soundmodem schreiben wollte, wird der Treiber einfach in die rc.local eingetragen:
-- /etc/default/aprx
# STARTAPRX: start aprx on boot. Should be set to "yes" once you have
# configured aprx.
STARTAPRX="no" (hier "yes" eintragen)
-- /etc/rc.local
#
# By default this script does nothing.
/usr/sbin/soundmodem /etc/ax25/soundmodem.conf -R -M >/dev/null 2>/dev/null &
sleep 1
ein Erfolg?
Abschließend kann ich sagen: "APRS mit dem Raspberry Pi und Soundmodem funktioniert". Allerdings zeigten sich letztendlich im Betrieb doch so einige Probleme, die mir vom PC in Verbindung mit dem Soundmodem nicht bekannt waren. Häufig wurden Pakete nicht decodiert oder beim Rechnerstart die Soundkarte nicht gefunden. Um ein RX-iGate vernünftig betreiben zu können, sollte man den Raspberry Pi doch eher in Verbindung mit einem KISS-TNC als Modem nutzen. Der Hardwareaufwand ist zwar etwas größer, dafür wird man mit einer deutlich höheren Decodierrate und wirklich zuverlässiger Technik belohnt. Ob es nun an der Geschwindigkeit des Raspberry Pi oder aber an noch unausgereiften Soundtreibern liegt, kann ich an dieser Stelle nicht sagen. Auf jeden Fall werde ich die Entwicklung weiter beobachten und in Zukunft weitere Versuche starten.