Raspberry Pi Zero WH をテレビなしで無線LAN接続する方法あれこれ 

# はじめに
　**テレビもパソコンも一家に一台の時代**

　~~晩飯のおかずにもならない~~「Raspberry Pi」（以下ラズパイ）のセットアップごときに、テレビとパソコンの両方を占有するなんて（家庭の平和のため）許されんのです。
　さらにラズパイZeroは、

- 映像出力が**miniHDMI**なので、ふつうのHDMIケーブルがそのまま使えない。
- USB端子が**microB**なので、ふつうのUSBキーボードがそのまま使えない。

　ということで、小さくなったのは良いんだけど、変換器を準備しないといけないので、ちょっと面倒くさい:weary:のです。

## 目標
　無線LANでSSH接続出来たら、後はパソコンからどうとでもなるので、どうにかしてラズパイ上で下記コマンド（wpa_passphrase）を実行できたら勝ち。

```
sudo sh -c "wpa_passphrase [SSID] [KEY] >> /etc/wpa_supplicant/wpa_supplicant.conf"
```

　（[SSID]と[KEY]は各自の無線LAN設定に従ってください。）

　ちなみに、IPアドレスはDHCPで自動的に割り振られるものとします。固定化については他の人の解説読んでください。

- [Raspberry Pi 3 でIPアドレスを固定して、外部からSSH接続できるようにする](https://qiita.com/hujuu/items/f3799946d761006c9852)

## おことわり
　会長はWindowsの民ゆえ、Macintoshさんの事情はよくわからないので悪しからず。

# やってみよう
## 下準備
　ここは各方法共通です。とりあえず用意するものを挙げておきます。

- Raspberry Pi Zero WH（Wでも一緒やと思う）
- microSDカード（手元にあった16GB）
- ラズパイ用電源（microB端子で給電できるもの）
- SDカードリーダ（USBでmicroSDカードの読み書きできるようにするやつ）
- パソコン（Windows 10）

### Raspbianのダウンロード
　[公式ページからRaspbianをダウンロード](https://www.raspberrypi.org/downloads/raspbian/)（Download ZIP）します。
　今回使用したイメージはこちら。

> **Raspbian Buster Lite**
Minimal image based on Debian Buster
Version:February 2020
Release date:2020-02-13
Kernel version:4.19
Size:434 MB

　「～ with desktop」でも同じ方法で出来ると思いますが未確認です。（そもそもデスクトップ版使うなら、テレビ要るやろ？）

### RaspbianイメージのmicroSDカードへの書き込み
　ダウンロードしたZIPファイル（2020-02-13-raspbian-buster-lite.zip）を解凍し、イメージファイル（2020-02-13-raspbian-buster-lite.img）を取り出します。
　microSDカードをSDカードリーダにセットし、パソコンに挿します。（以下、単に「SDカードを挿す」と言います）

　イメージファイルのSDカードへの書き込みはシリコンリナックスさんの[DD for Windows](https://www.si-linux.co.jp/techinfo/index.php?DD%20for%20Windows) Ver.0.9.9.8 を使用しました。
　「DDWin.exe」を右クリックし、「管理者として実行」します。（ふつうに実行すると、ディスク選択できなかった）
![DD for Windows](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574570/b09133c4-7643-78e5-973c-ee477f29ecee.png)
　「ディスク選択」でパソコンに挿したSDカードを選択[^1]し、「ファイル選択」でRaspbianのイメージファイルを選択します。この時表示される「開く」ダイアログでは、ファイル種類を「All Files」にしないとイメージファイルが選択できないので注意。
![「開く」ダイアログ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574570/9bc220b4-9092-924b-0a85-514099c3a88f.png)

　最後に「<<書込<<」ボタンを押せば、（何度かの確認の後）書き込みが始まるので、終わるまで待ちます。

[^1]: 一度ラズパイのイメージを書いたSDカードに上書きする場合、**bootに割り当てられてる方のドライブを選択**してください。もう一方を選択すると書き込みが途中で失敗してしまいます。

### SSH接続できるようにしておく
　ラズパイのSSH接続を有効にするため、Raspbianイメージを書きこんだSDカードをパソコンに挿し、bootのドライブ直下に「ssh」という名前のファイルを作成しておきます。（右クリックして「新規作成」→「テキスト文書」でファイル作成し、ファイル名を（拡張子含めて）「ssh」に変更する。もしくは、コマンドラインで`echo:>G:\ssh`でもOK。（G:はSDカードのbootのドライブ））
![bootドライブ上にSSHファイル](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574570/2d6c252f-8864-5fb3-6275-6ff1035c05dd.png)

　ちなみに、Raspbianイメージを書きこんだSDカードをパソコンに挿したときに「フォーマットする必要があります」とか言われますが、間違ってもフォーマットしないように。


## いよいよ無線LANの設定をする
　ここから先は、お好きな方法でどうぞ。一応、手間のかからない順（会長基準）で紹介します。

### その１　Linuxを使う

　Linuxマシンを持っているのが前提ですが、たぶんこれが王道です。

**用意するもの**

- Linuxマシン（パソコン、仮想マシン、セットアップ済みのラズパイでも出来るかも）

　会長は仮想マシン（VMWare）に「Debian GNU/Linux 10」を入れているので、これで解説します。
　Raspbianイメージを書き込んだSDカードをLinuxマシンに挿し、以下のコマンドを実行します。

```
$ cd /media/develop/rootfs/etc/wpa_supplicant
$ sudo sh -c "wpa_passphrase [SSID] [KEY]>>wpa_supplicant.conf"

```

　SDカードのマウント先（/media/develop/rootfs）は各自の環境で読み替えてください。
![Linuxで実行](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574570/08a6c7d5-15d1-b2cb-4385-9a30ab67af13.png)


　SDカードを取り出してラズパイに挿し、ラズパイの電源を入れます。初回の起動はしばらく時間がかかるので、LEDのチカチカが落ち着く（点灯状態になる）まで待ちます。
　（DHCPクライアントで追加されたIPアドレスに対して）パソコンからSSH接続できたら勝ちです。

--------------------------------------------------------------------

### その２　スマホ（Android）を使う
　USBテザリングを使用すると、Androidスマホとラズパイをネットワーク接続することができるので、これを使ってSSH接続し無線LAN設定します。
　なお、会長はAndroidの民ゆえ、iPhoneさんの事情は（以下略）

**用意するもの**

* microB-TypeC USB変換ケーブル

　なかなかそんな都合の良いケーブルは見つからないので、ダイソーで以下のセットを買ってきました。
![USBケーブル変換](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574570/8ae603c0-816d-4d0c-db72-113cba9396f4.jpeg)

* Androidスマホ

　会長のはHUAWEIです。まぁメーカーは関係ないでしょう。Androidのバージョンは9（9.1.0）です。（「開発者向けオプション」がONになっていますが、これはあまり関係ないかな。）

　ラズパイとは以下のように接続します。
![接続図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574570/59817237-7f59-e50c-4c48-626a5c1f4f69.jpeg)
　この時、USB（PWRでない方）端子のみでもラズパイに電源入るのですが、電源(PWRの方)端子からも給電しないと、USBテザリングに反応しませんでした。

**Android側の設定**
　データセーバが有効な場合はテザリングが使用できないので、まずはこれを無効にします。
　`設定 ≫ 無線とネットワーク ≫ データ通信量`
「スマートデータセーバー」を無効にします。
![スマートデータセーバー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574570/98a88f34-8678-93f3-9d48-239cbd7cbc24.jpeg)

　ラズパイとスマホをUSBで接続し、USBテザリングを有効にします。
　`設定 ≫ 無線とネットワーク ≫ テザリングとポータブルアクセス`
![USBテザリング](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574570/f0e5ecc2-f0f9-018e-ddbe-0cb542d16f72.jpeg)
　反応するまで十数秒かかったので、焦らずに。

**ターミナルアプリを入れて、ラズパイのIPアドレスを確認する**
　ここまでで、ラズパイとAndroidがネットワーク接続されたのですが、ラズパイのIPアドレスがわからないと、SSH接続できません。そこで、ターミナルアプリをスマホにインストールします。会長は[Termux](https://play.google.com/store/apps/details?id=com.termux&hl=ja)を使用しました。
　アプリを立ち上げ、`arp -a`とコマンドを打ち込むと、IPアドレスが表示されます。
![Termuxでarp](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574570/36e7a4a8-2ac3-1687-2a65-19dd3990c54b.jpeg)
　２つ表示されていますが、「on rndis0」のアドレス（192.168.42.166）がラズパイに割り当てられたIPアドレスです。

**SSHクライアントアプリを入れてラズパイにSSH接続する**
　あとは、ラズパイに入るためにSSHクライアントアプリをスマホにインストールします。会長は[JuiceSSH - SSH Client](https://play.google.com/store/apps/details?id=com.sonelli.juicessh&hl=ja)を使用していますが、お好みのものでどうぞ。
　先ほど入手したラズパイのIPアドレスに、初期ユーザ（pi）と初期パスワード（raspberry）で接続します。
![JuiceSSHで接続](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574570/01785a0f-e3fb-9f97-9882-aa33d5f2c093.jpeg)


そして、wpa_passphraseを実行します。
![wpa_passphrase](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574570/08d0bb2c-d0ce-bee7-dc80-c7465c87529d.jpeg)
ラズパイを再起動し、（DHCPクライアントで追加されたIPアドレスに対して）パソコンからSSH接続できたら勝ちです。

**参考にしたサイト**

- [Raspberry Pi Zero に Android から USBテザリング で SSH接続](https://homemadegarbage.com/pizero-android-usbtethering)

--------------------------------------------------------------------

### その３　パソコンのモニタを使う
　「なんやそれ、ネタ切れか？」と言われそうですが、「テレビ」は使っていないので間違いではない。
　で、なんでこれが３番目かというと、冒頭でも書いた通り変換器が必要なのと、モニタひっくり返してケーブル挿すのが億劫なのです。

**用意するもの**

- HDMIに対応したモニタ
- （必要であれば）HDMI‐miniHDMI変換
- USB接続キーボード
- （必要であれば）USB‐microB変換

　変換器は以下のように接続します。
![各種変換器](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574570/694fef51-2d17-00ca-d842-c1e44e507303.jpeg)

　あとは、キーボードとモニタを接続し・・・・・・ん？
　**会長のモニタには、そんな“こじゃれた端子”(HDMI)付いてなかったよ。**
　ということで、以下は家族が出かけているうちにテレビで確認。

　（運よくHDMIに対応したモニタを持っていたあなたは、）ラズパイの電源を入れ、しばらく~~ぼーっと~~待つと以下の表示で入力待ちになるので、初期ユーザ（pi）と初期パスワード（raspberry）でログインします。

```
Raspbin GNU/Linux 10 raspberrypi tty1

raspberrypi login:
```

　ログインしたら、おもむろにwpa_passphraseを実行します。日本語キーボードを使っている方は、たぶん「_」が入力できなくて困っていると思います（会長は困った）ので、お助けします。
　**Shift押しながら「ほ」**

　ラズパイを再起動し、（DHCPクライアントで追加されたIPアドレスに対して）パソコンからSSH接続できたら勝ちです。

--------------------------------------------------------------------

### その４　シリアル通信を使う
　会長が最初に試した方法がこれです。わざわざ無線LAN設定のためだけにシリアル変換アダプタを用意する人もいないと思うので４番目ですが、手元にあればそこまで手間ではありません。

**用意するもの**

- シリアル変換アダプタ
- （必要であれば）ジャンパワイヤ
- （必要であれば）USBケーブル

　ラズパイのシリアル接続を有効にするため、Raspbianイメージを書き込んだSDカードをパソコンに挿し、bootのドライブ直下の「config.txt」という名前のファイルを開き、ファイルの末尾に「enable_uart=1」を追記します。（[SSHの接続設定](SSH接続できるようにしておく)と一緒にやっとけばOK）

```config.txt
# シリアル接続を有効にする
enable_uart=1
```

　ラズパイとシリアル通変換アダプタ、パソコンとは以下のように接続します。（TXとRXをクロスで接続）
![シリアルで通信](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574570/624c4078-1059-37c6-f281-012dae84b221.jpeg)

　パソコンでターミナルソフト（会長は[Tera Term](http://ttssh2.osdn.jp/)を愛用）を使って、シリアルポートに接続します。通信設定は以下の通りです。

|項目|値|
|---|---|
|ボーレート|115200 bps|
|データサイズ|8 bit|
|ストップビット|1 bit|
|パリティ|none|
|送信|CR|
|受信|CR|
|ローカルエコー|OFF|

　ラズパイの電源を入れ、以下の表示で入力待ちになるので、初期ユーザ（pi）と初期パスワード（raspberry）でログインします。

```
Raspbin GNU/Linux 10 raspberrypi ttyS0

raspberrypi login:
```

　ログインしたら、wpa_passphraseを実行します。ラズパイを再起動し、（DHCPクライアントで追加されたIPアドレスに対して）パソコンからSSH接続できたら勝ちです。

--------------------------------------------------------------------

## 最初の設定
　以上で、無線LANでSSH出来るようになっているので、ここから先は必要な人だけ。（というか、会長の備忘録）

### ラズパイ設定
　まずはラズパイの設定ツール（raspi-config）を実行します。

```
pi@raspberrypi:~$ sudo raspi-config
```

**1 Change User Password**
　初期パスワードのままだと誰でもログイン出来てしまいますので、パスワードを変更します。新しいパスワードを２回入力すればOK。

**4 Localisation Options**
　地域設定を日本に合わせます。
　**I1 Change Locale**
　「Locales to be generated:」と書かれた下にリストが表示されていますので、「ja_JP.UTF-8 UTF-8」にカーソルを合わせ、スペースキーでチェックを入れてエンターキーを押します。
　「Default locale for the system environment:」と書かれた下にリストが表示されていますので、「ja_JP.UTF-8」にカーソルを合わせ、エンターキーを押します。（ちょっと時間かかる）

　**I2 Change Timezone**
　「Geographic area:」と書かれた下にリストが表示されますので、「Asia」にカーソルを合わせてエンターキーを押します。
　「Time zone:」と書かれた下にリストが表示されますので、「Tokyo」にカーソルを合わせてエンターキーを押します。

　「Raspberry Pi Software Configuration Tool (raspi-config)」に戻ってきたら、右カーソルキーを押して「<Finish>」にカーソルを合わせてエンターキーを押します。

### パッケージの更新
　下記コマンドでインストールされているパッケージを最新のものに更新しておきます。（途中、処理を続行するために「y」を入力してエンターキーを押すことを促されるので、素直に従いましょう。）

```
pi@raspberrypi:~ $ sudo apt update
pi@raspberrypi:~ $ sudo apt upgrade
```

### セキュリティ

　使用用途（接続環境）によっては、セキュリティも気をつけたほうがいいですね。

- [ラズパイでやらなければいけない４つのセキュリティ対策！](https://qiita.com/nokonoko_1203/items/94a888444d5019f23a11)

# 最後に
　これだけは言っておこう。

　**いろいろいじる前に、今の状態でSDカードのイメージを作成しておくのだ。**