OctoPrint Update und GPIO am Prusa i3 MK3S reparieren

Seit Monaten bekomme ich eine Warnmeldung, wenn ich die Weboberfläche meiner OctoPrint-Server an meinen Druckern öffne: Die verwendete Python-Version hat ihr End-of-Life-Datum überschritten. Ein einfaches Update reicht in diesem Fall (auf Raspberry-Basis) nicht aus, eine saubere Neuinstallation ist der sicherere Weg.

Für meinen Eigenbau 3D-Drucker auf Prusa-Basis nutze ich den Raspberry Pi Zero 2 W. Auch wenn Prusa diese Lösung mittlerweile offiziell nicht mehr unterstützt, bevorzuge ich dieses Setup weiterhin. Ich finde es einfach unglaublich praktisch, dass man den kleinen Rechner direkt auf das Einsy-Board des Druckers stecken kann. Dadurch bleibt die reguläre serielle USB-Schnittstelle frei, es gibt keinen Kabelsalat und ich kann trotzdem problemlos eine Kamera zur Fernüberwachung nutzen. Da ich ohnehin nicht allzu viele Plugins in OctoPrint verwende, komme ich mit der etwas geringeren Rechenleistung des Zero 2 W wunderbar zurecht.

Mit diesem Beitrag beschriebe ich, wie ich bei der Neuinstallation für das OctoPrint Update und bei den GPIO Anpassungen vorgegangen bin, um die blockierte Verbindung über die Pins wiederherzustellen. Ich habe ein paar Versuche benötigt, vielleicht trägt dieser Beitrag dazu bei, schneller ans Ziel zu kommen.

Das braucht man für das Update

  • Einen Rechner mit SD-Kartenleser
  • Eine neue Micro-SD-Karte (ich behalte die alte erstmal als Notfall-Backup)
  • Den Raspberry Pi Imager
  • Einen reinen Texteditor (z. B. Notepad++ für Windows)

Schritt 1: Ein Backup in OctoPrint erstellen

Bevor ich irgendetwas lösche, sichere ich die alten Daten. OctoPrint macht mir das zum Glück sehr leicht. Unter den Einstellungen (das kleine Schraubenschlüssel-Symbol) findet man den Punkt „Backup & Restore“. Hier erstellt man mit einem Klick eine Sicherung aller Einstellungen, Plugins und Druckdateien. Die erzeugte ZIP-Datei lade ich anschließend lokal auf meinen Rechner herunter.

Weitere detaillierte Informationen zum Backup-Prozess findet man in der offiziellen OctoPrint Dokumentation.

Schritt 2: Die neue SD-Karte mit dem Raspberry Pi Imager vorbereiten

Um Python zu aktualisieren, installiere ich OctoPi komplett neu. Ich wähle im Raspberry Pi Imager das Raspberry Pi Modell (in meinem Fall den Zero 2 W) und unter „Choose OS“ das aktuelle OctoPi-Image (meist unter „Other specific-purpose OS“ -> „3D printing“ zu finden) aus. Das Image schreibe ich mit dem Pi Imager auf die neue SD-Karte.

Schritt 3: Backup wiederherstellen

Nachdem der Pi mit der neuen SD-Karte gestartet ist und ich mich über die (selbe) IP-Adresse mit der Weboberfläche verbunden habe, sehe ich den Einrichtungsassistent. Hier kann man direkt auswählen, ‚ein bestehendes Backup wiederherstellen‘. Ich lade die heruntergeladene ZIP-Datei hoch. OctoPrint startet neu und alle meine Plugins und Einstellungen sind wieder da und auch gleich aktualisiert.

Schritt 4: Die GPIO-Verbindung wiederherstellen (Config-Dateien anpassen)

Genau hier wartet eine Falle, wenn der Pi über die GPIO-Pins direkt auf dem Board kommuniziert. Nach dem Einspielen des Backups sah bei mir alles gut aus, aber die Plugins funktionierten nicht. Beispielsweise wurde die IP-Adresse nicht mehr auf dem Display des Druckers angezeigt. Der Grund: Ein frisches OctoPi-Image blockiert standardmäßig die serielle Schnittstelle für Bluetooth oder die Systemkonsole. Der Drucker kann also nicht mit dem Pi kommunizieren.

Mein Tipp zur Textbearbeitung: Nutze für die folgenden Schritte unbedingt einen reinen Code-Editor wie Notepad++ oder den vorinstallierten Editor Deines Betriebssystems. Programme wie Word zerstören die Formatierung der Linux-Dateien, wodurch der Raspberry Pi nicht mehr startet!

1. Die Datei config.txt anpassen

Über Putty verbinde ich mich direkt mit der Konsole des Raspberry Pi 2W; alternativ kann man die SD-Karte auch wieder in den Rechner stecken und über das Betriebssystem (Windows) arbeiten. Ich öffne die Datei /boot/firmware/config.txt. Ganz am Ende füge ich folgende Zeilen ein, um Bluetooth zu deaktivieren und die UART-Schnittstelle freizugeben:

dtoverlay=disable-bt
enable_uart=1

Ich arbeite über Putty direkt auf der Konsole. Die Datei öffne ich mit sudo nano config.txt Nach den Änderungen speichere ich die Datei mit STRG + O ab und schließe den Editor mit STRG + X.

2. Die Datei cmdline.txt anpassen

Als nächstes öffne ich die Datei /boot/firmware/cmdline.txt. Hier suche ich nach dem Eintrag console=serial0,115200 (meist gleich am Anfang) und entferne diesen komplett. Wichtig: Auch das Leerzeichen danach löschen! Der Rest der Zeile muss zwingend unverändert und in einer einzigen Zeile stehen bleiben.

Eine korrekte Zeile sieht dann beispielsweise so aus:

console=tty1 root=PARTUUID=96ff23ce-02 rootfstype=ext4 fsck.repair=yes rootwait cfg80211.ieee80211_regdom=DE

Eine offizielle Bestätigung zur Konfiguration der Pins bei Prusa-Druckern findest Du in der Prusa Knowledge Base.

Der finale Test

Datei speichern, die SD-Karte wieder in den Raspberry Pi einsetzen (wenn man die Dateien am PC bearbeitet hat) und neu starten. In der Weboberfläche von OctoPrint unter „Verbindung“ den seriellen Port /dev/ttyAMA0 auswählen. Wenn man nun auf Verbinden klickt, sollte der Drucker wieder problemlos ansprechbar sein und alle Plugins ihren Dienst wie gewohnt verrichten.