Benutzeravatar
Administrator
Miller Mode mit Fräser als Taster
Klipper auf Raspberry Pi: GPIO / IO-Ports definieren

In Klipper können GPIO-Pins des Raspberry Pi direkt als Ein- oder Ausgänge genutzt werden. Der Pi wird dazu als zweite MCU (Mikrocontroller) in Klipper eingebunden.


Schritt 1: Raspberry Pi als sekundäre MCU einrichten

Damit Klipper die GPIO-Pins des Pi nutzen kann, muss der klipper-mcu-Dienst installiert und gestartet werden.

Code: Alles auswählen

cd ~/klipper
sudo cp ./scripts/klipper-mcu.service /etc/systemd/system/
sudo systemctl enable klipper-mcu.service
sudo systemctl start klipper-mcu.service
Anschließend den Pi-Benutzer der GPIO-Gruppe hinzufügen:

Code: Alles auswählen

sudo usermod -a -G gpio $USER
Hinweis: Danach einmal neu einloggen (oder neu starten), damit die Gruppe aktiv wird.


Schritt 2: printer.cfg – MCU eintragen

In der printer.cfg den Raspberry Pi als zweite MCU definieren:

Code: Alles auswählen

[mcu host]
serial: /tmp/klipper_host_mcu
Der Name host ist frei wählbar (z. B. rpi, raspi) und wird später als Präfix bei der Pin-Angabe verwendet.


Schritt 3: Pins referenzieren

Pins werden immer nach dem Schema mcu_name:gpio[nummer] angegeben.

Digitaler Ausgang (z. B. Lüfter an GPIO17):

Code: Alles auswählen

[output_pin gehaeuse_luefter]
pin: host:gpio17
value: 0
shutdown_value: 0
Digitaler Eingang (z. B. Taster an GPIO24):

Code: Alles auswählen

[button mein_taster]
pin: host:gpio24
PWM-Ausgang (GPIO18 – Hardware-PWM-fähig):

Code: Alles auswählen

[output_pin pwm_ausgang]
pin: host:gpio18
pwm: True
hardware_pwm: True
cycle_time: 0.001

Endstop: Fräser als Abtaster (Fräser = Masse, PCB = Signal)

Bei dieser Methode wird der Fräser elektrisch mit GND verbunden und die Kupferfläche der Leiterplatte an einen GPIO-Eingang des Raspberry Pi gelegt. Berührt der Fräser die PCB, schließt sich der Stromkreis – Klipper erkennt dies als Endstop-Auslösung (aktiv LOW).

Verdrahtung:
  • Fräser (Spindel / Spannzange) → GND des Raspberry Pi
  • Kupferfläche der PCB → GPIO-Pin (z. B. GPIO5) mit internem Pull-up
  • Kein externer Widerstand nötig – der interne Pull-up des Pi übernimmt das
Konfiguration in der printer.cfg:

Code: Alles auswählen

[stepper_z]
endstop_pin: ^!host:gpio5
position_endstop: 0
Erklärung der Symbole:
  • ^ – aktiviert den internen Pull-up-Widerstand am GPIO-Pin
  • ! – invertiert die Logik (aktiv LOW → wird als ausgelöst gewertet, wenn der Pin auf GND gezogen wird)
Hinweis zur Isolierung: Darauf achten, dass die Spindel wirklich nur über den definierten Pfad mit GND verbunden ist. Motorgehäuse, Kühlkörper oder Rahmen können ungewollte Masseverbindungen erzeugen und Fehlauslösungen verursachen. Im Zweifel ein Multimeter im Durchgangsprüfer-Modus zwischen Fräser und GND halten und testen, ob der Kontakt sauber schaltet.

Test vor dem ersten Einsatz:

Code: Alles auswählen

QUERY_ENDSTOPS
Gibt den aktuellen Zustand aller Endstops aus. Ohne Berührung sollte der Z-Endstop open anzeigen, bei Berührung des Fräsers auf der PCB TRIGGERED.


Lüfter per Makro steuern

Code: Alles auswählen

[output_pin gehaeuse_luefter]
pin: host:gpio17
value: 0
shutdown_value: 0

[gcode_macro LUEFTER_AN]
gcode:
    SET_PIN PIN=gehaeuse_luefter VALUE=1

[gcode_macro LUEFTER_AUS]
gcode:
    SET_PIN PIN=gehaeuse_luefter VALUE=0

BCM-Nummerierung (wichtig!)

Klipper verwendet BCM-Nummern, nicht die physischen Pinnummern am Board.

Code: Alles auswählen

BCM (Klipper)   Physischer Pin
gpio2           Pin 3
gpio3           Pin 5
gpio5           Pin 29
gpio17          Pin 11
gpio27          Pin 13
gpio22          Pin 15
gpio10          Pin 19
Vollständige Pinbelegung im Terminal anzeigen:

Code: Alles auswählen

pinout
(Paket: python3-gpiozero)


Häufige Fehler & Lösungen

Fehler: Unable to open port: /tmp/klipper_host_mcu
  • Dienst läuft nicht → prüfen mit: [icode]sudo systemctl status klipper-mcu.service[/icode]
Fehler: gpio5: permission denied
  • Benutzer nicht in der gpio-Gruppe → [icode]sudo usermod -a -G gpio $USER[/icode] + neu einloggen
Fehler: Endstop löst dauerhaft aus oder nie
  • Polarität prüfen – ggf. ! entfernen oder hinzufügen
  • Masseverbindung am Fräser/Rahmen prüfen (Multimeter!)
  • Pull-up fehlt – ^ vor dem Pin-Namen nicht vergessen
Fehler: hardware_pwm schlägt fehl
  • Hardware-PWM funktioniert nur auf GPIO 12, 13, 18, 19 → für andere Pins [icode]hardware_pwm: False[/icode] setzen

Getestet mit: Klipper v0.11 · Raspberry Pi 3B+ und 4 · Mainsail & Fluidd

Fragen und Ergänzungen gerne in die Kommentare!
🔧 Troubleshooter | Entwickler | Klipper
⚠️ Hinweis: Ich hafte nicht für verbrannte Finger oder verstopfte Nozzles.
👉 Erste Regel: Hast du dein Druckbett gelevelt?

Information

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast