APRS mit dem Raspberry Pi
Der Raspberry Pi, ein kleiner Rechner mit großen Eigenschaften. In letzter Zeit liest man immer häufiger was man mit diesem Checkkarten großen Rechner so alles anstellen kann und natürlich ist er auch für diverse Aufgaben im Amateurfunk sehr gut zu gebrauchen.
Meine erstes Ziel war es den kleinen als APRS-Rechner zu verwenden. Nachdem ich schon lange XASTIR unter OpenSUSE benutze und sehr gelungen finde wollte ich das natürlich auch auf dem Raspi haben. Nach einem sudo apt-get install xastir war ich angenehm überrascht das es XASTIR auch auf Debian-Wheezy gibt. Also konnte jetzt mein Raspi den APRS Verkehr abwickeln, was mir sehr gelegen kam den der kleine Rechner benötigt ja bekanntlich sehr wenig Strom und ist somit für solche Aufgaben hervorragend geeignet. Nun kam das Problem der Verbindung Raspberry Pi zum TNC ins Spiel. Ich hatte in meiner Wühlkiste noch ein USB zu RS232 Konverter-Kabel liegen doch der Pi hat auch auf der GPIO-Pin-Leiste eine RS232 Schnittstelle die allerdings mit 3V Pegeln arbeitet dazu später mehr. Um schnell QRV zu werden nahm ich erst mal das USB zu RS232 Kabel und wie zu erwarten war wurde das Kabel als ttyUSB0 erkannt und konnte benutzt werden. Nun musste nur noch XASTIR gestartet werden. Am besten erledigt man das über ein Terminal-Fenster und gibt dort beim ersten Start xastir -l German ein um dem Programm mitzuteilen das man es gerne auf Deutsch benutzen möchte. Hat man Xastir einmal seine Sprache mitgeteilt merkt es sich das und man kann es mit xastir im Terminal starten. Als nächstes fragt Xastir noch die üblichen Werte wie Rufzeichen, QTH, Koordinaten usw. ab. Nun muss man noch die Verbindung zum TNC einrichten. Das geschieht im Menü unter dem Punkt "Schnittstellen" -> "Schnittstellen-Steuerung". Dort klickt man auf den Button "Hinzufügen" und wählt "Serieller KISS TNC". In dem sich nun öffnenden Fenster trägt man unter TNC-Port/dev/ttyUSB0 ein und stellt die Baudrate des TNC ein, in meinem Fall sind das 9600 Baud. Danach wird noch unter Pfad 1 WIDE1-1,WIDE2-2eingetragen oder eben was man als Pfadeinstellung für richtig hält.Nach einem klick auf OK sollte der TNC in den KISS-Mode geschaltet werden und die ersten Pakete finden den Weg in den Raspi.
Aber wie das immer so ist wenn eine Sache funktioniert will man sie erweitern. Also war der nächste Plan den Raspberry als APRS I-Gate zu verwenden. Unter OpenSUSE schon ausgiebig getestet war es keine all zu große Herausforderung das einzurichten. Wieder unter dem Menüpunkt "Schnittstellen -> Schnittstellen-Steuerung" klickt auf den Punkt "Hinzufügen". Dort wählt man "Internet Server" und nimmt die Einstellungen vor. In meinem Fall wurde unter "Host" euro.aprs2.net eingetragen sowie der Zugangscode den man für den Zugriff auf die APRS Server benötigt. Als "Filter-Parameter" habe ich m/50 eingetragen, das bedeutet das nur Stationen im Radius von 50km um meinen Standort angezeigt werden. Um nun noch über HF empfangene Pakete ins Internet weiter zu leiten sind noch ein paar kleine Einstellungen nötig. Als erstes muss man nochmal unter "Schnittstellen -> Schnittstellen-Steuerung -> Serieller KISS TNC -> Eigenschaften" die Option "Weiterleitung NUR von HF nach Internet" aktivieren. Nun muss noch unter "Datei -> Einstellungen -> Grundeinstellungen" der Punkt "Weiterleitung NUR von HF nach Internet" angeklickt und das Fenster mit OK geschlossen werden. Ab jetzt leitet der Raspberry alle über HF empfangenen Pakete ins Internet an die APRS-Server weiter.
Wie schon erwähnt hat der Raspberry aber auch eine RS232 on board, und um nicht ständig eine USB-Buchse mit dem Schnittstellenwandler zu belegen wollte ich den TNC direkt an die RS232 hängen. Das Problem bestand also nun darin die 3V Pegel an die -+12V der echten RS232 Pegel anzupassen. Mit einem MAX3232 sowie 5 0,1µF Kondensatoren lies sich das sehr gut bewerkstelligen. Nach dem Aufbau der kleinen Schaltung schloss ich den Pi an meinen großen Rechner über ein Nullmodemkabel an. Ich öffnete auf dem PC CuteCom mit 115200Baud auf ttyS0 (ja mein Rechner hat noch eine echte RS232) und startete den Raspi neu. Jetzt konnte ich in CuteCom den Startvorgang des Pi mitlesen und wurde am Ende mit einem Login empfangen. Das bedeutete das die Schaltung mit dem MAX funktionierte. Nun musste noch die Schnittstelle von eben dieser Konsole befreit werden um auf ihr einen Datenaustausch stattfinden zu lassen. Zu diesem Zweck muss in der Datei /etc/inittab folgende Zeile durch eine # am Anfang auskommentiert werden: T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100. Nach einem Neustart des Pi kann man die RS232 frei verwenden. Nun kann man in Xastir bei "Serieller KISS TNC" die Schnittstelle auf /dev/ttyAMA0 ändern. Nach einem neustart von Xastir werden nun die Daten über die RS232 empfangen und gesendet.
SDR mit dem Raspi
Ein etwas komplexeres Thema ist es dem Pi das Empfangen von Funkwellen beizubringen. Wie schon viel berichtet gibt es eine Reihe DVB-T-Sticks die einen Chipsatz verbaut haben der sich zum Empfang im Bereich von 50-2000MHz eignet.
Also musste ein DVB-T Stick mit besagtem Realtek RTL2832U Chipsatz her. Meine Wahl viel auf den Hama Nano welcher zum Glück auch den E4000 Tunerchip verwendet und somit den größtmöglichen Empfangsbereich zur Verfügung stellt.
Aber um eines ganz deutlich zu sagen: der Pi ist nicht in der Lage das empfangen und dekodieren der Signale zu übernehmen. Dazu reicht seine Rechenleistung nicht aus. Er fungiert hier nur als Server der die empfangenen Rohdaten vom Stick ins Netzwerk weiterleitet. Das eigentliche dekodieren muss ein 2. leistungsstärkerer Rechner übernehmen.
Ab jetzt war ein wenig Handarbeit angesagt denn der Raspi kann mit dem Stick so nichts anfangen. Also ran ans Werk.
Als erstes muss man die Grundlage schaffen und seinen Pi auf den neusten Softwarestand bringen das geschieht mittels eines sudo apt-get update gefolgt von einem sudo apt-get upgrade. Nun muss man noch die Pakete git,cmake,libusb und build-essential installieren das geschieht mittels sudo apt-get install git, sudo apt-get install cmake, sudo apt-get install libusb-1.0-0.dev und sudo apt-get install build-essential. Hat man das erfolgreich erledigt lädt man sich aus dem git die rtl-sdr-Quellen mit dem Befehl git clone git://git.osmocom.org/rtl-sdr.git herunter. Jetzt wechselt man mit cd rtl-sdr/ in das Verzeichnis rtl-sdr und erstellt sich mit mkdir build das Unterverzeichnis bulid. Mit cd build begibt man sich nun ins Verzeichnis build und führt ein cmake ../ aus. Es ist nun alles zum kompilieren vorbereitet und kann mit einem make gestartet werden. Ist dieser Schritt durchgelaufen wird mittels sudo make install die Installation angestoßen. Als letztes müssen mit sudo ldconfig die neuen Bibliotheken dem System noch bekannt gegeben werden. Fertig. Gibt man jetzt sudo rtl_test -t ein sollte eine Ausgabe sichtbar werden in der der Stick aufgeführt wird. Soll nun der vom Stick empfangene Datenstrom ins Netzwerk weitergeleitet werden startet man den Server über rtl_tcp IP -a wobei IP durch die IP des Raspberry ersetzt werden muss. Ab jetzt schickt der Pi alle Daten ins Netzwerk. Das Ergebnis sollte so aussehen wie im Bild.
Raspberry Pi als Datenlogger
Vor einer Weile benötigte ich einen Datenlogger um den Ladestrom eines "defekten" Akkus zu überwachen. Zur Verfügung standen ein Raspberry Pi, ein Multimeter vom Typ UNI-T UT61D und ein dem Multimeter beigelegtes USB-Interface. Die mitgelieferte Software zu diesem DMM war unter Linux nicht lauffähig. Als erstes steckte ich das Interfacekabel an den Pi und die erste Ernüchterung folgte sofort. Meine Hoffnung war das sich das Kabel als virtuelle serielle Schnittstelle also ttyUSB0 z.B. anmeldet, aber leider haben unsere Freunde aus Fernost in diesem Kabel einen Chip verbaut der sich als HID meldet also als Human Interface Device. Diesem die Daten zu entlocken ist nicht ohne weiteres möglich. Also Kabel wieder ab in die Schublade und das Internet gequält. Nach einiger Suche kam die Hoffnung zurück. Das Multimeter sendet über die optische Schnittstelle die Daten RS232 konform mit 2400 Baud. Das reichte mir erstmal als Info und ich zog aus der Bastelkiste eine Fotodiode um mein eigenes Interface zu bauen. Nun wurde die Fotodiode an die UART Pins des Pi gesteckt und mit einem Pull-Up die Datenleitung auf 3.3Volt gezogen. Ein erster Blick mit Cutecom auf die RS232 (ttyAMA0) des Raspberry machte mich mehr als glücklich denn es kamen tatsächlich Daten an. Nun musste noch das Protokoll des DMM "entschlüsselt" werden.Zum Glück gab es noch mehr Menschen auf der Welt die sich mit Multimetern und deren Protokollen beschäftigen und so konnte ich nach kurzer Zeit das Telegramm zerlegen und in meinem Programm verarbeiten. Nun folgten 2 Abende Python Programmierung. Am ersten Abend hatte ich das Programm soweit das es in der Konsole die vom DMM gesendeten Daten ausgibt. Nun war das aber nicht all zu schön anzusehen, also musste das ganze eine GUI bekommen. Deshalb wurde am 2. Abend das ganze mit Hilfe von TKinter grafikfähig. Die Daten werden "Live" ,sowie in einem Diagramm grafisch dargestellt. Ausserdem speichert das Programm alle Messwerte in eine .csv Datei um sie mit einer Tabellenkalkulation auszuwerten. Endlich konnte ich Messwertreihen aufnehmen und mein Akku stellte sich nicht als defekt heraus sondern als einfach schlecht behandelt. Nach 4 Lade-entlade-Zyklen war der Gute wieder Topfit und ich konnte das Ganze in schönen Diagrammen sichtbar machen. Das Programm steht unter diesem Artikel zum Download bereit. Um es auf dem Raspberry laufen zu lassen müssen noch die Bibliotheken "PySerial" sowie die "Python Megawidgets" (Pmw) auf dem Raspi installiert werden. Es ist sicher nicht supersauber geschrieben, aber ich habe bei diesem Programm zum ersten mal in Python programmiert und es zeigt wie einfach Python zu erlernen ist. Mal sehen was mein nächstes Python-Projekt wird.