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 entpackt man die Dateien aus dieser Zip, überträgt 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 |