Serial Receive and Send
Gegen Ende des Projektes BReaBox II musste ich noch den letzten Feinschliff der Software vornehmen. Hierzu war zusätzlich zur Soundkarte also ein USB-Hub und ein Netzwerkadapter nötig, um mich über ssh ein zu loggen. Zudem fand ich die Arbeit mit dem Texteditor Nano bei längeren Dateien recht mühsam.

Ich entschied mich dafür, direkt über einen USB2Serial Wandler ein Terminal auf den Pi zu öffnen. So konnte ich die Soundkarte in dem einzigen USB Port des Pi lassen ohne viele Kabel auf dem Tisch. Eine Konfiguration des Pi war auch nicht nötig, da die serielle Schnittstelle als Standard bei Rasbian aktiv ist. Die Schaltung sieht dann so aus: Im Mac/Linux öffnet man nun ein Terminal und tippt den Befehl
ls /dev/*usb*
was den individuellen Bezeichner der seriellen Schnittstelle auflistet. In meinem Fall ist es das Gerät tty.usbserial-A50285BI mit dem ich mich mit dem Befehl
screen /dev/tty.usbserial-A50285BI 115200
mit 115200 Baud verbinde. Nun tippt man den Nutzernamen auf dem Pi, was je nach Distribution entweder pi oder root ist. Man wird aufgefordert, das Passwort ein zu geben und schon ist man auf der gewohnten Konsole.

Das Problem ist nun, das verschiedene Programme wie nano oder top nicht besonders gut funktionieren, da sie nicht stumpf Textzeichen senden, sondern die Textzeichen an gezielte Positionen an den Bildschirm schreiben wollen, was von screen nicht besonders gut unterstützt wird.

Zudem ist nun die Übertragung von Dateien jeglicher Art nur sehr schwer möglich. Hier kommt nun meine Eigenentwicklung ins Spiel.

Um diese zu Nutzen überträgt man die beiden Dateien serr und sers einmalig auf den Pi in ein Verzeichnis, wo sie von überall gestartet werden können. Eventuell müssen mit chmod +x auch noch Ausführungsrechte für beide vergeben werden. Genauso verfährt man auf dem Mac. Will man nun eine Datei vom Mac auf den Pi spielen, so startet man zuerst serr auf dem Pi und dann sers auf dem Mac.

Dazu ein Beispiel: die Datei test.txt soll vom Ordner /Users/stefans/ auf dem Mac zum Ordner /tmp/ auf dem Pi übertragen werden.

In der Pi bzw. screen Konsole tippt man:
serr /tmp/test.txt
Nun öffnet man auf dem Mac eine weitere Konsole (in der ersten läuft ja screen) und tippt:
sers /Users/stefans/test.txt
Die Datei sollte nun erfolgreich dort angekommen sein. Der Vorteil dieser Methode ist zudem, ständig die aktuellste Datei auf dem Mac zu haben, um sie stilvoll zu bearbeiten und sinnvoll zu sichern ;-)

Die Konsole von screen kann am Ende auch noch sauber geschlossen werden. Dazu benutzt man die Mac Konsole (also nicht die Pi Konsole) und bringt die Nummer des screen in Erfahrung.
screen -list
Als kryptische Antwort erhält man so etwas wie 7042.ttys000.Stefans-Mac Dann beendet man diesen, in dem man Ihr einen quit Befehl schickt:
screen -X -S 7042 quit
Was passiert im Hintergrund?
Die beiden Skripte serr und sers sind in Python geschrieben und haben nur zum schnelleren tippen keine Endung.

- Der serr Befehl versetzt den Pi in den Warte Modus

- Der sers Befehl zippt die Datei in einem Temp Verzeichnis

- Encoded sie im Base64 Format, das hauptsächlich aus den Zeichen A-Z, a-z und 0-9 besteht um sie ohne Steuerzeichen geeignet für eine Übertragung zu machen

- Zerteilt und sendet Sie in Blöcken á 4000 Zeichen mit Pausen von 0,05 Sekunden zwischen den Blöcken

- Danach wird eine Checksumme angehängt, mit dem der Pi die Übertragung checken kann

- Auf dem Pi läuft nun der Prozess quasi rückwärts ab und nur bei passender Checksumme wird die Datei tatsächlich geschrieben/überschrieben