Atom x7-Z8700 1.6GHz/RAM:4GB/SSD:128GB/10.1インチなタブレットPC FUJITSU ARROWS Tab Q508/SE に Ubuntu 22.04 LTS 日本語 Remix という GNU/Linux をインストールして Klipper, Moonraker, Mainsailをインストールして 3DプリンターAnet ET4+を制御した記録。 2024年9月に 24.04 LTS でも動くことを確認したので、更新。 完全無保証。
他にUSBメモリスティックにisoイメージを書き込むためにLinuxかMacが必要。
- USBメモリスティック
- Ubuntu iso image ubuntu-ja-22.04-desktop-amd64.iso (24.04 LTS でもOK)
- FUJITSU ARROWS Tab Q508/SE
- 3Dプリンター
- USBケーブル
- ST-LINK v2
小学校などに配布されていた文教用タブレットPC。 参考→ https://jp.fujitsu.com/platform/pc/product/arrowstab/1801/q508se/
- 型式: ARROWS Tab Q508/SE
- CPU: インテル Atom x7-Z8750 1.6GHz 4コア
- メモリ: 4GB
- SSD: 128 GB
- 無線LAN: IEEE 802.11a/b/g/n/ac準拠(5GHz帯チャンネル:W52/W53/W56)
- Bluetooth
- USB3.0×1、USB3.1(Type-C)×1
- カメラ×2 イン、アウト(いまのところLinuxから使うことはできない)
"ET4+" は "アップグレード版ET4" の習慣的な呼称。 本体側面のプレートには "ET4" と書かれている。 "ET4+" は "初代ET4" のノズル横に金属探知式レベリングセンサが加わったもの。
- 門型: 20x20, 40x20 アルミフレーム
- 造形範囲体積: 220mm×220mm×250mm
- 積層厚: 0.1-0.3mm
- フィラメント径: 1.75mm
- 標準ノズル径: 0.4mm
- 最大ベッド温度: 100°C
- 最大ノズル温度: 250°C
- オールメタルフレーム
- ベッド: アルミ+強化ガラス
FMV-NDS35クレードルがあると有線LAN, 外部ディスプレイ, USBマウス, USBキーボードを接続できて便利。 クレードルから繋げられる外部ディスプレイは最大1920x1200か。
根本的にET4+の問題だが、タブレットをクレードルに乗せたとき、 本体側面のUSB Aコネクタおよびクレードルの3つのUSB AコネクタともET4+とのUSB接続が切れがち。 ET4+を制御する時にはタブレット本体にACアダプターから直接電気を供給し、 側面のUSB AコネクタとET4+を直接USBケーブルで接続すること。 Anetでない3Dプリンターなら問題なくUSBで通信できる。 Appendix 1を見よ。
FMV-NDS35クレードルは2024年9月のUbuntu 22.04 または 24.04(のカーネル)では満充電か何かの拍子に
クレードルのUSB Hubとそれに接続したキーボードやマウスがdisconnectになってしまう。タブレットそのものは正常に動作する。
/var/log/syslog
またはsudo dmesg -e
で確認できる。ウチのクレードルが故障してるのではなさそう。
2024年9月末にUbuntu 24.04 LTSでapt upgradeしたカーネル 6.8.0-45-generic #45-Ubuntu でもUSBのdisconnectは改善しない。
USBのパワーセーブと関係ある? PORT_POWER? See https://www.01signal.com/other/usb-device-stuck-reset/ .
「BIOSの『変更を保存して終了』した直後にのみUSBメモリから起動がされる」がキモ。
- LinuxだかmacOSだかで
sudo dd if=ubuntu-ja-22.04-desktop-amd64.iso of=/dev/sdX
などと3.2 GBほどのisoイメージを書き込んだUSBメモリスティックを用意。 - そのUSBメモリをタブレットに挿して音量のマイナスボタンを押しながら電源オン。
- BIOSの『セキュリティメニュー』で「セキュアブート機能」が「使用しない」設定になっていることを確認。
- BIOSの『起動メニュー』挿入してあるUSB HDDから起動されるように優先順位を変更。
- BIOSの『変更を保存して終了する』。この『変更を保存して終了』した直後にのみUSBメモリから起動がされるようである。
- ユーザ名はpiにしておくとデフォルト値が使えることが多い。
- あとは普通にUbuntuをインストール。
- タッチパネルははじめから使えるようになる。
- スクリーンキーボードはメニューバーの人間アイコンをクリックすると現れるメニューでON/OFFできる。
- WiFiは使える。
- Bluetoothは接続が切れがちという報告があるが未確認。
- インアウトともカメラは今のところLinuxからは使えない。
さらに
sudo apt remove brltty
sudo apt update
sudo apt upgrade
sudo apt install openssh-server
として再起動した後、YouTubeなどの再生音が出るようになった。
brlttyパッケージを削除するのはAnet ET4+をUSBケーブルでQ508に接続した時に ch341-uartのシリアル通信を使えるようにするため。 参考 → https://stackoverflow.com/questions/70123431/why-would-ch341-uart-is-disconnected-from-ttyusb
さらにのちのちのためsshでログインできるようにしておいた。
WiFiのアクセスポイントのWebページの詳細設定からDHCP固定割り当て設定で Q508のMACアドレスに対して固定のIPアドレスが割り当てられるようにする。 例えば 192.168.0.111 。
UbuntuでマシンのMACアドレスを表示するコマンドは
ip a
(IPアドレスの固定をせず、マルチキャストDNS (mDNS) などを使う方法もある。)
KIAUH (Klipper Installation And Update Helper) https://github.com/th33xitus/kiauh を使って Klipper https://github.com/Klipper3d/klipper Moonraker https://github.com/Arksine/moonraker Mainsail https://github.com/mainsail-crew/mainsail をQ508にインストール。
参考 → Klipper用にタブレットPCの中古をぽちった その3 https://note.com/boyon/n/n4e592b4d242b
sudo apt-get install git
git clone https://github.com/th33xitus/kiauh.git
./kiauh/kiauh.sh
あとはメニューにしたがってインストールしてゆく。 たぶんクロスコンパイラなどもインストールしてくれる。 インストール後、先に固定したIPアドレスにFireFoxなどブラウザでアクセスする。 Mainsailの画面になるが、プリンタに接続できない旨のエラーになる。
KlipperScreenは設定が面倒なので使っていない。 必要な場合はQ508でFireFoxを起動して http://localhost/ にアクセスして3Dプリンターを制御している。
micor-controllerをビルドしてET4+に書き込む。
参考 → https://www.klipper3d.org/Installation.html
参考 → HowTo Setup and Flash Klipper on Anet ET4/Pro/X https://3dprint.wiki/reprap/anet/et4/setup-and-flash-klipper CONFIG_SERIAL_BAUD 誤: 112500 正: 115200
参考 → Klipper用にタブレットPCの中古をぽちった その4 https://note.com/boyon/n/n4e592b4d242b
cd klipper
make menuconfig # .config ができる dot.config としてこのGistの下のほうにおいてある。
make
できあがったklipper.bin
をST-LINK v2でET4+に書き込む。
液晶画面は真っ白になってしまう。
注意!再度ET4+にfirmwareを書き込むことができなくなってしまった。 再書き込みにはどこかのピンのショートによるリセットが必要か? 今のところ動いているからよいけど。
なお、ET4+にインストールした OpenBLT https://github.com/davidtgbe/openblt で読み込めるfirmwareを作ることはできなかった。
Q508と3DプリンターとをUSBケーブルで接続して、 再度、先に固定したIPアドレスにFireFoxなどブラウザでアクセスしてみる。 たいていプリンタに接続できるが printer.cfg に誤りがある旨のエラーになる。
現状のprinter.cfgをこのGistの下のほうに置いてある。 /home/pi/printer_data/config/printer.cfg に置く。 mcuの設定は
[mcu]
baud: 115200
serial: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
などとする。
フィラメントの流量を
[extruder]
gear_ratio: 70:100
で調節する必要があった。
3DプリンターAnet ET4+はレベルセンサ付。printer.cfgに
[bed_mesh]
speed: 120
horizontal_move_z: 5
mesh_min: 30, 20
mesh_max: 225, 215
probe_count: 5, 5
とする。
コンソールにBED_MESH_CALIBRATE
と入力するとベッドの25点が計測される。
さらにコンソールにSAVE_CONFIG
と入力すると計測結果がprinter.cfgの最後に追加される。
Auto bed levelingはGUIからも実行できる。
MainsailのメニューからHEIGHTMAPを選んで "CALIBRATE" をクリック。
BED_MESH_CALIBRATE
と同様にベッドの25点を計測、その後HEIGHTMAPが表示される。
高さ調節とCALIBRATEを繰り返して、HEIGHTMAPに満足がいったら
最上部の "SAVE CONFIG"(またはフロッピーディスクのアイコン💾)をクリック。
ps
コマンドで見てもmoonrakerやklipperが走っていなさそうの時は
sudo systemctl status moonraker
sudo systemctl status klipper
などで確認する。
走ってなければ
sudo systemctl start moonraker
sudo systemctl start klipper
でサービスを起動する。
Q508のブート時にmoonrakerやklipperが自動的に起動してくれない場合は
sudo systemctl enable moonraker
sudo systemctl enable klipper
としてからQ508をリブートしてみる。
DCプラグをイヤフォンコネクタに刺していませんか? DCプラグは左下のカバーの中のコネクタに刺しましょう。
FMV-NDS35クレードルは2024年9月現在のUbuntu 22.04 または 24.04(のカーネル)では満充電か何かの拍子に
クレードルのUSB Hubとそれに接続したキーボードやマウスがdisconnectになってしまう。タブレットそのものは正常に動作する。
/var/log/syslog
またはsudo dmesg -e
で確認できる。
2024年9月末にUbuntu 24.04 LTSでapt upgradeしたカーネル 6.8.0-45-generic #45-Ubuntu でもUSBのdisconnectは改善しない。
USBのパワーセーブと関係ある? PORT_POWER? See https://www.01signal.com/other/usb-device-stuck-reset/ .
/var/log/syslog
に
kernel: workqueue: delayed_fput hogged CPU for >20000us 32 times, consider switching to WQ_UNBOUND
の警告が出る。sudo dmesg -e
でも確認できる。未解決。
/var/log/syslog
に
2024-09-26T05:22:10.596410+09:00 r508 pipewire[2441]: spa.alsa: hw:0p: (46 suppressed) snd_pcm_avail after recover: Broken pipe
のような警告が頻繁に出る。未解決。
FUJITSU ARROWS TabはKlipperをホストして3Dプリンターを制御するには十分な能力を持つ。 Q506, Q507, Q508, Q509, Q5010, Q5011などがある。 Ubuntu 24.04 LTSが手軽にインストールできて便利。
FMV-NDS35クレードルを使えると便利。 簡単なホルダー https://www.printables.com/model/851660-holder-stand-for-fujitsu-arrows-tablet-q506-q508-a を3Dプリントしてタブレットを立てて利用することもできる。
Anet ET4+はKlipperで制御できなくもないが 印刷開始時のホットエンドのヒーターのON電流によりUSBインターフェースが不安定化してUSB接続が切れてしまうことがある。
KlipperのFAQ https://www.klipper3d.org/FAQ.html#i-keep-getting-random-lost-communication-with-mcu-errors
にあるとおり、3DプリンターとタブレットやPCをUSBケーブルで繋いだ場合、通信接続が切れがちになることがある。
Anet ET4+の場合、印刷開始時のホットエンドのヒーターのON電流によりUSBインターフェースが不安定化してUSB接続が切れてしまうことがある。
([extruder]
にmax_power: 0.5
を書き加えて、印刷開始時のホットエンドのヒーターを
Pulse Width Modulation (PWM) 制御の小電流でONにすれば防げるかもしれない。実はもうET4+を使っていないので確証がない。)
Q508タブレットはそれをクレードルに乗せたとき、本体側面のUSB Aコネクタおよびクレードルの3つのUSB AコネクタともET4+とのUSB接続が切れがちになる。 ET4+を制御する時にはタブレット本体にACアダプターから直接電気を供給し、側面のUSB AコネクタとET4+を直接USBケーブルで接続すること。
接続が切れた時のエラーは
sudo dmesg -e
または/var/log/syslog
で見ることができる。Linux kernelのバージョンや状況によって
device descriptor read/64, error -110
device not accepting address 7, error -110
とか
ch341-uart ttyUSB0: usb_serial_generic_read_bulk_callback - urb stopped: -32
usb 1-4-port1: disabled by hub (EMI?), re-enabling...
usb 1-4.1: USB disconnect, device number 6
ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
ch341 1-4.1:1.0: device disconnected
とか
USB port nn disabled by hub (EMI?), re-enabling
などのエラーが記録されている。
Ubuntuインストール後の設定そのままでプリンタのコントロールは間に合っていそうなので、 リアルタイムLinuxは必要なさそう。
Debianなら
sudo apt install linux-image-rt-amd64
Ubuntuなら
sudo apt install linux-lowlatency
でリアルタイムLinuxをインストールできるらしい。 Klipperの対応状況 → Klipper3d/klipper#485
Ubuntuならuname -a
で PREEMPT_DYNAMIC か PREEMPT_RT かを確認できる。
Linuxインストールのとき、Rufusで作った起動用USBメモリではうまくブートしなかった。
UUIで作った起動用USBメモリではQ508が起動直後に
Can not mount /dev/loop0 on /cow
のエラーを出して止まる。[Enter]を押してinitramfsのプロンプトを出して、
losetup
losetup -f
losetup -d /dev/loop0
exit
でUbuntuの起動が続行可能だった気がする。
参考 → https://forums.linuxmint.com/viewtopic.php?t=260100
すでにKIAUHで Klipper, Moonraker, Mainsail をインストールしている場合は KIAUHでそれらをRemoveしてから、再度インストールする。
KIAUHでインストールするときに
Number of Klipper instances to set up: 2
と聞かれた時に接続する台数を答える。
設定ファイルの置き場は /home/pi/printer_1_data/config/, /home/pi/printer_2_data/config/, ... になる。
[virtual_sdcard]
は path: /home/pi/printer_1_data/gcodes
にしておく。
printer.cfgのserialは/dev/serial/by-path/以下にあるシンボリックリンクで指定するのが便利そう。 USBハブのポート順にプリンターがリストされるから。
[mcu]
serial: /dev/serial/by-path/pci-0000:00:14.0-usb-0:3.2:1.0-port0
https://docs.mainsail.xyz/overview/quicktips/config-json を参考にして
/home/pi/mainsail/config.json
にIPアドレスとportを列挙する。
{
"defaultLocale": "en",
"defaultMode": "dark",
"defaultTheme": "mainsail",
"hostname": null,
"port": null,
"path": null,
"instancesDB": "browser",
"instances": [
{ "hostname": "192.168.0.111", "port": 7125 },
{ "hostname": "192.168.0.111", "port": 7126 }
]
}
ブラウザで192.168.0.111に初回アクセスすると、portに対応するプリンターを聞かれるので適宜設定して選択する。 設定がうまくいかなかったら Mainsail → 右上の歯車アイコンをクリック → PRINTERS → ADD PRINTER → IPアドレスとPort (7125, 7126, ...) を入力。 Mainsailの画面左上でもプリンタが選択できる。 Mainsailを複数開いて複数のプリンタを制御可能。
top(1)コマンドで動いているプロセスなどを観察できる。 2台で同時に印刷してもload averageは0.5未満であった。 Q508のCPUが4コアだから4.0までは余裕。
次のnoteの記事がとても参考になった:
- https://note.com/boyon/n/n8221b3c16962 Klipperを2台のプリンタに接続する
- https://note.com/etsuo_note/n/n85e4243bf10c Raspberry pi1台で複数台のKlipper搭載3Dプリンタを制御する方法(KIAUH活用版)