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
Code: Alles auswählen
sudo usermod -a -G gpio $USER
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
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
Code: Alles auswählen
[button mein_taster]
pin: host:gpio24
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
Code: Alles auswählen
[stepper_z]
endstop_pin: ^!host:gpio5
position_endstop: 0
- ^ – 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)
Test vor dem ersten Einsatz:
Code: Alles auswählen
QUERY_ENDSTOPS
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
Code: Alles auswählen
pinout
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]
- Benutzer nicht in der gpio-Gruppe → [icode]sudo usermod -a -G gpio $USER[/icode] + neu einloggen
- 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
- 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!