Skip to content

Mikro-Howto: OctoPrint mit RaspberryPI und TouchUI über Elcrow 5" Display steuern

Dies ist nur ein Howto für mich selbst und wen es sonst noch interessiert. Die Anleitung funktioniert mit meinem System, bei anderen Menschen kann das wieder ganz anders sein. Daher: Nachmachen auf eigene Gefahr!

Ausgangslage: Ich möchte meinen 3D Drucker, den ich über den OctoPrint Server, der unter OctoPI auf einem Raspberry PI 3B+ läuft, und somit über jeden vom Server zugelassenen Rechner aus zu steuern ist, notfalls auch mal vor Ort in der Druckerei steuern können, ohne mir dort gleich einen Computer hinstellen zu müssen, der dann die meiste Zeit doch nur als Terminal vor sich hin verstaubt. Was liegt also näher, als die Himbeere mit einem halbwegs bedien- und erkennbaren berührungsempfindlichen Display auszustatten und damit die TouchUI zu bedienen?

Nach diversen Versuchen und Überlegungen bei der Suche nach einer angemessenen Unterbringung für den Rapsberry habe ich mich dann für Thing:2837163 entschieden, für das ein halbwegs finanzierbares Display über Alieexpress zu bekommen ist. Einige Wochen später klingelte denn auch der Bote aus dem fernen Osten und überreichte mir ein gut verpacktes Behältnis mit dem Display, welches bei genauerer Betrachtung einem Waveshare recht ähnlich sieht, jedoch - Chinas kapitalistischer Enklave Shenzen sei Dank - nur einen Teil dessen kostet, was für das nebenan gefertigte Waveshare fällig gewesen wäre und das bei Aliexpress auch deutlich günstiger als beim großen Fluß zu bekommen ist. Allerdings mit 3 Wochen Lieferzeit. Das Boardlayout ebenso wie der Chipsatz sieht dem hochpreisigerem Pendant jedenfalls zum Verwechseln ähnlich.

Was folgte, waren jedoch ein gutes Dutzend Versuche, das Display so zum Laufen zu bekommen, wie ich bzw. das von mir auserkorene Gehäuse das gerne hätte: Nämlich um 180° gedreht, damit der HDMI Connector in der dafür im Gehäusedesign eigens vorgesehenen Aussparung verschwinden kann. Die Anzeige des Displays ist dabei weniger das Problem, diese findet via HDMI statt, vielmehr ist ja Bildausgabe und Toucheingaben zweierlei. Das Display kann leicht um 180° gedreht werden, indem man sich per ssh auf dem Raspberry anmeldet:
ssh pi@octopi.lan

gefolgt von
sudo nano /boot/config.txt

und dann diesen Text am Ende um die Zeile
display_rotate=0

ergänzt. Klappt ganz gut, wenn man dann mit ctrl+x die so manipulierte Datei speichert und mit
sudo reboot -n

einen Neustart einleitet.

Treib(er)jagd
Die oben erwähnten erfolglosen Versuche, auf dem so gedrehten Display nun auch die Touch Eingabe einrichten zu können, hatten mich dann dazu veranlasst, doch mal nebenan, bei Waveshare zu schauen, wie das dort gelöst wurde. Denn die Elcrow KollegInnen wußten zwar von einer veralteten Treiber CD zu berichten und wie man das Display ihrer Ansicht nach zum Kooperieren bewegt, in der Praxis hatte dann trotzdem der Mauszeiger (heißt das auch so, wenn man den Finger dazu benutzt, um Eingaben zu tätigen??) das Gegenteil von den Bewegungen veranstaltet: Nach unten wischen - Zeiger wandert nach oben, nach Rechts wischen - Zeiger begibt sich schnurstracks nach links. Wenn das nur im richtigen Leben auch so wäre...

Wie auch immer: Bei Elcrow ist die Zeit offenbar vor dem Update des Eingabetreibers für den X-Server stehen geblieben, weshalb der entscheidende Hinweis auf die Verwendung des entsprechenden Treibers dort fehlt. Wenn wir schon mal auf der ssh Konsole sind, installieren wir diesen mit
sudo apt install xserver-xorg-input-evdev

Anschließend kopieren wir die Konfigurationsdatei dergestalt, daß sie eine höhere vorangestellte Zahl im Dateinamen hat wie die anderen im Zielverzeichnis. Dies, um zu verhindern, daß ein möglicher anderer Eingabetreiber die Bemühungen, das Touchdisplay einzurichten, verhindert:
sudo cp -rf /usr/share/X11/xorg.conf.d/10-evdev.conf /usr/share/X11/xorg.conf.d/45-evdev.conf
sudo reboot

Neuausrichtung
Nun lässt sich auch die Feinabstimmung mittels Eingabekalibration vornehmen. Dazu installieren wir das entsprechende Tool, wir nehmen dabei das der aktuellen Raspbian Version, somit gibt das bei späteren Updates auch weniger Treiberfolklore...:
sudo dpkg -i -B xinput-calibrator

Wir starten jetzt das System dazu nochmals neu, damit die Kalibrierung gestützt auf diese Treiber stattfindet. Nach dem erfolgreichen Login gehen wir dazu in der grafischen Benutzeroberfläche mit der Maus / Touchpen / Zeige- oder sonst einem Finger auf die Himbeere oben links und rufen unter "Einstellungen" das Kalibriertool auf. Mit dem entsprechenden Zeigegerät tippen wir auf die darin gezeigten 4 Punkte und Kopieren den anschließend ausgegebenen Text in die Datei
/ect/X11/xorg.conf.d/99-calibration.conf

Bei mir steht folgendes darin (Die diversen Optionen für die Einträge gibt es z.B. hier zur Auswahl. Auch ein Hersteller von 5" Displays ;-):
Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Option  "Calibration"   "3905 208 3910 288"
        Option  "SwapAxes"      "0"
EndSection

Abspeichern wie gehabt, neu booten. Nun sollte das System zügig starten und auf Benutzereingaben entsprechend reagieren.

Das erfreut uns, weshalb wir derartig motiviert sogleich zur Installation der Touch Oberfläche von OctoPrint schreiten. Hier hat der User jdufresne1 alles wichtige in seinem Beitrag ausgeführt, weshalb ich nur noch kurz darauf eingehe. Wieder per ssh auf dem Druckserver einloggen. Dann mit:
sudo apt install chromium-browser -y

den Browser für die Touch Oberfläche installieren. In dessen Fenster läuft zukünftig dann alles rund um die Bedienung des Druckservers ab. Anschließend daran laden wir die Autostart Prozedur von TouchUI herunter und machen in einem Abwasch die lokale Installation auf dem Raspberry startklar:
git clone https://github.com/BillyBlaze/OctoPrint-TouchUI-autostart.git ~/TouchUI-autostart/

Noch kurz diverse Einstellungen und Hilfstools installieren:
sudo ~/TouchUI-autostart/helpers/install

Nach einem Neustart sollte nun die TouchUI Oberfläche den 5" Bildschirm des Raspberry verzieren. Wer möchte, kann den Raspberry auch so einrichten, daß er ohne Benutzername und Passwort durchstartet. Mehr dazu im Wiki von TouchUI.

Der Vorteil des eingangs erwähnten Gehäuses ist, daß es genügend Platz bietet, zum Beispiel für ein Stepdown Modul, um die Energieversorgung des Rechners zukünftig vom nicht ausgelasteten Netzteil des Druckers sicherzustellen sowie für einen entsprechenden Lüfter. Falls es doch mal heißer her geht.

Irgendwie muss ich das alles finanzieren, daher sind die allermeisten Links Affiliate. D.h.:Solltet Ihr über diese Links zu einem Onlinehändler geraten und dort etwas bestellen, bekomme ich eine kleine Provision, für Euch ändert das am Preis natürlich nichts. Für die Inspirationen geht ein herzliches Dankeschön an die genannten Personen, insbesondere an die OctoPrint Community!

Keep on Coding Printing!

Diverser Tüddelkram zu Marlin

Noch ein kleiner Merkzettel für mich und wer es sonst noch brauchen kann, wie man jeden 3D Drucker den AnyCube i3 MEGA ein bisschen tieferlegt genauer einstellt.

  • Neben der richtigen Temperatur ist auch das Kalibrieren der Maße, die der Drucker fabriziert, wichtig. Wie man die Kalibrierergebnisse in Richtung dauerhafter Korrektur des Bettlevelings verarbeitet, verraten die Plastikjunies.

  • Zum Anschauen: Ein G29 Plotter, der die Ergebnisse einer Bettkalibrierung grafisch aufbereitet.

  • Ebenfalls wichtig ist das "PID Tuning", um konstante Temperaturen im Extruder bzw. Hotbed zu bekommen. Hier gibt es eine ausführliche Anleitung bei 3d Drucktipps. In dem Zusammenhang ist auch der Tipp von Panduin super.

  • Grundlagenarbeit: Es muss nicht gleich in 1st Layer Porn ausarten, trotzdem: Die Verbindung der 1. Drucklage zum Druckbett ist für die Haftung des Druckes entscheidend. Hier gibt es Tipps für die Einstellung mit dem Slicer Simplify3D.

  • Troubleshooting: Die Übersicht über diverse Fehler beim Drucken ist bei Simplify3D in Englisch sehr hilfreich.

  • Mit
    curl -k -H "X-Api-Key: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" -F "select=false" -F "print=false" -F "file=@[output_filepath]" "http://IPADDRESS:PORT/api/files/local" {STRIP "; postProcessing"} 
    kann direkt aus Simplify3D auf den OctoPrint Server gedruckt werden. Dabei sind natürlich der API Key statt den "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" einzufügen, ebenso die URL, unter der OctoPrint erreichbar ist. Wenn man bei "select" und / oder "print" statt "false" den Wert "true" angibt, druckt Octoprint automatisch los. Nicht ändern sollte man die Variable hinter "file" 8-)

  • Flusskontrolle: "Viele quälen sich unnötig lange durch unzählige Versuche, die richtige Einstellung für die Fördermenge (den so genannten “Flow–) ohne Extruder kalibrieren im Slicer einzustellen und stoßen dann trotzdem immer wieder auf das Problem der “over-extrusion– oder “under-extrusion–." Hier gibt es eine Schritt für Schritt Anleitung, mit deren Hilfe sich auch dieses (mögliche) Problem lösen lässt.

  • Zum auswendig Lernen: Der komplette Befehlssatz unter Marlin.

  • TBC...

Zu meinem YouTube Kanal, mit aktuellen Drucken.

AnyCubic i3 MEGA unter Marlin mit dem BLTouch leveln

The better the Leveling the better the Print:
Mal eben eine neue Ladeschale und Halterung für das Telefon ausgedruckt
Träger: Bowden X-Carriage for AnyCubic i3 MEGA by Audisis
Am leuchten ist der BLTouch
Mal ein kleiner Merkzettel für mich und wer es sonst noch brauchen kann, wie man den AnyCube i3 MEGA unter Marlin mit dem BLTouch oder einem der günstigeren Kopien mittels G- und M- Befehlen die Druckdüse in einen definierten Abstand zum Druckbett bringt, auf deutsch: levelt. Eingaben sind Rot, Kommentare hinter dem Semikolon nicht eingeben. Ich habe die Ausgaben auf das Wesentliche gekürzt. Vorab: Das Z-Probe Offset bedeutet die Differenz zwischen Auslösepunkt des BL Touch und der Düsenspitze.
Send: M851 ; Z Probe Offset anzeigen lassen
Recv: echo:Probe Z Offset: -2.02
Recv: ok
[...]
Send: M851 Z0 ; Z Probe Offset auf Null setzen
Recv: ok
[...]
Send: G28 ; Nullpunkt anfahren
[...]
Recv: echo:busy: processing
Recv: X:-5.00 Y:0.00 Z:0.00 E:0.00 Count X:-400 Y:0 Z:0
Recv: ok
[...]
Send: G1 Z1 X110 Y110 F2000 ; In die Mitte des Druckbettes fahren
Recv: ok
[...]
Send: G92 Z0 ;
Recv: X:110.00 Y:110.00 Z:0.00 E:0.00 Count X:8800 Y:8800 Z:0
Recv: ok
[...]
Send: G30 X110 Y110
[...]
Recv: Bed X: 110.00 Y: 110.00 Z: 2.08
Recv: X:77.00 Y:105.00 Z:10.00 E:0.00 Count X:6160 Y:8400 Z:4000
Recv: ok
[...]
Recv: ok
[...]
Send: G1Z-0.1 ; Bis 0.05mm / ein Kassenbon zwischen Düsenspitze und Bett passt. BTW: Ich empfehle als Metaller natürlich, eine Fühlerlehre, kann man auch für andere Sachen verwenden.
Recv: ok
[...]
Send: G1Z-0.1 ; Bis 0.05mm / ein Kassenbon zwischen Düsenspitze und Bett passt.
Recv: ok
[...]
Send: G1Z-0.1 ; Bis 0.05mm / ein Kassenbon zwischen Düsenspitze und Bett passt.
[...]
Send: G92 Z0 ; Neuer Nullpunkt an diese Stelle setzen
Recv: X:110.00 Y:110.00 Z:0.00 E:0.00 Count X:8800 Y:8800 Z:0
Recv: ok
[...]
Send: G30 X110 Y110 ; Offset ausgeben. Wert bei der 1. Z-Anzeige (hier in GRÜN angezeigt) merken
[...]
Recv: echo:busy: processing
Recv: Bed X: 110.00 Y: 110.00 Z: 2.08 ; Diesen Z-Wert merken!
Recv: X:77.00 Y:105.00 Z:10.00 E:0.00 Count X:6160 Y:8400 Z:4000
Recv: ok
[...]
Send: M851 Z-2.08 ; Neues Offset eingeben mit dem eben gemerkten Z-Weŕt
Recv: ok
[...]
Send: M500 ; Den Wert ins EEPROM speichern
Recv: echo:Settings Stored (731 bytes; crc 34074)
Recv: ok

Am besten mal den Drucker neu starten um 100% sicher zu gehen, daß er sich die neuen Offset Werte gemerkt hat. Anschließend mache ich 2-3 Kalibrierzyklen mit G28 / G29 und speichere die Werte im EEPROM mit M500:
Recv: Bilinear Leveling Grid:
Recv: 0 1 2 3 4
Recv: 0 +0.010 -0.020 -0.033 -0.020 +0.027
Recv: 1 +0.058 +0.023 +0.015 +0.040 +0.090
Recv: 2 +0.082 +0.040 +0.027 +0.058 +0.108
Recv: 3 +0.082 +0.053 +0.027 +0.065 +0.095
Recv: 4 +0.058 +0.010 -0.020 +0.003 +0.045
Recv:
Recv: X:164.00 Y:193.00 Z:12.06 E:0.00 Count X:13120 Y:15440 Z:4832
Send: M140 S0
Recv: ok
Send: M500
Recv: echo:Settings Stored (731 bytes; crc 9049)
Recv: ok

Der 2. Zyklus macht nochmal deutlich, daß mehrfache Kalibrierung nicht schadet:
Recv: Bilinear Leveling Grid:
Recv: 0 1 2 3 4
Recv: 0 +0.020 -0.017 -0.030 -0.025 +0.038
Recv: 1 +0.063 +0.038 +0.007 +0.055 +0.092
Recv: 2 +0.098 +0.043 +0.043 +0.063 +0.118
Recv: 3 +0.092 +0.055 +0.030 +0.075 +0.098
Recv: 4 +0.063 +0.013 -0.017 +0.013 +0.043
Recv:
Recv: X:164.00 Y:193.00 Z:12.06 E:0.00 Count X:13120 Y:15440 Z:4832
Send: M140 S0
Recv: ok
[...]
Send: M500
Recv: echo:Settings Stored (731 bytes; crc 34326)
Recv: ok
[...]

Das sollte dann aber auch reichen, denn "wer viel misst, misst Mist". ;-) Ich übermittle dem Drucker dann vor jedem Druck die neuen Einstellungen, die er dann entsprechend mit dem Druckauftrag verrechnet. Da ich immer über octoprint drucke, sieht das bei mir so aus:
G21 ; Wir verwenden Millimeter
G90 ; Absolute Positionierung...
M82 ; ... auch für den Steppermotor am Extruder
M107 ; Lüfter aus
G28 X0 Y0 ; Referenzpunkte XY anfahren
G28 Z0 ; Referenzfahrt auch für Z
G1 Z15.0 F{travelspeed} Z Achse 15 mm anheben
G92 E0 ; Extruder auf 0 setzen
G1 F200 E3 ; Extruder soll eine 3mm lange Wurst auspressen
G1 E0 ; und stoppen...
G1 F{travelspeed} ;
G28; Nullpunkte / Home anfahren
G29; Auto Bed Levelling (ABL) anwerfen
M500; Werte in Firmware / EEPROM speichern
M420 S1; BLTouch aktivieren

Es geht natürlich auch ohne octoprint, falls man direkt vom Slicer aus druckt. Auf jeden Fall sollte man sich für eine Methode entscheiden, nicht, daß nachher 2x gelevelt wird...

HINWEIS:
Alle gemachten Angaben sind ohne Gewähr auf Funktion und Richtigkeit. Für eventuell entstehende Schäden übernehmen wir keinerlei Haftung. Sämtliche Veränderungen geschehen auf Eure Verantwortung und Gefahr.

Irgendwie muss ich das alles finanzieren, daher sind die allermeisten Links Affiliate. D.h.: Solltet Ihr über diese Links zu einem Onlinehändler geraten und dort etwas bestellen, bekomme ich eine kleine Provision, für Euch ändert das am Preis natürlich nichts. Für die Inspirationen geht ein herzliches Dankeschön an die genannten Personen, insbesondere an die OctoPrint Community!

Keep on Coding Printing!

Kohle stoppen - Klimaschutz jetzt!

Foto: © Oliver Feldhaus / Umbruch Bildarchiv
Kurz vor Beginn der UN-Klimakonferenz in Kattowitz haben in Köln und Berlin zehntausende Menschen für den Kohleausstieg und den Klimaschutz demonstriert. Nach Angaben der Organisator*innen protestierten in Köln etwa 20.000 Menschen an der Deutzer Werft, in Berlin marschierten rund 16.000 Menschen zum Kanzleramt. Zu den Protesten hatten Umweltverbände und -initiativen aufgerufen, darunter BUND, Nabu und Greenpeace.

Zur Bilderserie beim Umbruch Bildarchiv

Weitere Informationen und Fotoberichte:
cronjob