見出し画像

KlipperScreen を Raspberry Pi Zero 2W で使う方法

KlipperScreen は、3D プリンタで使用する Klipper の拡張機能の一つであり、ネットワーク越しではなく液晶に表示して直接操作することができます。

これをよく見かける TFT 液晶に表示させて操作できるようと試みた時に色々と苦労したので、そのやり方について共有したいと思います。


はじめに

一般的にはネットワーク越しで十分だと思います。
しかし、私の組み立てた持ち運べるサイズの小型 3D プリンタ を使用する時、その場所でネットワーク回線が使用できるとは限りません。

Fraxinus00w

モバイルな 3D プリンタを最大限活用するため、どこでも造形開始できるようにしたいと考えた結果 KlipperScreen に行きつきました。

当初は標準的な Raspberry Pi OS で設定しておりましたが OS が bullseye から bookworm になってしまったので OS が bullseye のままの mainsail OS で設定しています。

注意!

  1.  使用 OS は bullseye: bookworm 以上の場合は、この手順で動作しない可能性があります。

  2.  mainsail OS が最新: 過去の mainsail OS は Klipper Screen を使用する設定が足りない可能性があるため、必ず Micro SD へクリーンインストールしてから以下の手順を実行してください。


使用する機器および、環境

  • ハードウェア

    • Raspberry Pi Zero 2 W

    • MicroSDHC カード 32GB

    • Micro USB ケーブル

    • MSP2807 (ILI9341 搭載 2.8 インチ SPI 制御タッチパネル付 TFT 液晶)

    • コネクタ付ケーブル 20cm 40P メスメス

    • コネクタ用ハウジング 7P

    • コネクタ用ハウジング 2×10 (20P)

    • ポリイミドテープ(任意)

  • ソフトウェア

    • PC (Windows 11)

      • TeraTerm

      • Raspberry Pi imager

    • Raspberry Pi Zero 2 W

      • mainsail OS (Bullseye)

      • KIAUH

      • FBTFT

      • xtcal


接続ケーブルの作成

Raspberry Pi Zero 2 W と TFT 液晶 MSP2807 を繋ぐケーブルを作成します。

以下のピンアサインを参考にケーブルを作成します。
※ 3D プリンタ用制御ボードと接続する UART は参考として載せています。

Raspberry Pi Zero 2 W のピンアサイン

2.8 インチの液晶のピンアサインは以下の画像の通りです。
先ほどの接続先名と TFT 液晶の基板上に記載されているピン名と一致しています。

MSP2807

当初は好きなケーブル長で圧着し、一部を半田付けすることを考えておりましたが・・・。

「圧着作業はしんどい!」、「NO more 半田付け!」という声が聞こえたような気がしたので、代替案を提案します。

以下の圧着済ケーブルからハウジングを取り外し、2列のハウジングなどに交換します。

こちらのポリイミドテープは任意

今回使用するのはこれらの部品になります。
圧着済みケーブルを無加工で使用することも可能ですが、挿し間違いなどの事故を予防するため、こちらの記事ではハウジングの交換を推奨しています。

使用する部品類
  1.  ハウジングから端子を外す

コネクタの端子は、それを包み込むハウジングによって脱落しないように引っかかる構造になっています。

この端子を外れないようにしているパーツをカッターやデザインナイフなどで少し持ち上げると簡単に端子を引き抜くことができます。

デザインナイフで持ち上げている様子

2. 取り外した端子をペンチで整える

今回使用する圧着済みケーブルは端子が少し広がっており、挿し替える予定のハウジングに挿しこむと、ハウジング内で引っかかりが生じます。

そのため端子を他の箇所と同じ程度に幅を整える必要があります。
※ここで注意しなければいけないのは、力を入れすぎないことで、グシャっと潰れたら使い物にならなくなります。

中央辺りの金具がほんの僅かに広がっている

3. 端子をハウジングへ挿しこむ
端子の幅を整えたら、予め購入してあるハウジングへ挿しこんでいきます。

使用するハウジングへ挿しこむ

配線図に従い、挿し間違いがないように慎重に端子を挿しこんでいきます。
余分なケーブルは不要ですので引き裂いておきます。

TFT 液晶用のハウジングは単列タイプ、Raspberry Pi Zero 2 W 用のハウジングは2列タイプを使用します。

この画像ではハウジングをポリイミドテープでぐるっと一周貼ってあり、ハウジングがバラバラになるのを防いでいます。

※意外とこの形状を保つくらいの接着力はあります。

完成したケーブル 表面(3D プリンタ制御ボード用ケーブルも接続済)
完成したケーブル 裏面(3D プリンタ制御ボード用ケーブルも接続済)

これで物理的に必要なケーブルの作成が完了しました。

Raspberry Pi Zero 2 W と TFT 液晶、3D プリンタ用制御ボードを接続すると以下の画像のようになります。
※3D プリンタ用制御ボードが存在しなくても、インストール作業は可能です。

接続の様子

この画像に写っている 3D プリンタ制御ボードはこちら

Bigtreetech SKR Pico V1.0


Mainsail OS を Micro SD カードへ書き込む

今回は 3D プリンタ用 OS が使用可能なので、こちらを使用していきます。

使用した MicroSD はこちら

SanDisk SDSQUA4-032G-GN6MN


以下の URL アドレスから Windows 版の Raspberry Pi Imager をダウンロードし、Windows PC へインストールします。
https://www.raspberrypi.com/software/

Raspberry Pi Imager のダウンロード

Raspberry Pi Imager を起動すると、以下のような画面が表示されます。

まず、デバイスとして Raspberry Pi Zero 2 W を選択します。

Raspberry Pi Imager 起動後の画面
デバイスを選択 Raspberry Pi Zero 2 W

デバイス選択後、3D プリンタ用 OS の Mainsail OS を指定します。
こちらは既に Klipper がインストール済みとなっているため便利です。

Raspberry Pi Imager デバイス選択後の画面
Other specific-purpose OS を選択
3D printing を選択
Mainsail OS を選択
Mainsail OS - Raspberry Pi  (64bit) を選択

Mainsail OS を選択後、書き込み対象の Micro SD カードを指定します。

※ USB メモリや USB 接続のSSD などの外部記憶デバイスを予め外しておくと、未然に誤ったデバイスに書き込む事故を防げます。

ストレージを選択
Micro SD カードリーダー のみ表示されている状態

Mainsail OS の書き込みの際にパスワードの設定も含めた編集を行います。

全ての項目の選択を完了
設定を編集する

ユーザー名とパスワードは以下の設定としています。

  • ユーザー名 pi

  • パスワード raspberry

Wi-Fi がステルス設定されている場合は、必ず「ステルス SSID 」にチェックを入れてください。

一般設定

SSH は有効化しておきます。

サービス設定

書き込み後に編集作業があるため、メディアは取り出さないようにします。

全ての項目を設定したので、保存します。

オプション設定

設定の編集が完了したので「はい」をクリックして先へ進みます。

設定の編集完了

ここで「はい」を選択すると Micro SD の内容が削除され Mainsail OS が書き込まれます。
※もしも作業を中断するならば、ここが最終ラインです。

警告

書き込みが開始されるので、完了するまで待ちます。

書き込み中

途中でエラーが出なければ、書き込み完了の通知が表示されます。

書き込みが正常に終了

Micro SD カード内のファイルを編集する

Raspberry Pi Imager での書き込みが完了すると Micro SD カード内に bootfs が生成され、各種設定ファイルへ Windows 上からアクセスできるようになります。

編集が必要なファイルは bootfs 内にある config.txt のみとなります。

bootfs 内

Mainsail OS 内での場所は以下の通りです。

  • /boot/config.txt

config.txt の編集

追加予定の設定内容は次の通りです。

  • SPI1 と GPIO16 を CS0 として使用する設定

  • TFT 液晶の使用に必要な設定

  • タッチパネルの使用に必要な設定

テキストファイル内の最下部に次の 3 行を記載します。

dtoverlay=spi1-1cs,cs0_pin=16
dtoverlay=fbtft,spi1-0,ili9341,bgr,reset_pin=6,dc_pin=5,led_pin=18,rotate=270
dtoverlay=ads7846,penirq=17,speed=10000,penirq_pull=2,xohms=150

参考例として、実際に記載した状態を以下に一部掲載します。

実際の config.txt の内容

Micro USB ケーブルを PC へ接続し、電力が供給されると以下の画像のように TFT 液晶にコンソール画面が表示されます。
※表示されない場合は以下の理由が考えられます。

  • HDMI に接続されているディスプレイがある

  • config.txt の記載に問題がある

  • 以前に mainsail OS をインストールした Micro SD を使用している

  • Raspberry Pi Zero 2 W が動作しない(緑 LED が消灯状態)

    • 電力が供給されていない

    • Raspberry Pi Zero 2 W が壊れている

    • Micro SD カードが壊れている

  • TFT 液晶関連の問題

    • TFT 液晶に接続するケーブルの配線が間違っている

    • 見た目は同じだが MSP2807 ではない(大手通販サイトだとあり得る)

コンソール画面が表示される様子

Tera Term 4 のダウンロードとインストール

Raspberry Pi と通信を行うアプリケーションソフトがないと各種設定などが行えません。
※HDMI 経由で表示すれば途中までは設定可能ですが KlipperScreen が本格的に稼働するとコンソール画面で作業できなくなります。

ここでは Tera Term 4 をインストールし、使用します。

Windows PC に Tera Term をダウンロードし、インストールします。

以下のページから安定板の Tera Term 4 をダウンロードします。

ダウンロードリンクが隠れている場合は Assets をクリックすると表示されます。

ダウンロードリンクの例

インストールは特殊なことはしませんが、不安であれば以下の記事が参考になると思います。


Wi-Fi 経由で接続

Tera Term で Raspberry Pi Zero 2 W へログインする方法を紹介します。

Raspberry Pi Zero 2 W へ電源を供給し、しばらくしてから Tera Term を起動します。

Tera Term を起動するとダイアログが表示されるので、以下の画面と同じように設定し OK をクリックします。

SSH の接続設定

次に以下のような画面が表示されますので続行をクリックします。
※既存の鍵を新しい鍵で上書きするにチェックを入れると次回以降表示されなくなりますが、動作に問題はありません。

セキュリティ警告

ここで Raspberry Pi Imager で設定したユーザ名とパスワードを入力し OK をクリックします。

SSH のログイン画面

ログイン情報が正しければ SSH による接続が完了し、以下のようにコマンドを受け付ける状態になります。

ログイン後のコンソール画面

KlipperScreen のインストールと表示設定

通常の使用範囲であれば Klipper Installation And Update Helper (以降 KIAUH) を導入する必要はありません。

しかし、今回は KlipperScreen を新たにインストールするため、こちらの補助アプリケーションソフトを導入します。

KlipperScreen をインストールすると他の Klipper 関連ソフトのバージョンが古い状態のままになってしまうので、事前に Klipper 関連ソフトもアップデートします。

インストール

KIAUH を入手するには以下のコマンドを打ち込みます。
※ついでにアップデートも行っています。

sudo apt update && sudo apt dist-upgrade -y
sudo apt-get install git -y
cd ~ && git clone https://github.com/dw-0/kiauh.git

次のコマンドを打ち込んで KIAUH を起動します。

cd ~ && ./kiauh/kiauh.sh

KIAUH を起動すると簡易的な UI 画面が表示されます。
ここでは希望の機能をインストール、アップデート、削除、他等が可能です。

KIAUH 起動後の表示

Klipper 関連ソフトのアップデート

Klipper 関連ソフトのアップデートを行います。

Main Menu から Update Menu へ移動
####### Perform action: 2

Update Menu から全てアップデートを指定
####### Perform action: a

アップデート予定の一覧が表示されます。
全てアップデートするつもりなので y を入力し、アップデートが完了するまで待ちます。

このままアップデートを実行して良いか聞かれる

全て最新の状態になった事を確認します。

アップデート後の様子

KlipperScreen のインストール

Klipper 関連ソフトのアップデートができたので KlipperScreen のインストールを行います。

b と入力し Update Menu から Main Menu へと戻ります。
####### Perform action: b

Main Menu で 1 と入力し Installation Menu へ移動します。
####### Perform action: 1

Installation Menu に表示されている KlipperScreen の番号を入力します。 
####### Perform action: 5

Installation Menu

実行すると、しばらくして質問をされるので適切な方を選びます。

スタンドアローンで使用する想定なので y を入力します。

Install standalone?
It will create a service, enable boot to console and install the graphical dependencies.

Say no to install as a regular desktop app that will not start automatically

Press enter for default (Yes)
[Y/n]

Xserver で問題ないので x を入力します。

Choose graphical backend
Default is Xserver
Wayland is EXPERIMENTAL needs kms/drm drivers doesn't support DPMS and may need autologin

Press enter for default (Xserver)
Backend Xserver or Wayland (cage)? [X/w]

ここで NetworkManager をインストールすると Wi-Fi が使用不能に陥るため、ここでは n を入力します。

Installing KlipperScreen PolicyKit Rules
The user `pi' is already a member of `netdev'.
PolicyKit Version 0.105 Detected
Press enter for default (Yes)
Insall NetworkManager for the network panel [Y/n]

インストールが完了したら b と入力し Main Menu へ戻ります。
####### Perform action: b

KlipperScreen がインストールされていることを確認し、問題がなければ終了します。
####### Perform action: q

Main Menu で KlipperScreen がインストール済みと表示されている様子

fbtft.conf ファイルの作成と編集

モニタが SPI 経由の TFT 液晶しか接続されてない状態で以下のコマンドを打ちます。

ls -al /dev/fb*

このように fb0 しか存在しないことを確認してから作業していきます。
※HDMI 経由で接続しているディスプレイがあると fb1 も表示されます

  crw-rw---- 1 root video 29, 0 May 13 2023 /dev/fb0 

以下のコマンドを打ち、移動後に fbtft.conf ファイルをダウンロードします。

cd /etc/X11/xorg.conf.d/
sudo wget https://gist.github.com/notro/63fc8f563b5f85010d30/raw/5e68d6c6df9471f973b3da5305e73a5017590a69/fbtft.conf

ダウンロードした中身は以下の通り。

# FBTFT xorg config file
#
# startx -- -layout TFT
# startx -- -layout HDMI
#
# startx
# When -layout is not set, the first is used: TFT
#

Section "ServerLayout"
    Identifier "TFT"
    Screen 0 "ScreenTFT"
EndSection

Section "ServerLayout"
    Identifier "HDMI"
    Screen 0 "ScreenHDMI"
EndSection

Section "Screen"
    Identifier "ScreenHDMI"
    Monitor "MonitorHDMI"
    Device "DeviceHDMI"
Endsection

Section "Screen"
    Identifier "ScreenTFT"
    Monitor "MonitorTFT"
    Device "DeviceTFT"
Endsection

Section "Monitor"
    Identifier "MonitorHDMI"
Endsection

Section "Monitor"
    Identifier "MonitorTFT"
Endsection

Section "Device"
    Identifier "DeviceHDMI"
    Driver "fbturbo"
    Option "fbdev" "/dev/fb0"
    Option "SwapbuffersWait" "true"
EndSection

Section "Device"
    Identifier "DeviceTFT"
    Option "fbdev" "/dev/fb1"
EndSection

任意のエディタで fbtft.conf を開きます。

# nano エディタ
sudo nano /etc/X11/xorg.conf.d/fbtft.conf

# vi エディタ
sudo vi /etc/X11/xorg.conf.d/fbtft.conf

DeviceTFT  の修正箇所は以下の通りになります。

  • Driver "fbdev" の追加

  • Option の "/dev/fb1" を "/dev/fb0" へ変更

Section "Device"
Identifier "DeviceTFT"
Driver "fbdev"
Option "fbdev" "/dev/fb0"
EndSection

以下のコマンドを打ち込み、内容を表示します。

cat /etc/X11/Xwrapper.config

もしも needs_root_rights=no と記載されている、あるいは記載が存在しない場合は Xwrapper.config を編集します。

任意のエディタで Xwrapper.config を開きます。

# nano エディタ
sudo nano /etc/X11/Xwrapper.config

# vi エディタ
sudo vi /etc/X11/Xwrapper.config

最終行へ以下の文が記載されているようにします。

 needs_root_rights=yes
Xwrapper.config の内容

保存して編集を終了し、再起動します。

sudo reboot

再起動後 TFT 液晶にKlipperScreenが表示されれば成功です。

液晶に表示された KlipperScreen の UI 画面

タッチパネルセンサの調整

現状だと、タッチパネルの機能は有効になっていますが、まともに操作できる状態ではないため、キャリブレーション調整を行います。

xtcal のインストール

タッチパネル調整ソフトを導入していきます。

以下のコマンドを打ち込み xtcal を使用可能にします。

sudo apt-get install libxaw7-dev libxxf86vm-dev libxaw7-dev libxft-dev -y
cd ~ && git clone https://github.com/KurtJacobson/xtcal
cd ~/xtcal
make

タッチパネルの調整

以下の手順で調整を行います。

  1.  現在の値を初期化

  2.  xtcal を実行

  3.  画面に順次表示される + をタッチペンなどで 4 回押す

  4.  測定結果が表示される

  5.  測定された 9 個の数値を設定ファイルに反映

測定結果がおかしいと感じた場合は 1 からやり直します。

以下のコマンドを打ち込み、初期化してから xtcal を実行します。

cd ~
DISPLAY=:0.0 xinput set-prop "ADS7846 Touchscreen" 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1
DISPLAY=:0.0 ~/xtcal/xtcal -geometry 320x240

実行後 SPI モニタは専用画面に切り替わるので、表示されている赤い + を付属のタッチペン等で押していきます。

キャリブレーション専用画面

タッチペンで押すと時計回りに + が表示され、計 4 か所押すと元の画面に戻ります。

次に表示された +

コンソールには次のように表示されます。
※必要なのは 9 個の数値なので、これらの数値を控えておきます。

実際に表示された内容

先ほど測定した数値を設定に反映するため 40-libinput.conf を任意のエディタで開きます。

# nano エディタ
sudo nano /usr/share/X11/xorg.conf.d/40-libinput.conf

# vi エディタ
sudo vi /usr/share/X11/xorg.conf.d/40-libinput.conf

libinput touchscreen catchall に次の行を EndSection の手前に追加します。

Option "TransformationMatrix" "先ほど測定した 9 個の数字"
測定値を追加した様子

保存が完了したら、以下のコマンドを打ち込んで再起動します。

sudo reboot

再起動後、先ほど編集したタッチパネルの測定値が適用されます。

実際にタッチして正常に認識できることを確認してください。

TFT 液晶を縦向きで使用したい場合

多くのケースで横向きに運用されていますが、縦向きで使用したい事もあるかと思います。

ここでは全てのインストールが完了している状態として、必要部分のみ紹介します。

縦向きに表示させる液晶の設定

任意のエディタで config.txt 開きます。
※もちろん Windows PC などで直接 Micro SD カード内に存在する config.txt を編集してもOKです。

# nano エディタ
sudo nano /boot/config.txt

# vi エディタ
sudo vi /boot/config.txt

rotate を変更します。ここでは 0° に設定するため rotate=0 としています。

dtoverlay=spi1-1cs,cs0_pin=16
dtoverlay=fbtft,spi1-0,ili9341,bgr,reset_pin=6,dc_pin=5,led_pin=18,rotate=0
dtoverlay=ads7846,penirq=17,speed=10000,penirq_pull=2,xohms=150

液晶の表示角度を変える場合は、以下に示す 4 種類のいずれかへ変更してください

  • rotate=0

  • rotate=90

  • rotate=180

  • rotate=270

設定を保存したら、以下のコマンドを打ちこんで再起動します。

sudo reboot

再起動すると、このように縦型表示に切り替わります。
※タッチパネルの設定は昔のまま

縦型表示

縦向きで使用できるタッチパネルの調整

次にタッチパネルの調整を行います。
横の時とほぼ同じで、違いは -geometry 240x320 のみです。

cd ~
DISPLAY=:0.0 xinput set-prop "ADS7846 Touchscreen" 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1
DISPLAY=:0.0 ~/xtcal/xtcal -geometry 240x320

実行後 SPI モニタは専用画面に切り替わるので、表示されている赤い + をタッチペンで等で押し、測定した 9 個の数値を設定に反映すれば OK です。

縦型表示のキャリブレーション画面

設定を保存したら、以下のコマンドを打ちこんで再起動します。

sudo reboot

再起動後は縦型の表示でタッチできるようになります。

このタッチパネルの設定は、どの向きでも変更した時は必ず測定し、設定へ反映してください。

SPI0 で液晶の表示もしたい場合

今回は SPI が TFT 液晶とタッチパネルでそれぞれ独立していたため SPI0 と SPI1 に分離できました。

しかし、Raspberry Pi シリーズに直接接続するような液晶は多くの場合 SPI0 の信号を兼用していることが多く  config.txt をそれぞれのピン配置に合わせる必要があります。

2.4 インチタッチスクリーンを Raspberry Pi Zero 2 W に接続した様子


2.4 Inch Touch Screen for RPI

このようなケースの場合 TFT 液晶の描画は SPI0 の CS0 に接続し、タッチパネルは SPI0 の CS1 に接続します。

それ以外のリセットピン、D/C ピン、バックライトLED制御ピン、タッチ割り込みピンの計4つのピンを適切に設定する必要があります。

先ほどの TFT 液晶の仕様は以下の通りになります。

  • RST: GPIO27

  • TP_IRQ: GPIO17

  • D/C: GPIO22

  • LED: なし(常時点灯)

これらの仕様に従って修正すると、以下の通りになります。
※ 1 行目が存在しませんが、その理由は SPI1 を使用しないからです。

dtoverlay=fbtft,spi0-0,ili9341,bgr,reset_pin=27,dc_pin=22,rotate=270
dtoverlay=ads7846,penirq=17,speed=10000,penirq_pull=2,xohms=150
  • spi0-0 ⇒ SPI0 の CS0

  • reset_pin=27 ⇒ GPIO27

  • dc_pin=22 ⇒ GPIO22

  • led_pin= ⇒ 存在しないため未記入

これらを手元にある液晶のピン配置に設定すれば、適切に動作すると思います。

なお、 TFT 液晶のドライバが ili9341 を想定しているので、それ以外の場合はデバイスドライバが存在していれば使用可能ですが・・・今回は割愛します。

config.txt を修正したら、以降の手順を同じように行えば OK です

おわりに

KlipperScreen が使用できるようになったので Klippe 化した 制御ボードを接続し、任意の printer.cfg を設定すれば UI 画面が表示されると思います。

注意点が一つだけありまして Wi-Fi が接続できない状態だと以下のようなメッセージが表示され停止してしまうことがあります。

注:以下の画像は 3D プリンタ制御ボードを Klipper 化し、通信可能な状態にした時の画像です

エラー表示

これは Moonraker が接続可能なネットワークがない時に発生しますので、現在使用可能な Wi-Fi を設定してあげれば UI 画面へと移動します。

もし接続可能なネットワークが存在しない場合は、画面右端にある Retry を押してみてください。

Retry を押す様子

しばらくすると UI 画面が表示されるようになります。

KlipperScree の UI 画面

それでは楽しい 3D プリンタ生活をお送りください ('ω')ノ

ここから先は

0字

¥ 300

期間限定 PayPay支払いすると抽選でお得に!

この記事が気に入ったらサポートをしてみませんか?