Raspberry PI als SDR Server

Auf der 58. UKW-Tagung (es wurde berichtet) gab es verschiedene Vorträge zu dem vielseitigen Raspberry PI - darunter auch einen Punkt, wo der Raspberry PI als SDR Server betrieben werden kann.

Die Idee fand ich ziemlich cool und einfach und so also direkt mal ausprobiert. Ich nutze dafür den R820T NooElec Stick, der knapp 20€ kostet und für die "normale Anwendung" reicht.

An sich reichen ein paar Zeilen Code, bis das Ganze läuft. Der Raspberry stellt dabei nur das Signal zur Verfügung, weshalb die CPU-Last auf den Client ausgelagert wird.

Nachfolgend kurz die Kommandos, die auf der Shell ausgeführt werden müssen:

Das erste Kommando lädt allgemein Pakete herunter, die für den weiteren Verlauf gebraucht werden:

 sudo apt-get install git cmake libusb-1.0-0.dev build-essential 
  • git: Versionsverwaltungssystem - genutzt für Softwareprojekte
  • cmake: Tool für die Erstellung von Software. Es generiert zusätzliche Dateien, die von dem eigentlichen Compiler später genutzt werden.
  • libusb-1.0-0.dev: USB-Programmierbibliothek
  • build-essentials: Wird benötigt, um Pakete zu erzeugen

Das zweite Kommando lädt den Programmcode für benötigte Software, um den DVB-T Stick zu steuern. Der Befehl erstellt ein neues Verzeichnis, in diesem Fall "rtl-sdr" und lädt die Quelldateien unter der angegebenen URL in dieses Verzeichnis.

 git clone git://git.osmocom.org/rtl-sdr.git 

Wir wechseln in das neue Verzeichnis, erstellen den Ordner "build" und wechseln in diesen.

 cd rtl-sdr/ 
 mkdir build 
 cd build 

Wir führen "cmake" auf dem darunter liegenden Ordner aus. Das Resultat landet in dem Ordner "build", den wir eben angelegt haben.

 cmake ../ 

Compilieren des Codes und anschließendes Installieren der Software.

 make 
 sudo make install 

Der Befehl "ldconfig" steuert die Verwaltung der Bibliotheken, die im System verwendet werden und mit dem nachfolgenden Befehl werden die Verweise auf diese Bibliotheken aktuallisiert.

 sudo ldconfig 

Für die Kommunikation mit dem Stick muss noch eine Datei kopiert werden. "udev" ist dabei ein Gerätedienst, der die Geräte im Verzeichnis /dev dynamisch verwalten kann. Wir müssen dazu zunächst in das darüberliegende Verzeichnis wechseln und anschließend die Datei kopieren:

cd .. 
sudo cp rtl-sdr.rules /etc/udev/rules.d 

Jetzt muss eigentlich nur noch das Programm gestartet werden. Da das Ganze über das LAN funktionieren soll, muss die IP mit angegeben werden:

sudo rtl_tcp -a 'ip' 

Also zum Beispiel:

sudo rtl_tcp -a 192.168.0.42 

Die Software startet und der Raspberry PI ist nun ein "SDR-Server".

Im Standard läuft der Server auf dem Port "1234". Dieser wird auch auf dem Raspberry PI beim Starten des Programms angezeigt.

Wir können die Wahl des Ports auch beeinflussen, indem wir den Parameter -p verwenden:

sudo rtl_tcp -a 192.168.0.42 -p 1337

In diesem Fall würde der SDR-Server jetzt auf dem Port 1337 erreichbar sein.
----

Ein Leser dieses Beitrags hat mir mitgeteilt, dass er den "SDR-Server" nicht starten konnte, da das Modul dvb_usb_rtl28xxu blockiert war. Sollte dieses Problem auftreten, kann das Modul mit folgendem Befehl aus dem Speicher entfernt werden:

 sudo rmmod dvb_usb_rtl28xxu 

----

Das Ganze lässt sich jetzt relativ simpel über das Programm SDR# steuern. Dazu muss in der Liste der Eintrag RTL-SDR / TCP gewählt - und unter "Configure" die IP und der passende Port gesetzt werden.
sdr_sharpUnd dann sollte eigentlich alles klappen. Wer das Tool zum ersten Mal nutzt, sollte etwas mit den Einstellungen spielen und darauf achten, dass die Werte "RF-Gain" oder "Filter bandwidth" passend zum erfassten Signal gesetzt sind.

Raspberry_SDR_Tisch

In vielen Quellen liest man, dass das Ganze nicht über WLAN und auch nur mit einem sehr schnellen LAN funktioniert. Ich habe meine Installation im Internet zur Verfügung gestellt und eigentlich funktioniert das so auch noch ganz gut. Auf jeden Fall ein schöne Möglichkeit für den Raspberry PI!

42 Antworten auf Raspberry PI als SDR Server

  1. willi sagt:

    Hallo Tobias, ich habe deinen Bericht über den SDR Server mit dem Raspberry gelesen.
    Ich würde es gerne mal Testen, würdest du mir Zugriff übers Internet gewähren ?
    Vielen Dank und eine Streßarme Woche
    Willi

  2. Pingback: Raspberry PI als zentraler TOR Server | Tobias Hardes

  3. Ottmar sagt:

    Danke für die Beschreibung.
    Das ist mal eine, mit der auch ich als totaler Linux Neuling was anfangen kann.
    Wenn mein Pi angekommen ist, wird ich das mal testen.
    Bin mal gespannt, ob das auch noch über das Internet mit einem Uplink einer 6000 er DSL Leitung (also bestenfalls ca. 800MBit/S) funktioniert.
    Wär ne tolle Sache, wenn ich so mein "Heimatrelais" auch an meinem 2ten Wohnsitz hören könnte.
    73
    Ottmar

    • Hallo Ottmar,

      danke für Dein Feedback - hört sich ja gut an :-). Ich fand die anderen Anleitungen zu diesem Thema immer relativ "oberflächlich" und wollte es daher etwas genauer mit Erklärungen zur Verfügung stellen.

      Zu dem Uplink:
      In der Regel gibt es hier glaube ich 512 kbit/s Upload bei einem DSL 6000. Das könnte etwas eng werden. Aber wenn Du Deinen PI zum SDR umgerüstet hast, kannst Du mir ja vielleicht ein kurzes Feedback zukommen lassen.

      73
      Tobias

      • Ottmar sagt:

        Hallo Tobias,
        mein pi ist da und ich habe das Teil (auch als totaler Linux-Laie) nach deiner Anleitung zum Laufen bekommen. Kleiner Schönheitsfehler in der Anleitung scheint zu sein "build-essentials" muss scheinbar "build-essential" heissen. Im LAN läuft das jetzt jedenfalls prima. Nur wenn ich die Verbindung beende (von Sdrsharp) dann muss ich den Server (rts_tcp) auf dem PI wieder neu starten. Da hatte ich mal irgendein script oder sowas im Netz gesehen, aber finde das leider nicht wieder.
        Ach ja, bei meinem ersten Wohnsitz habe ich eine 16000er DSL Verbindung. Da war offenbar die 1 untergegangen. Hier am 2ten Wohnsitz bekomme ich nur 6000 aber das wär ja für den downlink vermutlich ausreichend. Auf jeden Fall ist Deine Anleitung sogar für mich als "Maus-Schubser" super und hat zum Erfolg geführt :-))
        73 es 55, dg8ag
        Ottmar

        • Hallo Ottmar,

          danke für den Hinweis, habe ich korrigiert. Das Du den Dienst neu starten musst ist seltsam, aber Du kannst das Kommando zum Starten des Servers mit einem & beenden, dann läuft das so gesehen im Hintergrund. Also so:
          sudo rtl_tcp -a 192.168.0.42 &

          Ich musste den nicht jedes Mal neu starten. Wie Du oben in den Kommentaren lesen kannst, wurde mein SDR hier auch mal von jemand anderem übers Internet verwendet und hier habe ich eigentlich nie etwas gemacht.

          Versuch es doch mal so.

          73
          Tobias

          • Ottmar sagt:

            Hallo Tobias,
            das hilft leider auch nicht. nach "Stop" vom sdr# hängt das Programm im Pi mit "Signal caught, exiting!". Als Dienst bleibt es teilweise so hängen, dass ich den Prozess dann killen muß.
            Jetzt zur Bandbreite:
            Ein erster Test von meinem 6000er DSL ins Büro ergibt, dass diese Verbindung definitiv zu langsam ist ! Schade, dass man das nicht auf dem Pi dekodieren kann und dann nur die Steuerungsbefehle und das (komprimierte) Audio über die Leitung schicken. Aber dazu gibt's wohl keine Möglichkeit. Scheinbar reichen da die Recourcen des Pi nicht.
            Wenn ich mal wieder in meinem anderen QTH bin, werde ich mal einen Test von der 16000er Leitung machen. Vielleicht reicht da ja der Uplink.
            73
            Ottmar

          • Ottmar sagt:

            Nachtrag:
            Ich habe remote auf einem Windows-Rechner im Heimat QTH das sdr_tcp gestartet und über die 16000er Leitung getestet. Offensichtlich ist der Upload auch bei der 16k zu gering.
            Fazit: Betrieb per LAN ok, aber über "normale" DSL-Verbindung (ADSL) nicht machbar.
            Vielleicht hilft das ja dem ein oder anderen.
            73
            Ottmar

          • Hallo Ottmar,

            sorry für die späte Antwort. Eine 16000er Leitung bei der Telekom einen Upstream von 1024 kbit/s. Ich bin aktuell nicht auf dem Laufen, was den SDR angeht, aber vielleicht lässt sich das Ganze komprimieren. Ich selbst habe 2,5 Mbit/s Upload und da funktioniert es ganz gut, allerdings ist hier die Leitung dann auch ganz gut ausgelastet. Es kann natürlich auch sein, dass parallel noch einiges lief, dass lies sich so nur schwer feststellen.

            Wenn ich mal Zeit habe, prüfe ich das mal genauer und ergänze die Anleitung. Danke für Deine Beiträge!

            73
            Tobias

  4. Andreas sagt:

    Hallo Tobias,
    Danke für diese schöne Anleitung!
    Ist es auch möglich, nach Deiner Anleitung, den SDR-Empfang direkt auf dem Raspi zu nutzen? Auswertung und Anzeige mit dem Raspi-Monitor mit osmocom z.B.?

    Vielen Dank im Voraus
    73 Andreas DL5AKN

    • Hallo Andreas,

      danke für Dein positives Feedback :-) !

      Zu Deiner Frage: Ich denke schon, dass es möglich ist und Du bist auch nicht der Erste, der mich das fragt... Ich werde mir das mal genauer anschauen. Das Ergebnis findest Du dann hier, aber ich denke, dass es eine Zeit dauern wird, bis ich dazu kommen werde.

      73
      Tobias (DO2TOH)

  5. Carl sagt:

    Hallo,

    erstmal besten Dank für die gute Anleitung!
    Ist es möglich den PI auch mit zwei Sticks zu bestücken? Wie definiere ich dann welcher Stick zu welchem Port gehört?

    Gruß
    Carl

    • Hi Carl,

      danke für Deinen Beitrag.

      Wenn Du das sdr_tcp Kommando ausführst, dann siehst Du vermutlich Deine zwei Geräte, gestartet mit Nummerierung 0.
      Den Port setzt Du mit -p, also z.B.
      sudo rtl_tcp -a 192.168.0.42 -p 1337
      Nach der manpage solltest Du mit -d die ID für den Dienst setzen können, also wie folgt:
      sudo rtl_tcp -a 192.168.0.42 -d 1 -p 1337
      oder eben
      sudo rtl_tcp -a 192.168.0.42 -d 0 -p 1338

      Damit sollte Gerät 1 auf Port 1337 und Gerät 0 auf 1338 laufen.

      Das ist nur eine Idee, ich habe leider keine zwei Geräte zum Testen hier, aber eine Rückmeldung von Dir wäre super.

      Grüße

  6. Smikey sagt:

    Hey, hab es Dank deiner Anleitung auch auf dem Raspberry laufen.
    Die einzige Anmerkung ist die folgende: Ich finde SDR# nicht ganz so toll im Gegensatz zu SDR Radio V2. Ist meiner Meinung nach vieeeel empfindlicher was den Empfang angeht. Als ich SDR# genutzt habe, hab ich nicht annähernd die Hälfte von dem empfangen, was mit SDR Console möglich ist. Und das läuft mit dem RaspberryPi auch prima. Einzige Bedingung, dass es nicht stockt: Beide PCs sollten im LAN verbunden sein. Im WLAN reicht die Übertragungsrate (bei mir) nicht.

    Grüße

  7. Michael Schwarz sagt:

    Hi,

    ich habe das eben auch mal ausprobiert.
    Zu der sache mit dem wifi: das ganze funktioniert bei mir mit der einschränkung
    das ich maximal 0,25MSPs benutzen kann, dann flutzscht das aber auch durchs wifi

    Eventuell könnten die kollegen die das per DSL versuchen wollen einfach die niedrigste
    samplerate ausprobieren...

    Liebe Grüße
    Micha

  8. Klaus sagt:

    Hallo, hab heute versucht als Newbee den Server zu installieren.
    Leider bleibe ich beim "sudo ldconfig" haengen und dort kommt keine Meldung zurueck. Auch beim letzten Befehl "sudo cp rtl.sdr.rules /etc/udev/rules.d " sagt er das er die Datei nicht finden kann. Was mache ich falsch ? Vielen Dank fuer die Hilfe.

    • Hi Klaus,

      Du bekommst auch keine Fehlermeldung oder ähnliches bei dem ldconfig? Bleibt es einfach nur hängen? Vielleicht nicht lange genug gewartet? Ich weiß jetzt ausm Kopf nicht wie lange das dauert, aber eigentlich geht das relativ fix.

      Zum zweiten Punkt: Ja Du hast recht, da ist ein Problem. Wechsel mal mit "cd .." in das darüberliegenden Verzeichnis und führe dann nochmal den Befehl "sudo cp rtl.sdr.rules /etc/udev/rules.d " aus. Dann sollte es klappen. Ich habe das in der Anleitung geändert. Danke für die Hinweis.

      73
      Tobias

  9. Marc sagt:

    Hat laut Anleitung Klasse funktioniert, danke dafür !

    Aber wie zum Henker lasse ich das ganze automatisch starten? Also nur Rasberry Strom geben und er startet rtl-tcp.
    Mit Linux stehe ich auf Kriegsfuß und bekomme das einfach nicht hin.

    Und warum geht der Server nur beim ersten Zugriff? Drücke ich bei Sharp SDR stopp und danach wieder play dann hängt der Server.

    Wenn einer für die beiden Probleme eine Lösung hat, dann wäre das ganze eine runde Sache.

  10. Marc sagt:

    Den Autostart von RTL-TCP habe ich mittlerweile hinbekommen.

    Man muss in rc.local folgende Zeile einfügen: /usr/local/bin/rtl_tcp -a 192.168.178.42
    (als IP Adresse natürlich die gewünschte eintragen)

    Leider bleibt nach wie vor das Problem, das man SDR Sharp nach stoppen nicht wieder starten kann. Ist der Empfänger direkt am Win7 Rechner angeschlossen geht das ohne Probleme.

    Auch stürzt der Empfänger am Pi manchmal ab, Shrap SDR zeigt dann unsinnige Werte. Das passiert mit USB direkt Verbindung zum Win7 Rechner nie.

    Jeder Tip ist willkommen....

  11. Alex sagt:

    Danke für die Anleitung. Es klappte problems diese auf einem frischen Raspbian umzusetzen. Allerdings kann ich die Probleme mit rtl_tcp bestätigen: beim ersten Verbinden mit SDR# funktioniert es tadellos. Wenn man danach versucht sich wieder neu zu verbinden hängt sich rtl_tcp auf. Hat jemand hierfür schon eine Lösung gefunden?

  12. Habe leider das gleiche Problem. Ich habe schon viel gesucht, aber noch nichts weiter gefunden. Eventuell weiss jemand mehr?
    Leider lässt sich das Programm auch nicht toll debuggen. Im syslog des rpi steht nichts zu Programmabsturz drin.
    73 de DG4SEV

  13. Michael sagt:

    das ist kein Programmabsturz, sondern ein gewolltes Beenden. Wenn der Client danach neu Verbinden können soll, müsst ihr rtl_tcp in einer Schleife starten. (while do ...)

    • Thorsten sagt:

      Hallo Tobias und Michael,

      erstmal Daumen hoch für die tolle Anleitung. Es hat keine 5 Minuten gedauert einen SDR-Server mit einem Hama Nano DVB-T zum laufen zu bringen.
      Könntet ihr den Vorschlag von Michael noch ins obrige HowTo mit aufnehmen?

      Liebe Grüße
      Thorsten
      DG5YIM

  14. Deichgraf sagt:

    Moin,

    ich konnte deine Anleitung auch prima auf openSUSE 13.2 umsetzen und habe meine heimische "heulSUSE" nun zum SDR-Server machen können. Danke dafür! Leider reicht auch meine I-Net Leitung nicht aus (32/2 von KDG) um den Stream weiterzureichen, aber zuhause kein Thema. Als nächstes teste ich mein WLan (bis 300 MBit), ich werde wieder berichten!

    Toll wäre, wenn du für uns mal einen anständigen Antennentip hättest, den viele, so wie ich, haben keine Möglichkeit eine Discone (oder vergleichbar) hinzustellen (obwohl ich sogar noch eine hätte)...

    Gruß
    Deichi

    • Deichgraf sagt:

      Diesen Schritt könnt ihr wie folgt umgehen:

      1) Datei "/etc/modprobe.d/rasp-blacklist" öffnen
      2) Folgendes eintragen (oben, damit ihr's wiederfindet):
      # USB-DVB-T Stick Hama Nano (or similar) if used as a SDR-Receiver
      blacklist dvb_usb_rtl28xxu
      blacklist rtl2832
      blacklist rtl2830

      3) Datei speichern

      Beim nächsten Bootvorgangs wird das Modul vom Kernel nicht mehr (!) mit geladen, obwohl der Stick noch am Rasp. hängt. Wenn ihr den Stick irgendwann mal wieder als das nutzen wollt, wozu er da ist (DVB-T), müssen diese Zeilen wieder entfernt werden.

      Auch musste ich meine Parameter erweitern, da mir sonst der Stream zum SDR-Sharp oft abgeschmiert ist:

      rtl_tcp -d 0 -b 30 -a 192.168.0.xx -p 1337

      Gruß
      Deichi

  15. Christof Proft sagt:

    Danke für das How-To und die hilfreichen Anmerkungen, insbesondere zur rc.local.
    Die Sache funktioniert nicht nur mit dem Raspberry Pi, sondern auch mit einer iomega iconnect unter Debian wheezy.
    Iomega Iconnect: http://www.engadget.com/2010/03/15/iomega-iconnect-review-getting-your-printers-hdds-online-has-n/
    Seit ca. 2012 außer Produktion, kriegt man auf eBay für unter 20 EUR.
    Anleitung und Image zur Debian-Installation: http://www.congenio.de/infos/iconnect.html
    Vorsicht: Ich hatte hierfür zwei Intenso 4GB Micro-USB-Sticks vorgesehen. Image läßt sich erstellen und umrechnen. Bei der Nachinstallion von Paketen wie oben beschrieben, stiegen beide Sticks aus und werden nur noch als "schreibgeschützt" erkannt, Schreibschutz läßt sich nicht mehr zurücksetzen. Die Sticks sind sehr klein und wurden beim Installieren sehr heiß. Möglicherweise liegt hier das Problem. Mit "normal großen" Sticks gibt es keine Probleme.

  16. Deichgraf sagt:

    Hallo Christof,

    am "Hama Nano" verbrennst du dir nach einigen Minuten auch die Finger. Meine Lösung ist, den "Nano" an einem kurzen USB-Kabel und dieses Kabel mit einem Kabelstrabs an das Gitter des extra 80er Lüfter, der die Luft auf meinem Gehäuse befördert. Und die "Gummi-Muschi" runter (!) von "Nano" :-)

    Gruß
    Deichi

  17. Christian sagt:

    Hallo Tobias,
    Raspi als rtl Server läuft soweit. Aber mit der aktuellen Version von SDR# (heute herunter geladen und installiert) finde ich nirgendwo rtlsdr_tcp als Auswahl. HAst Du vielleicht einen Tipp, wie ich das ändern könnte? HAbe schon den ganzen Nachmittag gesucht und nichts gefunden.

    Danke,

    Christian

  18. mph sagt:

    Zum Thema "Signal caught, exiting!" und/oder "Segmentation fault" gibt es eine Lösung!

    Da es oft rechliche Probleme mit Verlinkungen gibt, sollen an dieser Stelle google Suchbegriffe den richtigen Treffer zum Link führen.

    Suchbegriffe: photobyte.org RTL-SDR Segmentation Error Solved

  19. mph sagt:

    Und wer eine Autostart mit wahlweiser WiFi Connections haben möchte, ist mit diesen google Suchbegriffen gut aufgehoben: photobyte.org Auto-Start rtl-sdr Server

  20. Ragman sagt:

    Hallo

    Sehr interessante Sache.Nur bekomme ich keine Verbindung zum Raspberry.
    Habe alle Schritte gemacht.Am Ende kommt immer,wenn ich mit SDR Sharp verbinden will " Es konnte keine Verbindung hergestellt werden,da der Zielcomputer die Verbindung verweigerte 192.168.178.37:1337 "
    Andere Ports habe ich auch schon ausprobiert.
    Wäre super,wenn mir da jeman weiterhelfen könnte.

    Danke

  21. digitoils sagt:

    Hallo Tobias,

    zunächst vielen Dank für deine Anleitung. Mein Raspberry läuft und mit den zusätzlichen Infos von mph habe ich den Autostart und das Problem "Signal caught, exiting!" eingerichtet.

    Mein Problem: SDR# wirft beim Zugriff folgende Fehlermeldung aus:

    Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte 192.168.1.150:1234

    Die IP ist richtig, der Port auch. Hat jemand hierzu eine Idee?

    Danke!

  22. digitoils sagt:

    ...
    Problem gelöst.
    Ich musste in der rc.local vor dem Programmaufruf den Befehl
    sudo rmmod dvb_usb_rtl28xxu
    einfügen, um das Modul zuvor aus dem Speicher zu entfernen.
    Jetzt läuft alles butterweich.
    Noch einmal ein Dank an Alle für die hilfreichen Hinweise!

  23. Pingback: APRS iGate über HAMnet mit pymultimonaprs | Stefans Blog

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *