Raspberry Pi в роли принт-сервера — самый популярный апгрейд домашнего 3D-принтера. Klipper переносит расчёты траекторий на Pi и оставляет микроконтроллеру только шаги и температуры, поэтому печать идёт быстрее и точнее, а тюнинг вроде input shaping становится доступным. OctoPrint или Mainsail дают веб-интерфейс, камеру и очередь заданий. Разберём установку с нуля: от образа системы до первой калибровки.
Как устроен Klipper
Хост-часть на Raspberry Pi считает кинематику, разбивает модель на сегменты и отправляет плате компактные команды по USB или UART. Микроконтроллер выполняет шаги с точными таймингами и не отвлекается на планирование. Отсюда главный плюс: Pi можно менять и обновлять, не трогая прошивку платы, а конфигурация принтера остаётся текстовым файлом.
- Плюсы: высокая скорость, input shaping, pressure advance, понятные макросы, единый конфиг.
- Минусы: без Pi принтер не работает, нужен отдельный компьютер и стабильное питание.
- Ограничение: конфиг привязан к конкретной плате и кинематике, копировать его вслепую нельзя.
Подготовка Raspberry Pi
Берите Pi 3B+, 4 или 5 с 2 ГБ и больше; для одной печати хватает и Zero 2 W, но камера и веб-интерфейс её заметно нагружают. Образ Raspberry Pi OS Lite 64-bit пишется через Raspberry Pi Imager: там же задаются пользователь, SSH и Wi-Fi.
sudo apt update && sudo apt full-upgrade -y
sudo apt install -y git python3-venv python3-pip build-essential libncurses-dev
sudo usermod -aG dialout $USER
hostnamectl set-hostname printer-pi
После смены группы перезайдите по SSH, иначе доступ к /dev/ttyUSB0 не появится. Кабель от платы принтера — короткий, с ферритовым кольцом: длинный USB рядом с блоками питания даёт сбои передачи и случайные остановки печати.
Установка Klipper
Проще всего поставить хост-часть через KIAUH: он создаст службу klipper, каталог ~/printer_data и при желании добавит Moonraker с Mainsail. Ручная сборка тоже возможна, но тогда systemd-юнит и каталоги придётся готовить самому.
git clone https://github.com/dw-0/kiauh.git ~/kiauh
~/kiauh/kiauh.sh
cd ~/klipper
make menuconfig
make -j4
В меню KIAUH выберите Klipper, затем при необходимости Moonraker и веб-интерфейс. После установки соберите прошивку: в menuconfig укажите архитектуру платы, чаще всего STM32, модель процессора, смещение загрузчика и способ связи. Для плат Creality со стоковым загрузчиком смещение 28 KiB, для BigTreeTech с Katapult — 8 KiB; точное значение всегда указано в sample-конфиге вашей платы. Результат сборки — out/klipper.bin.
ls /dev/serial/by-id/
dmesg | grep -i -E "ch341|cp210|acm"
cp out/klipper.bin /media/$USER/SDCARD/firmware.bin
make flash FLASH_DEVICE=/dev/serial/by-id/usb-Klipper_stm32g0b1_000000000000
Платы со стоковым загрузчиком Creality прошиваются через SD-карту: файл должен называться firmware.bin. Платы с Katapult прошиваются командой make flash, путь подставьте из первой команды. После прошивки плата перезагрузится и появится в /dev/serial/by-id с новым именем.
Конфигурация принтера
Klipper не угадывает пины. Возьмите готовый sample из каталога config и замените serial на свой. Ниже фрагмент, который всё равно придётся править под конкретную плату.
[mcu]
serial: /dev/serial/by-id/usb-Klipper_stm32g0b1_000000000000
restart_method: command
[printer]
kinematics: cartesian
max_velocity: 300
max_accel: 3000
max_z_velocity: 5
max_z_accel: 100
[stepper_x]
step_pin: PA0
dir_pin: PA1
enable_pin: !PA2
microsteps: 16
rotation_distance: 40
endstop_pin: ^PB0
position_endstop: 0
position_max: 235
homing_speed: 50
Пины в примере условные, копировать их вслепую нельзя. Возьмите файл printer-creality-ender3-2018.cfg или аналогичный из ~/klipper/config, скопируйте в ~/printer_data/config/printer.cfg и меняйте только то, что относится к вашей модификации. После правки конфиг проверяется перезапуском службы.
sudo systemctl restart klipper
tail -n 40 ~/printer_data/logs/klippy.log
journalctl -u klipper -n 30 --no-pager
Первая калибровка
Перед печатью нужно обнулить геометрию и нагреватели. Команды вводятся в веб-интерфейсе или через консоль; после успешной калибровки Klipper сам дописывает результат в конфиг по SAVE_CONFIG.
PID_CALIBRATE HEATER=extruder TARGET=210
PID_CALIBRATE HEATER=heater_bed TARGET=60
BED_MESH_CALIBRATE
SHAPER_CALIBRATE
SHAPER_CALIBRATE требует акселерометра, например ADXL345 на SPI. Без него используют тест ringing tower и задают input_shaper вручную. Перед BED_MESH_CALIBRATE прогрейте стол до рабочей температуры: геометрия при нагреве меняется, и карта, снятая на холодном столе, будет неточной.
OctoPrint рядом с Klipper
OctoPrint — зрелый принт-сервер с плагинами, камерой и уведомлениями. С Klipper он работает через плагин OctoKlipper, но печать файлами идёт через виртуальную SD-карту Klipper, а не через последовательный поток, как с Marlin. Для новых сборок чаще берут Mainsail или Fluidd: они легче и рассчитаны на Klipper из коробки. Если OctoPrint уже привычен, ставьте его в venv.
python3 -m venv ~/octoprint
~/octoprint/bin/pip install --upgrade pip
~/octoprint/bin/pip install octoprint
~/octoprint/bin/octoprint serve --host 0.0.0.0 --port 5000
Проще взять образ OctoPi и не собирать зависимости руками. В обоих случаях не открывайте порт 5000 в интернет: OctoPrint не рассчитан на публичный доступ без обратного прокси и дополнительной защиты.
Диагностика и обновления
ls -l /dev/serial/by-id/
sudo systemctl status klipper --no-pager
sudo systemctl status octoprint --no-pager
sudo journalctl -u klipper -f
Типичные проблемы: плата не видна (кабель, права dialout, сгоревший порт), Klipper падает с «Unable to open serial port» (неверный путь), принтер останавливается на середине (просадка питания или плохой USB). Обновление Klipper — это git pull в ~/klipper и повторная прошивка платы, если менялась версия MCU-кода; конфиг при этом сохраняется.
В слайсере выбирайте профиль для Klipper и не включайте стартовый G-code от Marlin: он конфликтует с макросом PRINT_START. Проверьте размеры стола и максимальную высоту, иначе Klipper остановит печать по концевику. Первый слой печатайте медленно, а после смены сопла или стола заново запускайте BED_MESH_CALIBRATE.
Безопасность и питание
- Питайте Pi отдельным блоком, не от платы принтера.
- Общий провод земли обязателен, если плата и Pi питаются от разных источников.
- Закрепите Pi и провода стяжками, чтобы USB не выдернулся в середине печати.
- Не оставляйте принтер без присмотра на долгих печатях, особенно с подогревом стола.
- Обновляйте систему и не выставляйте веб-интерфейс в интернет.
Итог
Klipper на Raspberry Pi даёт точную кинематику, input shaping и понятный конфиг в текстовом файле. Начните с Raspberry Pi OS Lite, sample-конфига платы и калибровки PID, затем добавьте акселерометр и веб-интерфейс. OctoPrint подойдёт, если нужны его плагины; Mainsail и Fluidd проще для чистой связки с Klipper. Главное — не копировать пины из чужих конфигов и проверять лог после каждого изменения.