SRCPD auf dem Raspberry Pi - Test und Anleitung

Schon vor einiger Zeit bekam ich von einem guten Freund einen Raspberry Pi, Version 2. Seitdem plante ich, die Bude auf ihre Tauglichkeit als SRCP-Server zu testen. Jetzt ist es endlich soweit – gestern und heute habe ich intensiv getüftelt. Das Ergebnis möchte ich hier vorstellen.

Raspberry Pi - was ist das?

Die "Himbeere" ist ein etwa faustgroßer Computer, der es faustdick hinter den Ohren hat. Das Ding ist OpenHardware und besteht aus einer einzigen kleinen Platine, auf der unter anderem ein 700MHz-starker ARM-Prozessor, ein Grafikchip, USB-, Netzwerk- und Soundkarte untergebracht sind. 700 MHz klingt nicht viel, hat auch für müllige Betriebssysteme wie Windows nix übrig. Aber: Es reicht, um mit einem sparsamen Ubuntu-Linux im Internet zu surfen, Office-Dokumente zu bearbeiten oder mittels einer Mediaplayer-Software das Heimkino zu schmeißen.

Bedient wird das ganze wie ein gewöhnlicher PC per Maus und Tastatur.

SRCP - was ist das?

SRCP steht für Simple Railroad Comand Protocol und ist ein offener Standard. Das Ganze ist ein Softwaresystem, mit dem sich vom Computer aus eine Modellbahn steuern lässt. Dabei gibt es dann einen Server, auf dem ein Programm läuft, welches die Steuerzentrale darstellt, und beliebig viele mit dem Server verbundene Clients. Diese Clients sind die eigentlichen Bedienelemente, mit denen ein Nutzer Befehle an den Server sendet, welcher die Befehle dann in "Morsecodes" umsetzt, die von den Fahrzeugen befolgt werden. Bediengerät kann alles mögliche sein, was sich irgendwie mit dem SRC-Protokoll zusammenbringen lässt, z. B. ein grafisches Programm auf einem PC oder ein Smartphone.

Technische Vorüberlegungen

Meine Modellbahn wird von einem Roco-Trafo 10718 über einen Roco Booster 10764 mit Strom versorgt (das ursprünglich mitgelieferte Netzteil [Roco 10850?] hat sich als ungeeignet herausgestellt) und wurde deshalb durch den größeren Trafo ersetzt.

Normalerweise schließt man an den Master-Anschluss des Boosters eine Lokmaus an; diese fungiert dann als Digital-Zentrale und erzeugt die Steuersignale. Alternativ kann man den Booster auch direkt von einem Rechner, auf welchem SRCPD läuft, mit Daten versorgen. Das geht über die serielle Schnittstelle und erfordert ein einfaches Adapterkabel (siehe Bild 1)

So habe ich das auch eine ganze Weile betrieben; ein alter Rechner, auf dem Ubuntu lief, diente dabei als Software-Zentrale. Allerdings ist es nicht gerade sparsam, einen Rechner für die Steuerung laufen zu lassen. Deshalb sollte die Raspberry das übernehmen.

Ich habe dann einige Forenbeiträge gefunden, in denen erwähnt war, dass dies möglich sei, also legte ich los.

Die erste Hürde ist, dass die Raspberry keinen "richtigen" seriellen Anschluss hat. Es gibt auf der Hauptplatine ein paar Pfostenstecker, die zwar ein serielles Terminal bereitstellen, aber nicht auf einem normkonformen Level. Soll heißen: 0 und 1 werden auf der Hauptplatine durch +3.3V / 0V gegen Masse dargestellt, die Norm sieht aber -5..12V / +5...12V vor.

Man braucht also einen Pegelumsetzer.

Hardware-Umsetzung

Einen solchen Pegelkonverter habe ich mir gestern und heute gebaut. Dazu habe ich mir von einem Kumpel einen Max232ECPE besorgt und im Internet eine passende Schaltung gesucht.

Es gibt verschiedene Varianten des Max232, die sich vor allem in der Dimensionierung der Kondensatoren unterscheiden. Was funktioniert muss man halt ausprobieren, oder die entsprechenden Datenblätter sichten.

Ich habe das Ganze deshalb erstmal auf einem Breadboard zusammengestöpselt. Da ich nur 0.1µF-Keramikkondensatoren zur Hand hatte, habe ich es mit diesen versucht.

Zum Testen, ob der Pegelumsetzer arbeitet, habe ich den Ausgang des Chips1 mit der seriellen Schnittstelle meines Rechners2 verbunden.

Wenn man beim großen Rechner in einer Konsole cat /dev/ttyS0 ausführt (Ausgabe dessen, was auf der Leitung ankommt) und dann den Raspberry startet, sollte man einige Bootmeldungen des Raspberry auf dem Bildschirm des großen Rechners sehen. Bei mir kam da zunächst nur Salat. Ein Zeichen dafür, dass die Pegel zwar korrekt umgesetzt werden, aber die Baudrate beim empfangenden PC nicht mit dem übereinstimmt, was die Raspberry sendet. Also auf dem großen Rechner stty -F /dev/ttyS0 raw speed 115200 ausführen (das sind die Voreinstellungen der Himbeere), dann sollte es klappen. Wenn nichts ausgegeben wird, kann das entweder daran liegen, dass man die falsche Schnittstelle ausliest (dann mal /dev/ttyS1 oder andere versuchen) oder der Pegelkonverter nicht richtig arbeitet.

Bei mir hat alles gleich perfekt funktioniert, also habe ich die Schaltung zusammengelötet. Ich habe keine Platine verwendet, sondern die Kondensatoren direkt an einen IC-Sockel gelötet. Die Anbindung an die Pfostenleiste des Raspberry habe ich mit Steckverbindern gemacht, ebenso den Kabelanschluss zur Bahn.

Der Booster hat zwei RJ-Buchsen3 als Eingang; für die Computersteuerung muss der PC mit der Master-Buchse verbunden werden. Dazu habe ich ein Lokmaus-Kabel zerschnitten und den gelben Draht mit dem TxD-Ausgang des Chips und den weißen mit der Masse (GND) verbunden.

Software

Zunächst muss man den seriellen Port des Raspberry zum Schweigen bringen. Das installierte Debian macht nämlich dort eine Konsole auf, sodass man sich theoretisch über eine serielle Verbindung auf dem Gerät einloggen kann. Um dies abzuschalten, muss man in der Datei /etc/inittab die Zeile T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100 auskommentieren oder entfernen und dann die Kiste neu starten.

Nun muss man noch den SRCPD für die Himbeere bauen. Ich habe mir dazu zunächst BerryBoot und damit dann ein Debian-Weezy auf der SD-Karte installiert. Man lädt sich dann die Quellen für das Programm herunter und entpackt diese mittels tar xfvz srcpd-xxx.tar.gz. Dann wechselt man ins entpackte srcpd-xxx-Verzeichnis und ruft ./configure auf.

Ist dies ohne Fehler durchgelaufen (es kann sein, dass es meckert, dann müssen ggf. benötigte Pakete vorher installiert werden), kann man make aufrufen. Dadurch wird der Quellcode zu einem ausführbaren Programm kompiliert. Mittels sudo make install wird das dann installiert.

Auf einer frischen Installation von Raspbian reichte bei mir folgendes:

cd srcpd-xxx
sudo apt-get update
sudo apt-get install htop vim screen libxml2 libxml2-dev
./configure
make
sudo make install

Jetzt kann man srcpd starten. Natürlich muss der SRCPDaemon konfiguriert werden. Dazu muss die Datei /usr/local/etc/srcpd.config angepasst werden. Ich hatte schon eine brauchbare Konfigurationsdatei, die nur um den seriellen Port /dev/ttyAMA ergänzt werden musste:

<?xml version="1.0"?>
<srcpd version="2.0">
    <bus number="0">
        <server>
            <tcp-port>4303</tcp-port>
            <pid-file>/var/run/srcpd.pid</pid-file>
            <username>nobody</username>
            <groupname>nogroup</groupname>
        </server>
        <verbosity>4</verbosity>
    </bus>
    <bus number="1">
        <ddl>
            <enable_maerklin>no</enable_maerklin>
            <enable_nmradcc>yes</enable_nmradcc>
            <enable_usleep_patch>yes</enable_usleep_patch>
        </ddl>
        <use_watchdog>no</use_watchdog>
        <verbosity>4</verbosity>
        <auto_power_on>yes</auto_power_on>
        <device>/dev/ttyAMA0</device>
    </bus>
</srcpd>

Hinweis: Version 2.1.1 lies sich bei mir zwar kompilieren und installieren, starb aber immer direkt nach dem Start mit einer Fehlermeldung ab. Version 2.1.2 läuft dagegen tadellos.

Damit der SRCP-Daemon automatisch gestartet wird, kann man vor dem "exit 0" ein "/usr/local/sbin/srcpd" in die Datei /etc/rc.local eintragen und diese Datei mittels chmod +x /etc/rc.local ausführbar machen.

Test

Ich habe dann auf der Himbeere in einer Konsole als Superuser srcpd ausgeführt und konnte mich problemlos von verschiedenen Geräten aus mit der Software verbinden. Sowohl jman auf dem Desktoprechner, als auch meine selbstgebaute SRCPD-Software fürs Handy kamen anstandslos mit dem Server klar. Die Kontroll-LEDs am Boster zeigten auch, dass Daten umgesetzt wurden, nur fahren wollte erstmal nichts. Erst als ich das USB-Netzteil, welches den Raspberry mit Strom versorgt, getauscht hatte ging alles.

Offenbar stören manche Netzteile die ohnehin schon recht störanfällige Verbindung zwischen dem Pegelwandler und dem Booster. Mein Tipp: Twisted-Pair-Kabel verwenden und möglichst kurz halten!


  1. TxD (Pin 14) und GND (Pin 15) ↩︎

  2. RxD (Pin 2 des 9-poligen D-Sub-Steckers) und GND (Pin 5 am D-Sub) ↩︎

  3. Westernstecker, auch als RJ12, RJ14 oder 6P6C bezeichnet ↩︎

Add new comment

Restricted HTML

  • Allowed HTML tags: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.