Nano Pi NEO 2 にklipperをインストールして使いたい！

## はじめに

3Dプリンタの制御器としてRaspberry Piなどの比較的高性能な組み込み用ボードを利用し，印刷速度や品質の向上を図るのが最近の流行です．しかし，昨今の情勢を受けてRaspberry Piは今や高級＆レアなアイテムになってしまい，入手が中々困難．売っていたとしても約1万円前後と地味に高く，手が出しにくかったりもします．そこで，「普通に4千円ちょいで購入できるNano Pi Neo 2を代替として使おう！」という目的でまとめたのが本記事です．
初心者の作業ログなので，間違い等あればご教示頂けますと大変助かります．

## 購入先

秋月電子の秋葉原店舗で買いました．通販のリンクは[こちら](https://akizukidenshi.com/catalog/g/gM-12302/)．
[ヒートシンク](https://akizukidenshi.com/catalog/g/gP-12303/)も一緒に買っておくと良いと思います．付けずに稼働させたことないのでどの程度の効果なのか厳密には分かりませんが，これだけ大きなモノを付けさせているということはきっと無いとヤバいのでしょう...
2つ合わせて4420円．安いとまでは言い難いかもですが，代替案としてそこまで悪い品でもないのではないでしょうか．（Raspberry Pi Zero 2 Wが買えるならそちらで良いとも思います）

## Nano Pi NEO 2のOSセットアップ

Nano Pi NEO 2はUbuntu CoreかArmbianをインストールして使われることが多いようですが，「今回使う無線LANアダプタを指すだけで動かせる」という理由でArmbianを採用します．知人に譲って頂いたアダプタなので型番が不明なのですが，おそらく[WLI-UC-GNM-B]のように見えます．また，[公式wiki](https://wiki.friendlyelec.com/wiki/index.php/NanoPi_NEO2)によると厳密にはArmbianは非公式ROMらしいです．

### ダウンロード

armbianのNano Pi NEO 2向けイメージを[こちら](https://www.armbian.com/nanopi-neo-2/#kernels-archive-all)からDLします．なぜかDLリンクの大半がアクセスできなくなっており，僕は `Other download variants` のEUサーバのjammy版をDLしました．（他全部ダメでした...怖い…）

### SDカードへ書き込み

ダウンロードしたOSイメージは.xz形式で圧縮されていたので，7zipで解凍しました．久々に使いましたね7zip．未インストールの方は[こちら](https://sevenzip.osdn.jp/)から．

解凍できたらあとはSDカードへ焼き込むだけです．僕はRaspberry PiやJetsonのイメージ焼くときにも使っているbalenaEtcherで焼きました．未インストールの方は[こちら](https://www.balena.io/etcher/)から．イメージファイル選択→書き込み先選択→書き込み開始 で大丈夫だと思います．詳しい使い方は解説記事がたくさんあるので割愛します．

### 初回ユーザ設定とSSH設定

この[Qiita記事の電源投入の節](https://qiita.com/mskairmail/items/8025ba8eee3a4408c521#%E9%9B%BB%E6%BA%90%E6%8A%95%E5%85%A5)以降の手順に従えばOKです．

### シリアルポート設定

USB接続でつなぐプリンタにアクセスするため，下記コマンドでシリアルポートの設定を行います．

```bash
sudo usermod -a -G tty [YOUR_USER_NAME]
sudo usermod -a -G dialout [YOUR_USER_NAME]
```

[YOUR_USER_NAME]にはお使いのユーザ名を指定します．例えば，ユーザ名が `pi` であれば，次のようになります．

```bash
sudo usermod -a -G tty pi
sudo usermod -a -G dialout pi
```

この設定を有効にするには，一度ログアウトしてからログインする必要があります．僕はとりあえずで再起動しています．



## Wi-Fi対応（任意）

本節はNano Pi NEO 2をWi-Fi接続して利用したい方向けです．有線で十分！という場合は読み飛ばして次節へ進んでください．

Nano Pi NEO 2は標準でWi-Fiモジュールを搭載していないので，USBドングル等を利用する必要があります．今回はNano Piヒートシンクとセットで知人に譲ってもらったBuffaloのWLI-UC-GNM-B（箱ないので分からないけどググった感じ多分これ）を使っています．

### 手順
まずは `lsusb` で繋いだWi-Fiドングルが認識されているかを確認します．下記ログ2行目のようにそれっぽいデバイスが表示されたらOKです．

```bash
pi@nanopineo2:~$ lsusb
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 007: ID 0411:01a2 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070]
Bus 005 Device 002: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 009 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
```

ドングルが認識されていたら，`sudo nmcli dev` を実行してネットワーク接続に使用可能なデバイス一覧を確認します．下記ログのように，TYPEが `wifi` になっているデバイスが表示されればOKです

```bash
pi@nanopineo2:~$ sudo nmcli dev
DEVICE           TYPE      STATE          CONNECTION 
eth0             ethernet  connected      Wired connection 1 
wlx******        wifi      disconnected   -- 
lo               loopback  unmanaged      --
```

Wi-FiをONにします．

```bash
sudo nmcli r wifi on
```

下記コマンドで利用可能なアクセスポイントをスキャンして，つなぎたいWi-Fiが見えているか確認します．

```bash
sudo nmcli dev wifi
```

下記コマンドでSSIDとパスを指定してWi-Fiへ接続します．

```bash
nmcli device wifi connect [YOUR_SSID] password [YOUR_PASSWORD]
```

`[YOUR_SSID], [YOUR_PASSWORD` には，それぞれ接続先のSSDIとパスを書きます．例えば，SSIDが `my-wifi-ssid` ，そのパスが `my-ssid-pw` であったとすれば，

```bash
nmcli device wifi connect my-wifi-ssid password my-ssid-pw
```

とすればOKです．

もう一度 `sudo nmcli dev` を実行して，下記のようにSTATEがconnectedになれば成功です．

```bash
pi@nanopineo2:~$ sudo nmcli dev
[sudo] password for pi: 
DEVICE           TYPE      STATE        CONNECTION     
wlx******        wifi      connected    aterm-******-g
```

### 参考

[https://qiita.com/youyo_/items/376503446135c0dd3da7](https://qiita.com/youyo_/items/376503446135c0dd3da7)
[https://tomono.tokyo/2017/11/29/6476/](https://tomono.tokyo/2017/11/29/6476/)

## Mainsail, Klipper等のインストール
### 手順
まずはaptで更新しておきます．

```bash
sudo apt update
sudo apt upgrade
```

Klipperたちのインストールには，[kiauh](https://github.com/th33xitus/kiauh)というインストール＆アップデートヘルパを利用するのが便利です．まずはこのリポジトリをホームへcloneしてきます．

```bash
cd ~
git clone https://github.com/th33xitus/kiauh.git
```

cloneが完了したら，下記コマンドでさっそくkiauhのスクリプトを実行してインストール開始です．

```bash
./kiauh/kiauh.sh
```

まずは1)を選んで色々インストールしていきましょう．
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1490597/2866102a-a22a-e3b6-c48f-a392b88a5705.png)

基本的には，上から順に選んでインストールしていけばOKです．まずは1)のKlipperから．![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1490597/a25cee6c-7ced-9458-389f-2e49a23ba082.png)

今更Python2.7でインストールするのは気が乗らないので，`experimental`にはなっていますがPython3系でインストールしました．Klipper単体で入れたときもPython3で普通に動いてる雰囲気だったので大丈夫でしょう（各位自己責任でお願いします）．インスタンスは1個で良いと思います．最後に `Y` でインストール開始します．![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1490597/5f52c015-1d29-529b-1c50-7a8f6ddebf2a.png)


こんな感じでサービス有効化まで成功したらOKです．![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1490597/9873b29a-e3d6-d45b-0664-09a278050eeb.png)

この調子で `2) Moonraker` , `3) Mainsail` , `4) Fluidd` までインストールしました．
`4) Fluidd`でインストーラがデフォで設定しようとするポート（80番）がMainsailと競合すると警告が出たので，とりあえず88番ポートに指定を変えました．正しいのかはよくわかっていないので詳しい方いらしたらご教示ください...

### 起動確認
Nano Pi NEO 2と同じネットワークに接続したブラウザから，`http://[YOUR_NANO_PI_ADDR]`にアクセスします．例えばNano Pi NEO 2のIPアドレスが`192.168.1.33`であれば，ブラウザのアドレスバーに`http://192.168.1.33` と入力すればOKです．

下記スクショのようにMainsailのUIが表示されれば成功です！
各自のプリンタのファーム生成法は，様々な記事が見られましたのでそちらに譲ります．お疲れ様でした！（スクショは諸々設定を終えたあとのものなので，厳密にはレイアウトや内容が違うと思います）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1490597/2cc23b82-e3af-03d6-a501-3617595864be.png)