Octoprint mit Raspberry Pi

Aus K8200 Wiki
Wechseln zu: Navigation, Suche

Octoprint auf Raspberry Pi installieren

Anmerkung zum Banana Pi: Die Installation auf einem Banana Pi läuft nahezu identisch ab. Abweichend ist hier lediglich das Image (bestenfalls wohl Debian) sowie der Standard-Benutzername, der statt pi nun bananapi lautet. Hiermit ist auch das Homeverzeichnis nicht /home/pi sondern /home/bananapi).


Hier möchte ich eine kleine Anleitung veröffentlichen, die es ermöglicht einen Raspberry Pi oder einen Banana Pi unter Zurhilfenahme von Octoprint als Host zu benutzen. Dieser Host ist dann im Heimnetzwerk (oder falls gewünscht auch per Internet) erreichbar und dient dazu G-Code an den 3D-Drucker zu senden und einige manuelle Bewegungen / Einstellungen durchzuführen. Dies stellt u.A. auch einen guten Ersatz zum Display mit SD-Karttzenleser dar, da ein via USB angeschlossener PC entfällt, da der Raspberry dessen "Arbeit" übernimmt. Weiterhin kann eine USB-Cam angeschlossen werden, um den Druckvorgang aus der Ferne beobachten zu können.

Download Raspbian Image

Download des Images Raspbian (Debian für Raspberry Pi) (Zip-Image) von der Webseite http://www.raspberrypi.org/downloads/ (Link 1) Z.Zt. aktuell 2015-01-31-raspbian.zip

Image entpacken

Zuerst wird das Zip-Archiv des Images entpackt in eine .img-Datei (z.Zt. entsprechend 2015-01-31-raspbian.img)

Vorbereiten einer SD-Karte mit dem Image

Die SD-Karte sollte mindestens 8GB haben. Sämtliche Daten auf der Karte werden bei diesem Vorgang gelöscht. Die Verwendung einer schnellen Karte (Class 10) ist empfehlenswert, da die gesamten Dateisystem-Zugriffe sich später auf der Karte abspielen. Der Raspberry nutzt die SD-Karte als Festplattenlaufwerk und legt bei der Erstinstallation darauf verschiedene Partitionen an.

Um das Image auf die Karte zu bringen wird der Win32DiskImager (Link 2) verwendet. Hiermit wird das heruntergeladene und entpackte Image (aktuell die Datei 2015-01-31-raspbian.img) auf der Karte angelegt (die Datei wird nicht dorthin kopiert, vielmehr wird der Inhalt des Images in einer neuen Partition als verschiedene Dateien und Ordner auf der Karte angelegt).

Jetzt die SD-Karte in einen Kartenleser einlegen und am Windows-PC einstecken und den Laufwerksbuchstaben des Kartenlesers ermitteln. Im Win32DiskImager wird das Image (z.B. 2015-01-31-raspbian.img) und das Device (achtet genau auf den korrekten Laufwerksbuchstaben) ausgewählt. Nach Klick auf Write startet der Vorgang der ein paar Minuten benötigt (USB 2.0).

Nachdem dies geschehen ist, muss die SD-Karte aus dem Kartenleser entnommen und in den Raspberry eingelegt werden.

Basisinstallation des Raspbian auf dem Raspberry Pi

Der Raspberry wird am besten mit einem HDMI-Kabel an einen Monitor oder Fersehgerät angeschlossen. Als Tastatur sind handelsübliche USB-Geräte verwendbar (ich benutze eine Logitech, K400r, die auch ein Mousepad beinhaltet und benötige daher nur einen USB-Port). Netzwerkanschluss (ich bevorzuge LAN nicht WLAN) kann auch bereits angestöpselt werden.

Nun den Raspberry an die Spannungsversorgung (USB-Ladegerät) anschliessen und warten, bis sich nach kurzer Zeit das Configurationsmenü öffnet.

Hierin sollten die foilgenden Dinge erledigt werden:

Expand Filesystem:

Das Filesystem wird auf der SD-Karte maximiert angelegt, so dass der gesamte Platz auf der Karte dem Raspbian zur Verfügung steht.

Change User Password:

Soll der Octoprint-Dienst auch im Internet zur Verfügung stehen (Fernzugriff mittels Handy / Tablet), dann sollte hier ein eigenes Passwort verwendet werden (Standard User: pi Kennwort: raspberry)

Internationalisierung:

Zeichenkodierung:

de_DE ISO-8859-1 default: de_DE

Zeitzone:

Europe / Berlin

Tastaturlayout:

z.B. Logitech Generic Keyboard, German, German (kein Special Key und kein Key zum beenden das X-Servers)

Advanced Options:

A2) Hostname:

einen Maschinen-Namen festlegen (z.B. OptoRas)

A4) Enable SSH:

SSH-Verbindungen gestatten (um später via SSH (Putty) auf die Konsole des Raspberrys zu gelangen und weitere Konfigurationen zu erledigen)

Nun das Config-Menü verlassen und dadurch den Raspberry neu starten

Bestimmen der Netzwerkadresse

Nachdem der Raspberry neu gestartet ist, kann man sich an der Kommandozeile (Shell) mittels des Usernamens pi (kleingeschrieben) und des oben vergebenen Kennwortes anmelden.

Für späteren Zugriff via SSH-Verbindung benötigen wir nun die IP-Adresse. Standardmässig ist DHCP aktiviert, so dass der Raspberry in der Regel eine Adresse vom hauseigenen Router erhalten sollte.

Durch den Aufruf von ifconfig lässt sich die Adresse des Netzwerkanschlusses eth0 (LAN) ermitteln. In meinem Fall ist es die 192.168.xxx.62 (der Beginn sollte 192.168. sein, da es sich um ein lokales Netz handelt).

Nun stelle ich im meinem Router (z.B. Fritz-Box) ein, dass dieses Gerät immer die gleiche IP-Adresse erhalten soll und weise auch hier den oben vergebenen Hostnamen zu (in meinem Fall OctoRas).

Verwendet man eine WLAN-Verbindung kann man diese über das GUI (grafische Oberfläche die mittels startx aufgerufen wird) einrichten. Details gehen mir hier zu weit, deshalb nur Folgendes:

Die WLAN-konfiguration findet sich unter den Einstellungen -> WiFi Configuration. Dort wird bei erfolgter Verbindung auch die IP-Adresse angezeigt.

Diese sollte sich dann im heimischen Router wie o.a. fixieren lassen.

SSH-Verbindung zum Raspberry anlegen

Mit Hilfe der SSH-Verbindung kann man dann ohne ständig zwischen den Geräten wechseln zu müssen (ggfs. Tastatur hin und herstöpseln) am heimischen PC weitermachen und benötigt den angeschlossenen Monitor, Tastatur und ggfs. Maus dort nicht mehr.

Für die SSH-Verbindung verwenden wir Putty (Link 3)

Nach dem Download starten wir Putty. Im Dialogfenster können wir nun den lokalen Namen, oder die IP-Adresse des Raspberrys angeben.

Die Einstellungen (ggfs. SSH aktivieren) lassen sich auch speichern wenn man einen Namen vergeben hat, so dass man dies später nicht wieder tun muss.

Dann klicken wir auf OPEN.

Es öffnet sich ein Konsolenfenster und es erscheint einmalig eine Meldung, da das Gerät "gegenüber" noch nicht bekannt ist. Diese Meldung bestätigen wir, sie erscheint daraufhin nicht wieder.

Nun loggen wir uns mit dem Benutzernamen pi und den oben vergebenen Benutzerkennwort ein.

Wenn dies erfolgreich war, wird die Tastatur und der Monitoranschluss des Raspberrys nicht mehr benötigt, da wir nun alles an der Konsole oder über die Web-Oberfläche des im folgenden installierten Octoprints erledigen können. Es ist auch möglich via SSH-Verbindung die grafische Oberfläche des Raspberrys zu benutzen, dies benötigt aber noch einige zusätzliche Schritte.


Update und Upgrade des Raspbians

Da das nun installierte Raspbian u.U. schon wieder nicht mehr ganz up to date ist können wir dieses noch updaten / Upgraden.

Hierzu geben wir Folgendes ein:

sudo apt-get update

Daraufhin werden die Paketlisten des installierten Pakete (sie enthalten die Versionen) aktualisiert.

dann:

sudo apt-get upgrade

Hiermit werden die installierten Pakete auf den neuesten Stand gebracht. Ggfs. auftretende Dialoge sind mit Ja zu bestätigen.

Installation von Octoprint

Die Installation von Octoprint gestaltet sich im Grunde genommen wie bei http://octoprint.org (Projektwebsite Link 4 und Installation auf Projektrepository Link 5) beschrieben.

Für Diejenigen, die des Englischen nicht so mächtig sind versuche ich es mal mit eigenen Worten zu kommentieren:

Die erste Befehlsfolge:

Wechsel in das Heimverzeichnis des Benutzers pi (der gerade angemeldet ist):

cd ~

Download und Installation der benötigten Pakete (python-pip, python-dev und git)

sudo apt-get install python-pip python-dev git

Download und Installation des python-setuptools (vermutlich zur Ausführung des Installationsscriptes erforderlich)

sudo apt-get install python-setuptools

Download des Octoprint-Installationsverzeichnises (es wird im Homedirectory des Benutzers pi angelegt ( /home/pi/OctoPrint )

git clone https://github.com/foosel/OctoPrint.git

Wechsel in das neue (heruntergeladene) Verzeichnis OctoPrint (beachte GROSS-/kleinschreibung)

cd OctoPrint

Start der Installation von Octoprint (es handelt sich um ein python-Script, welches mit Root-Rechten ausgeführt wird (sudo))

sudo python setup.py install

Erstellen eines Verzeichnisses (.octoprint) im Homedirectory des Benutezrs pi

mkdir ~/.octoprint

Zweite Befehlsfolge:

Damit der Benutzer pi auch die serielle Schnittstelle uneingeschränkt benutzen darf (ja, Linux ist da sehr restriktiv) muss ihm dies gestattet werden.

Hinzufügen des Benutzers pi zur Gruppe tty und dialout (Nutzung der seriellen Schnittstellen (auch virtuelle via USB-Port))

sudo usermod -a -G tty pi

sudo usermod -a -G dialout pi

Wir wechseln nun wieder in das Homedirectory ( /home/pi )

cd ~

Erststart

Zum Starten geben wir Folgendes ein:

octoprint

Das Antwort sollten einige Textzeilen erscheinen, in der in der letzten Zeile u.A. zu lesen ist:

... Listening on 0.0.0.0:5000

Dies bedeutet, dass der Octoprint-Server erfolgreich gestartet ist und auf dem Port 5000 (Standard-Port) zur Verfügung steht.

Web-Zugriff und erste Einrichtung des Interfaces

Nachdem wir nun bis hier gekommen sind, können wir das Webinterface des Octoprints öffnen. Hierzu die Adresse bzw. den lokalen Namen des Raspberrys in die Adresszeile, gefolgt von :5000 eingeben.

Z.B.: http://OctoRas:5000

Bei diesem ersten Start öffnet sich autom. ein Konfiguirationsfenster, in dem wir bei späterem Zugriff via Internet unbedingt einen Benutzernamen und ein Kennwort festlegen sollten. Dies lässt sich auch übergehen (Disable Access Control), jedoch empfehle ich dies ausdrücklich nicht. Unbedingt Benutzername und Passwort aufschreiben !!

Nachdem dies geschehen ist, können wir die Website öffnen. Wir sehen die Oberfläche, können jedoch Nichts tun, bevor wir uns eingeloggt haben (oben rechts).

Also bitte einloggen...

Wenn auch dies funktioniert hat, dann ist jetzt der perfekte Moment, den Drucker an einen USB-Port anzuschliessen. Da wir nun schon keine Tastatur oder Maus am Pi benötigen ist normalerweise ein Port frei, wenn kein WLAN verwendet wird sogar zwei (Model B).

Sollte der Raspberry nun noch nicht am Ort des Druckers sein, so lässt sich dieser mittels folgendem Kommando herunterfahren (bitte nicht einfach Netzteil abziehen):

sudo shutdown -h now

Nachdem er am Ort des Geschehens angekommen ist genügt es die Spannungsversorgung wiederherzustellen. Der Pi startet selbstständig.

Ggfs. muss (nach Shutdown / reboot) die SSH-Sitzung geschlossen und eine Neue geöffnet werden.

Nach Neustart muss ggfs. auch wieder der octoprint-Server gestartet werden, da dieser noch nicht beim Systemstart gestartet wird:

octoprint

Nun bitte ggfs. erneut die Webseite aufrufen und einloggen.

Im linken oberen Bildbereich können nun die Verbindungsparameter ausgewählt werden. Diese sind im Normalfall /dev/tty/usb0 und 250000 Baud. Die Kontrollkästchen "Save Connection Settings" und "Auto-Connect at Startup" können und sollten aktiviert werden.

Dann Klick auf Connect => Der Drucker sollte verbunden werden können. Falls nicht ist noch das PyserialFix erforderich um die 250000 Baud tatsächlich nutzen zu können. In diesem Fall keine Panik, diese Anleitung wird fortgesetzt.

PySerialFix (Python Serial Fix) (nicht immer erforderlich)

Nachdem ich das nun auch noch einmal live gestestet habe, benötigt man beim Raspberry mit dem aktuellen Raspbian Image kein Pyserial Fix. Dies ist beim Banana Pi anders gewesen. Daher weise ich hier einmal auf diesen Zusammenhang hin:

In einigen Python-Versionen sind lediglich die gebräuchlichen Baudraten für die seriellen Schnittstellen freigegeben. Daher ist ein Verbindungsaufbau mit 250 000 Baud, wie es ja beim K8200 Standard ist, nicht möglich. Abhilfe lässt sich durch das sogenannte PySerialFix schaffen, der in einer erweiterten Python Bibliothek auch die erweiterten Baudraten gestattet.

Alex English hat einen passenden Beitrag auf seiner Website veröffentlicht (Link 6). Demzufolge lädt man das Fix herunter und patched die Python-Bibliothek wie folgt:

Erstellen eines Verzeichnisses in das das Patch geladen wird:

cd ~ mkdir PySerialFix cd PySerialFix

Herunterladen des PySerail Fixes:

wget http://sourceforge.net/p/pyserial/patches/_discuss/thread/ed3fb0de/f4fd/attachment/pyserial.patch

Nun eine Sicherheitskopie der vorhandenen Datei, die gepatched wird erstellen. Dazu in das folgende Verzeichnis wechseln (kann auch ähnlich sein):

cd /usr/lib/python2.7/dist-packages/serial

Dort die Datei serialposix.py sichern (als root):

sudo cp serialposix.py serialposix.py.bak

Nun das Patch ausführen:

sudo patch serialposix.py /~/PySerialFix pyserial.patch

Danach ist es vermutlich ratsam den Raspberry / Banana neu zu starten.

Autostart des Octoprint-Servers bei Systemstart

Um nicht nach jedem Start des Raspberry / Banana den Octoprint-Server via SSH-Verbindung starten zu müssen bietet es sich an, diesen in den Startvorgang des Pis einzubinden. Hierzu ist es angedacht, die Startskripte, sie befinden sich im heruntergeladenen Verzeichnis (komplett: /home/pi/OctoPrint/scripts ), in das Verzeichnis /etc/init.d zu kopieren und dem System mitzuteilen, wann Octoprint gestartet und beendet werden soll.

Wechseln in das OctoPrint-Verzeichnis:

cd ~/OctoPrint

Für die folgenden Befehle sind Root-Rechte erforderlich, daher wird jeweils sudo vorangestellt. Kopieren dieser Skripte in das Verzeichnis der Startskripte:

sudo cp scripts/octoprint.init /etc/init.d/octoprint

Das Skript ausführbar machen:

sudo chmod +x /etc/init.d/octoprint

Die Voreinstellungen in das dafür vorgesehene Verzeichnis kopieren:

sudo cp scripts/octoprint.default /etc/default/octoprint

Mit dem abschliessenden Befehl wird Octoprint so in den Start- und Shutdownvorgang eingebunden, dass wir uns um Nichts mehr kümmern müssen:

sudo update-rc.d octoprint defaults

Von nun an sollte Octoprint automatisch starten, wenn das System bootet und entsprechend auch beendet werden, wenn das System herunterfährt bzw. neu startet.

Erweiterte Einstellungen

Swap Speicher aktivieren

Da der Raspberry Pi nur über einen begrenzten Arbeitsspeicher verfügt, ist insbesondere bei Funktionen wie Zeitraffer Videos das anlegen eines Auslagerungsspeichers sinnvoll.

Die Befehlsreihenfolge zur Erstellung eines Swap Speichers:

sudo su -c 'echo "CONF_SWAPSIZE=1024" > /etc/dphys-swapfile'

sudo dphys-swapfile setup

sudo dphys-swapfile swapon

Eine genaue Beschreibung ist hier zu finden: http://jankarres.de/2012/11/raspberry-pi-swap-erweitern/

Links

1) Raspbian Image: http://www.raspberrypi.org/downloads/

2) Win32DiskImager: http://sourceforge.net/projects/win32diskimager/

3) Putty (SSH-Programm): http://www.putty.org/

4) Octoprint Projektseite http://octoprint.org/

5) Repository des Projektes https://github.com/foosel/OctoPrint/wiki/Setup-on-a-Raspberry-Pi-running-Raspbian

6) Alex English PySerialFix http://www.alexenglish.info/2014/04/patching-pyserial-fix-baud-rate-limitations/#more-56

7) PySerial Fix (Download) http://sourceforge.net/p/pyserial/patches/_discuss/thread/ed3fb0de/f4fd/attachment/pyserial.patch

8) Jan Karres Blog: http://jankarres.de/2012/11/raspberry-pi-swap-erweitern/