Klipper はなるべく早く起動して、ディプレイに起動してますよというアピールをしてほしい。しかしいろいろ設定した printer.cfg だと、なるはやで起動というのが難しいことがある。例えば 1-wire のデバイスを設定していると、1-wire のデバイスが OS に認識されるまで klipper を起動できなくなってしまう (さもなくばエラーになる)
ということで、最小限の cfg を作って最小限の gcode を実行してすぐ終了するようなことを OS 起動初期にやりたい。
Klipper batch モード
klippy.py に -i で gcode 入力ファイルを渡すとそのファイルだけ実行して終了してくれる。これをバッチモードという。
mcu のファームウェアを make したときにできる out/klipper.dict が必要になる。これは形式的にはJSONファイルで、mcu との通信プロトコルの規約が入っている。
以下のように cfg と gcode と dict を渡すと gcode の実行をして終了する。
/home/pi/klippy-env/bin/python /home/pi/klipper/klippy/klippy.py /home/pi/klipper_config/bootstrap.cfg -i /home/pi/klipper_config/bootstrap.gcode -d /home/pi/klipper/out/mcu_klipper.dict
systemd のサービス化
以下のようにする。なるはやで起動してさっさと終了してほしい意図がある。もっといい方法があるかもだけどとりあえずうまくいっている。
$ cat /etc/systemd/system/klipper_bootstrap.service
#Systemd Klipper Service
[Unit]
Description=Bootstrap klipper
Before=klipper.service
Wants=udev.target
[Install]
WantedBy=multi-user.target
[Service]
Type=oneshot
User=pi
RemainAfterExit=yes
ExecStart= /home/pi/klippy-env/bin/python /home/pi/klipper/klippy/klippy.py /home/pi/klipper_config/bootstrap.cfg -i /home/pi/klipper_config/bootstrap.gcode -d /home/pi/klipper/out/mcu_klipper.dict
systemctl enable klipper_bootstrap.service
備考
shutdown 時も同様のことをしたいが、batch モードではない klipper が終了するときに mcu を shutdown 状態 (estop) にしてしまいうまくいかない。batch モードではこの shutdown 状態を解除する方法がおそらくない (FIRMWARE_RESTART する前にエラーで死んでしまう)
良い方法
一番良いのは Klipper を経由せずに (Rapsberry Pi の GPIO で) 起動状態を示す LED などを外出しすること。
- トップ
-
tech
-
Klipper でOS起動時に oneshot gcode を実行する。