klipperに物理ボタンを設置する(gcode button)
klipperマシンに物理ボタンを付ける話
1. MCUボードに物理ボタンを取り付けてGコードを実行させる
まずボードの使ってないピンを見つけてそこにボタンを物理ボタンを接続する必要がある
KP3Sの場合、SDカードを外部に延長するためのコネクタが生えているのでこれを利用したい
klipperはMCUボードのSDカード使わんので都合がいい
ピンアサインは次の通り
CPUの内部プルアップ抵抗を利用する場合は「^」記号を記述する
CPUの内部プルダウン抵抗を利用する場合は「~」記号を記述する
外部抵抗回路の場合「^」は必要ない
プルアップ回路はピン番号の前に「!」を書いて入力を反転させる必要がある
今回は外部プルアップなので「!PC8」と記述すればいい
ちなみに宣言する名前、[gcode_button PC8]の部分は任意の名前で良い
例えば
動作確認
物理スイッチをprinter.cfgに追加できたらスイッチの動作を確認する
Mainsailのコンソールタブを開きKlipper設定ファイルで宣言した名前で
QUERY_BUTTON button=PC8
あとはpress_gcode;に好きな処理を箇条書きで書くだけ
このように書けば
PC8ボタンはemergency_stopを実行する「緊急停止ボタン(非常停止ボタン)」になり、
PD12ボタンは「ホーミングしてZ100に移動してノズルを100℃に加熱するボタン」になる
使いたいコマンドは手動で動かした際のコンソールの応答をそのままコピペするか
公式リファレンスを参照して記述するといい
https://www.klipper3d.org/Config_Reference.html#gcode_button
https://www.klipper3d.org/G-Codes.html
https://www.klipper3d.org/Command_Templates.html
TIPS:M112を使用してはいけない
上記の例ではM112コマンドを使わずアクションコマンド{ action_emergency_stop() }を使用した
gcode butttonにおいてM112を使用した場合、今実行中の処理が終わらないと動作してくれない
(ブラウザのコンソールは即時停止してくれるのでなんか知らんけど挙動が違う)
一方のアクションコマンドはキューに割り込んで即時動作する
物理ボタンをを増やしていく
内部プルアップ抵抗を使う場合の注意点
2.Raspberry Piに3徳ボタンを設置する
緊急停止からの復帰などでmoonrakerを再起動するボタンが欲しい
下位のklipperからはそれができないので(仮に出来てもMUCの電源が切れてる)
どうしてもRaspberry Pi上にボタンを作り、OSで叩くしか無い
せっかくなのでRaspberryPIホストの電源ボタンと兼用してしまおう
GPIO3番は外部に物理プルアップ抵抗が付いているのでGPIOとGNDにボタンをつけるだけ以下の3つの機能が使えるようになる
・Raspberry Pi起動中に短押し→moonraker、klipperFW、klipperサービス再起動
(緊急停止させたプリンターが再起動する)
・Raspberry Pi起動中に長押し→MainsailOS(Raspberry Pi)のシャットダウン
・Raspberry Pi停止中に短押し→シャットダウン中のRaspberry Piを起動
作業はRaspberry PiにSSHで接続して行う
とりあえずMainsailOSにwiringpi をインストールする
(gpiodだけインストールすればいいのかもしれん)
ディレクトリの作成
スクリプトファイルの作成
コードは次の通り
実行権限付与
サービスファイル作成
サービスファイルの内容
サービス登録
Raspberry Pi再起動
これで3徳ボタンが完成した
参考サイト
https://sites.google.com/site/63rabbits05/rpi/gpio/shutdown_button
http://blog.livedoor.jp/victory7com/archives/42423877.html
https://qiita.com/clses/items/e701c1cb6490751a6040
3.klipperボタンをRaspberry Piにまとめる
本体MCUボードにklipperGコードボタンが付いて、Raspberry Piにファームウェアのリセットボタンができた
2ヶ所に別れたそれらをRaspberry PiのGPIO上に集約したい場合の話
物理配線
Raspberry PiのGPIOは
2、3は外部抵抗でプルアップされており
4〜8までは内部プルアップされており
9〜27までは内部プルダウンされている
らしい
参考サイト:https://hnw.hatenablog.com/entry/20150607
Raspberry Piで内部プルダウン抵抗を利用してみたが、MCUボード同様に意図せぬトリガーが発生して安定しなかった
GPIO3以外のボタンには10kΩの外部プルアップで回路を作りHATを作った
方法1
tmp/printerを叩く
たとえばPIユーザーで
echo G28 >> /tmp/printer
と入力すればプリンターのコンソールにG28コマンドを入力ときと同じ動作となるecho RPI_button_1 >> /tmp/printer
さっき書いた3徳ボタンのスクリプトにボタンを追加するだけの話
(実も蓋もない話になってしまった)
gcodeマクロはMainsail上で自由に編集できるのでRaspberry Piの物理ボタンと対応するマクロ名さえ設定してしまえばいい
方法2
Raspberry PiをセカンダリMCUとしてklipperに設定すればRaspberry PiのGPIOにklipperGコードボタンを設置できる
公式リファレンス
https://www.klipper3d.org/RPi_microcontroller.html
この手順通りに作業すればいいRaspberry PiホストをセカンダリMCUにできたら
klipper設定ファイルprinter.cfgへの次のように設定を書き足す
記述例
gpioinfoを叩いて指定したgpioが”klipper”に割り当てられていれば正しく設定されている
コメント
コメントを投稿