SRCPD auf der Raspberry Pi - Test und Anleitung

Schon vor einiger Zeit bekam ich von einem guten Freund eine 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, 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 mitgleieferte 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 als Software-Zentrale. Allerdings ist 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, wo 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 brauch 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 Chips (TxD [Pin 14] und GND [Pin 15]) mit der Seriellen Schnittstelle meines Rechners (RxD [Pin 2 des 9-poligen D-Sub-Steckers] und GND [Pin 5 am D-Sub]) verbunden.

Wenn man beim großen Rechner in einer Konsole cat /dev/ttyS0 ausführt (Ausgabe dessen was auf der Leitung ankommt) und dann die Raspberry startet, sollte man einige Bootmeldungen der 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-Buchsen (Westernstecker, auch als RJ12, RJ14 oder 6P6C bezeichnet) als Eingang, für die Computersteuerung muss 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, so dass 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 compiliert. 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 Tip: Twisted-Pair-Kabel verwenden und möglichst kurz halten!

Weichensteuerung mit dem Raspberry Pi

Das würde mich auch interessieren:
Wie läßt sich die Steuerung erweitern, so dass auch Weichen u. Signale gesteuert werden können?

---Klaus---

Ist zwar ein Jahr alt, ich

Ist zwar ein Jahr alt, ich mache es aber so:
Ich habe Loconet aufgebaut, mit Arduinos. Ein Arduino ist dabei als USB Buffer (nach P.Gahtow einfache Variante, 1 Transistor, 3 Widerstände, siehe hier http://pgahtow.de/wiki/index.php?title=Arduino_Loconet_Buffer, bei einigen China-Arduino UNOs gibt es ein Platz für ein Lötstift, wo die CTS angezapft wird, dazu die einfache Stromversorgung (FREMO 15 mA Stromquelle für LocoNet von der gleichen Seite, 12V von Arduino Vin. Wichtig - Arduino mit 12V versorgen, sonst reicht Vin nicht aus!), Sketch von P.Gahtow). Auf anderen Seite ein weiteres Arduino mit gleicher Loconet-Schnittstelle aber ohne Strom. Sketch ist bei mir von Shalex aus dem russischem TT-Hobby Forum. Gleisbesetzmelder sind im Eigenbau (je Kanal 1 Gleichrichterbruecke (oder 4 Dioden), 1 Widerstand, 1 Optokoppler) entstanden.

Weichensteuern

Hallo,
ich würde gerne wissen wie ich damit Weichen steuern kann.
Vielen Dank im voraus.

SRCPD

die Kopplung über den MAX232 habe ich nicht hinbekommen. Zur Kopplung an den ROCO-Booster 10764 habe ich mir das XPressNet-Interface von Peter Gilling gekauft (GCA139 ca. 27 EU) und hat auf Anhieb funktioniert. Auch das Thema Rückmeldekontakte über MCP23S17 hat funktioniert. Allerdings wollte ich auch gerne darüber steuern. Da fehlt mir noch ein weinig Wissen
Danke für das recht gut geschriebene Tutorial

SRCPD auf dem Raspberry Pi

Hallo,

mein Name ist Erwin.
Zuerst einmal Danke für die sehr gute Anleitung.
Ich versuche "SRCPD auf der Raspberry Pi - Test und Anleitung" nachzubauen.
Ich habe dazu noch Fragen.
Wenn ich Rocrail und Rocview auf dem Raspi installiert habe, muss dann in RocView "Rocrail Eigenschaften" Schnittstellenkennung: srcp der Hostname „127.0.0.1“ durch „localhost“ ersetzt werden?
Des weiteren ist auf dem Bild 4 zu erkennen, dass ein brauner Draht vom Raspi zum MAX232 R1out geht.
Ist der Draht notwendig, wenn an R1in kein Kabel angeschlossen ist?
Wenn ja, muss dann vom Raspi der Pin mit dem braunen Draht auf „in oder out“ eingestellt werden?
Es würde mich freuen, wenn Sie mir weiterhelfen könnten.

Schöne Grüße
Erwin

Danke

Ich bastel dann mal los, danke für die Anleitung.

jman

Hallöchen,
Erstmal schön geschrieben. Doch wo bekomme ich jman her? Der linken geht leider nicht mehr!
Und haben Sie noch einen guten Elektronik-Shop wo man die teile bestellen kann? Weil wegen 2 Euro wert eine reichelt Bestellung aufzugeben, ist mir der Versand nicht wert!

jman

Hallo! Vielen Dank für den Hinweis, beim Link zu jman hatte sich ein Fehler eingeschlichen. Ist jetzt korrigiert.

Was die Bauteile Betrifft: mit etwas Glück kann man das auch bei eBay bekommen. Aber meist sind dann da auch die Versandkosten höher als der Preis...