ラズパイで見守りシステム開発その1：ディスプレイとキーボード無しでRaspberryPiを初期設定する

こんにちは。

「別の部屋で寝ている1歳半の子どもが夜起きたことを知りたい」という要件から、見守りシステムを作るべくRaspberryPiでの実装に挑戦することにしました。

私自身、RaspberryPiの導入は初めてでなおかつディスプレイもキーボードも無い状態でしたので**「ディスプレイとキーボード無し、SSH経由でRaspberryPiを初期設定する手順」**をまとめます。

ここでいう初期設定とはラズパイに接続ができて、VNCでデスクトップ環境を利用可能にするまで、とします。

2回目となる[動体検知と通知機能の実装はこちら](https://qiita.com/quotto/items/0f7d6847d87cd0432260)です。

## 環境
基盤:Raspberry Pi4 Model B
OS:Raspberry Pi OS(32bit)
インストーラー: Raspberry Pi Manager v1.4
クライアント: Windows10

### （参考）今回購入した製品
Amazonで販売されている[Raspberry Pi 4 Model B Starter Kit Pro](https://www.amazon.co.jp/gp/product/B083XSRYXW/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1)を購入しました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/f46bb7d5-69cc-e91a-ee11-5ba0642b4bdb.png)

- RaspberryPi 本体
- ケース
- HDMIケーブル2本（今回は使わない）
- 専用電源ケーブル
- ヒートシンク&ファン
- 32GB MicroSD（NOOBS書き込み済）
- USB3.0 SDアダプタ

という、およそ初期設定に必要なものが全部入りになっています。

## 本体組立て
まずは本体を組み立てていきます。

こちらが梱包されている機器一式です。
![P_20201117_230828 - コピー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/e730aa3f-223b-bbe1-d9f0-c73f28ee1e7f.jpeg)


RaspberryPi本体をケースにはめ込みます。
![P_20201117_233932 - コピー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/db4ac4a4-fe0d-7a7d-867e-e88f5791ca40.jpeg)


ヒートシンク&ファンを取り付けます。
![P_20201117_234452 - コピー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/c87674f5-2ce1-1084-3bca-df7032653c69.jpeg)



ファンの電源は説明書を見て**4,6番のピン**につなぐことにします。
![P_20201119_234912 - コピー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/cd84840a-4d9f-2080-a49c-52d41d50ec72.jpeg)



赤いコード（プラス）を4番、黒いコード（マイナス）を6番につなぎます。
![P_20201117_235552 - コピー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/79554a65-94d4-4011-9439-2d9eab5f1ef5.jpeg)


一旦ここまでです。

## MicrosSDにOS書き込みとSSH有効化
ここからラズパイ上で動くOSの作成とSSHの設定を行います。

### OSインストール
私が今回購入した付属のMicroSDには予め[NOOBS](https://www.raspberrypi.org/downloads/noobs/)というOSインストーラーが書き込まれていましたが、これはRaspberryPi上でOSをインストールするためのものなので、削除します。
![2020-11-17_23h24_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/65b71f26-9833-1898-68a8-4b85ad5ae3c6.png)

なおファイルシステムは**FAT32**となっており、これはそのままで良いため単純にMicroSD上のファイルを全削除しました。


MicroSDへのRaspberryPi OSの書き込みは[RaspberryPi公式ツールであるRaspberryPi Image Manager](https://www.raspberrypi.org/software/)で非常に簡単に行なえます。

RaspberryPi Image Managerをインストール、起動します。

![2020-11-17_23h33_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/f2d5f8c2-4cd3-5762-fc70-bc06ebb53428.png)

左端の`CHOOSE OS`をクリックしてインストールするOSを選択します。今回は一番上の「Raspberry Pi OS(32bit)」を選択します。
![2020-11-17_23h33_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/f98f1592-f80a-9c88-be2a-973280f5d214.png)

続いて真ん中の`CHOOSE SD CARD`をクリックすると、現在パソコン上で認識しているSDカードの一覧が表示されるので、インストールするSDカードを選択します。
![2020-11-17_23h34_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/528bc9ba-e6f4-d2c1-0f8e-ddf0afe2c339.png)

あとは右端の`WRITE`をクリックするだけです。
![2020-11-17_23h34_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/e97ee5c5-bd95-8569-fee4-b072bb0defee.png)

完了しました。
![2020-11-17_23h57_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/2770e299-99c3-3d79-cacb-8ed44c71cfc2.png)

### SSH有効化
今回はディスプレイもキーボードもない状態のため、クライアントPCからRaspberryPiへSSHで接続して初期設定を行います。

RaspberryPi起動時からSSHデーモンを有効化するために、先程作成したMicroSDの直下に`ssh`という名前のからファイルを作成します。
![2020-11-18_00h07_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/09a5c816-e544-eb39-e129-567018e14a97.png)


これだけでRaspberryPi起動時にSSHデーモンが立ち上がります。素晴らしく簡単です。

## RaspberryPi起動
MicroSDカードを最初に組み立てたRaspberryPi本体に差し込みます。
![P_20201118_211843 - コピー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/da5a6e3f-823d-38d8-5f14-e70b0844c61e.jpeg)

電源ケーブルとLANケーブルを差し込み起動します！！
![P_20201118_212008 - コピー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/ad6215fa-8d59-17b3-bfa8-1fde063a8435.jpeg)

## SSH接続
Raspberry Pi OSではデフォルトでホスト名が`raspberrypi.local`となっているため、クライアントPCが同じネットワークにつないであれば、ホスト名でSSH接続できます。

試しにpingしてみます。
![2020-11-18_21h31_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/c565dc4e-0e75-8fb5-20e7-1883ce95a02c.png)

問題なさそうです。

それではSSH接続です。デフォルトではID/パスワードが`pi/raspberrypi`のユーザーが作成されているため、このユーザーでログインします。
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/f9ced2bb-fb07-8873-38de-ac00f3835271.png" />

見事に接続できました！！

## WirelessLAN設定
初期設定がてら、WirelessLANも設定しておきます。

先程ログインしたコンソールにも表示されていた`sudo raspi-config`を実行します。

上から2番目の`Network Options`を選択してEnter。
![2020-11-18_21h34_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/8922be41-20fb-3ba6-025c-3f1f259b9d80.png)

上から2番目の`N2 Wireless LAN`を選択してEnter。
![2020-11-18_21h34_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/0dbd4218-f6f3-35c4-d63e-12fc17cc2b13.png)

地域設定で国を選択します。
![2020-11-18_21h34_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/0f67df54-2d0c-013f-11c0-07a347e5b576.png)

![2020-11-18_21h35_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/53ad4e4b-b641-cd44-1cae-357e38a64e0f.png)

SSIDとWi-Fiパスワードを入力します。
![2020-11-18_21h35_28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/e186c36c-eb5b-0a43-da1b-5f10d8b79976.png)

![2020-11-18_21h36_27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/d32cf419-686e-c944-b03d-3cd140c87291.png)

最初のメニューに戻り`Finish`をEnterすると再起動します。
![2020-11-18_21h36_40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/d4264698-2875-9029-c883-37e28506050c.png)

再起動後に再びSSH接続、`ifconfig -a`で確認すると有線LANとWirelessLANのIPアドレスが割り当てられています。
![https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_183744_300a8b5a-4072-9618-3be2-c8ddc084e314~2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/8a7840ab-c1d2-e62c-c449-86b79ff78887.png)


## VNC設定
### ラズパイ側（サーバー）
最後に、必須ではありませんがデスクトップが使えると何かと便利そうなのでVNCサーバーを導入します。

まずラズパイにVNCサーバーをインストールします。今回は[TightVNC](https://www.tightvnc.com/download.php)を使います。

```shell
sudo apt-get update
sudo apt-get install tightvncserver
```

一度`tightvncserver`でVNCサーバーを起動し、ログイン用のパスワードを設定します。

```shell
pi@raspberrypi:~ $ tightvncserver

You will require a password to access your desktops.

Password:
Warning: password truncated to the length of 8.
Verify:
Would you like to enter a view-only password (y/n)? y
Password:
Warning: password truncated to the length of 8.
Verify:
xauth:  file /home/pi/.Xauthority does not exist

New 'X' desktop is raspberrypi:1

Creating default startup script /home/pi/.vnc/xstartup
Starting applications specified in /home/pi/.vnc/xstartup
Log file is /home/pi/.vnc/raspberrypi:1.log
```
### クライアント側
これでラズベリーパイにVNC接続できるようになりました。

クライアント側のViewerはおそらくなんでもいいと思いますが、一応TightVNCのクライアントを使って確認します。

```powershell
java -jar tightvnc-viewer.jar
```

Raspberry Piのホスト名（またはIPアドレス）を入力、先程設定したパスワードでログインできれば成功です！
![2020-11-18_21h51_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/4c253537-817c-ab71-e485-fc9658de6ab1.png)

![2020-11-18_21h51_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/8e80acf5-b102-15f3-1d0c-277b986dbb22.png)

![2020-11-18_21h51_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/b437e1e4-dc65-a2cf-db8a-cebe3bb261b2.png)

### VNCデーモン設定
これはおまけですが、ラズパイを起動するたびにVNCサーバーを立ち上げるのは面倒なのでsystemdによる自動起動設定を行います。

`/etc/systemd/system/tightvnc.service`という名前でサービスファイルを作成します。

```properties:tightvnc.service
[Unit]
Description=tightvncserver
After=network.service

[Service]
Type=forking
Restart=on-success
ExecStart=/usr/bin/vncserver :1 -geometry 1024x768 -depth 24
ExecStop=/usr/bin/vncserver -kill :1
User=pi

[Install]
WantedBy=multi-user.target
```

サービスを有効化します。

```shell
sudo systemctl enable tightvncserver
```


今回はここまで。

思ったよりも簡単にできました。[次回](https://qiita.com/quotto/items/0f7d6847d87cd0432260)はカメラの接続と動体検知機能の実装（と言っても既存のソフトウェアを設定するだけ）します。

## 参考サイト
https://qiita.com/Reetok/items/033e013eab09483e37fa

https://qiita.com/sinsengumi/items/24d726ec6c761fc75cc9

https://yamaryu0508.hatenablog.com/entry/2014/08/16/202441

https://www.clara.jp/media/?p=5542