Принтер оснащен достаточно функциональной материнской платой на процессоре H616 и имеет богатый набор возможностей, в частности выведено много GPIO. При этом большинство из них задействовано или зарезервировано системой. Для реализации некоторых дополнительных модификаций, достаточно просто в систему добавить дополнительный контроллер.
Инструкция актуальна для принтеров под управлением klipper
Будем использовать Raspberry Pi Pico, точнее его клон, как более доступный вариант.
От оригинала он отличается количеством памяти (16Мб), размером (длиннее на 2мм.), и другим расположением контактов. Для монтажа сделал вариант корпуса с креплением на алюминиевый подрамник принтера.
Для взаимодействия с основной платой необходимо загрузить в Pico прошивку, созданием которой и займемся.
Подключаемся к принтеру через SSH, запускаем конфигуратор прошивки
cd ~/klipper/ make menuconfig
Во второй строчке выбираем тип контроллера
Удерживая нажатой кнопку BOOT, подключаем Pi Pico c помощью USB кабеля к основной плате принтера.
Данными командами монтируем диск, на него копируем скомпилированную ранее прошивку, размонтируем диск. Устройство перезагрузится с новой прошивкой.
sudo mount /dev/sda1 /mnt sudo cp out/klipper.uf2 /mnt sudo umount /mnt
далее
ls /dev/serial/by-id/*
смотрим выводЕсли видим новый контроллер, значит предыдущие действия завершились успешно. Осталось внести дополнение в файл printer.cfg, что бы klipper увидел дополнительный MCU и мог с ним работать.
[mcu pico] serial: /dev/serial/by-id/usb-Klipper_rp2040_15B8971729605E53-if00 restart_method: command
Не забываем заменить на свой, выделенный фрагмент
В итоге должно получиться так
Перезагружаем Klipper и видим что в системе появился новый MCU
Теперь можно с ним работать. В качестве примера подключим дополнительные кнопки, с помощью которых можно вызывать макросы.
Схематически подключение выглядит так Для того что бы кнопки заработали, в той же директории где находится printer.cfg создадим файл pico.cfg
В printer.cfg добавим строчку
[include pico.cfg]
pico.cfg наполним следующим кодом
[gcode_button button1] pin: ^!pico:gpio5 press_gcode: BEEP M117 BUTTON TEST1 [gcode_button button2] pin: ^!pico:gpio6 press_gcode: BEEP M117 BUTTON TEST2 [gcode_button button3] pin: ^!pico:gpio7 press_gcode: {% if printer.idle_timeout.state != 'Printing' or printer.pause_resume.is_paused %} ; unload if not printing OR printing but paused UNLOAD_FILAMENT {% endif %} [gcode_button button4] pin: ^!pico:gpio8 press_gcode: {% if printer.idle_timeout.state != 'Printing' or printer.pause_resume.is_paused %} ; unload if not printing OR printing but paused LOAD_FILAMENT {% endif %}
Кнопки 1 и 2 будут просто выводить тестовое сообщение на дисплей, кнопка 3 будет вызывать макрос выгрузки филамента, кнопка 4 вызывает макрос загрузки филамента.
В моей реализации, физически это выглядит так. Модель корпуса кнопок можно взять здесь.
Комментарии