RaspberryPi 4BでAI、RaspberryPi 4BでIoT（RaspberryPi初期設定：OSインストール編）

#はじめに
プログラミングの学習を始めてから4ヶ月。pythonを使い、RaspberryPiでAI、IoTの技術を利用した高齢者見守りシステムを作ってみました。
制作の過程を、何回かに分けてまとめていきます。

今回は、RaspberryPiの初期設定のうちの、OSのインストールと、初期起動前の設定変更についてまとめます。

#使用機材

<dl>
<dt>PC</dt>
<dd>MacBook Pro 16</dd>
<dd>2.3 GHz 8コアIntel Core i9</dd>
<dd>16 GB 2667 MHz DDR4</dd>
<dd>macOS Big Sur ver.11.0.1</dd>
<dt>メモリリーダーライタ</dt>
<dd>ELECOM MR-A39NWHF1</dd>
<dt>変換ケーブル</dt>
<dd>Apple USB-C - USBアダプタ</dd>
<dt>microSDカード</dt>
<dd>SanDisk</dd>
<dd>microSDXC UHS-I カード</dd>
<dd>128GB</dd>
</dl>

#RaspberryPiの初期設定
RaspberryPiにキーボードやディスプレイなどを接続せず、PCと無線LANで接続してPCから操作できるように設定します。
![開発形態.001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/bf864168-709a-9bc6-fac1-40da98995ffd.png)
RaspberryPiの初期設定は、**[ゆうさんのブログ sukiburo](https://sukiburo.jp/setup-raspberry-pi/)**で非常に丁寧に説明されており、参考にして実施しました。
ここに書きました一連の作業はPCで実施します。これらの作業の間は、microSDカードをRaspberryPiには挿入しません。
###Raspberry Pi OSのインストール
**[sukiburo](https://sukiburo.jp/setup-raspberry-pi/)**では、OSをRaspberryPi公式サイトからダウンロードし、マニュアルでmicroSDカードに書き込む方法が説明されています。この通りにやれば問題なくOSのインストールができるのですが、ここでは**Raspberry Pi Imager**を使ってインストールする方法を試してみます。
この方法では、事前にOSをダウンドードしたり、microSDカードをフォーマットする必要はありません。

まず、[RaspberryPi公式サイト](https://www.raspberrypi.org/software/)からmacOS用の**Paspberry PI Imager**をダウンロードし、PCにインストールします。
<details><summary>詳細手順</summary><div>
>[RaspberryPi公式サイト](https://www.raspberrypi.org/software/)の**Download for macOS**をクリックすると、インストーラー "imager_1.4.dmg"のダウンロードが開始されます。
![RaspberryPiOS_install1 2020-12-04 14.02.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/47e43f03-42eb-b39d-89bd-2fdeae8156b3.png)
ダウンロードが完了したら、保存されたファイル**imager_1.4.dmg**をダブルクリックし、アプリケーションをPCにインストールします。
下記のウインドウが表示されたら、左側のラズベリーのアイコンを、右側のフォルダーのアイコン上にドラッグ＆ドロップすればインストールは完了。Launchpadから**Paspberry PI Imager**を起動できるようになります。（インストーラ**imager_1.4.dmg**は削除して問題ありません。）
![raspberrypiimagerインストール 2020-12-04 14.41.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/2c32ca65-8558-c6a6-08b7-58ed62adcade.png)
</div></details>

準備ができたので、**Paspberry PI Imager**を使って、microSDカードにraspberryPi OSをインストールします。
<details><summary>詳細手順</summary><div>
>インターネットアクセス可能なPCに接続されたmicroSDカードライターのスロットに、microSDカードを挿入します。
次に、Launchpadで**Paspberry PI Imager**のアイコンをクリックし、**Paspberry PI Imager**を起動します。
下記のウインドウが表示されたら、**CHOOSE OS**をクリックします。
![raspberrypiimage起動画面 2020-12-04 15.48.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/57187fc6-31e5-ca7a-f2f9-1df7a9626e0c.png)
下記のOS選択ウィンドウが表示されますので、**Raspberry Pi OS(32-bit)**をクリックします。
![raspberrypiimage_OS選択 2020-12-04 14.57.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/d7b5fd22-29a2-d089-01b1-56388371fee3.png)
OSを選択すると下記のウインドウが表示されますので、**CHOOSE SD CARD**をクリックします。
![raspberryPiimager_OS選択後 2020-12-07 17.55.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/93764886-1928-0cc6-4ad8-1ccee8b17edf.png)
下記のウインドウが表示されますので、使用するSDカードをクリックします。
![raspberrypiimage_SDカード選択 2020-12-04 14.58.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/d78a7912-c08a-c444-f0b4-eb3fe3f4bc75.png)
OSとSDカードの選択が完了すると、下記のウインドウが表示され、OSの書き込みが開始可能となります。
選択したOS、SDカードに間違いがなければ、**WRITE**をクリックします。
![raspberrypiimage画面 2020-12-04 16.00.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/303d67b5-9504-83df-f2d9-e78c20149d4f.png)
microSDカード上の全てのデータが消去されることを確認すウインドウが表示されるので、問題なければ**YES**をクリックします。
![raspberrypiimage確認画面 2020-12-04 16.02.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/d9a9bede-3a50-51eb-ec49-908a9ab9295f.png)
下記のウインドウが表示され、microSDカードへのOSの書き込みが開始されます。
![raspberrypiimage_書き込み 2020-12-04 16.06.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/1ad37054-5fe2-74bc-b0c9-2dcd7e8e62aa.png)
OSの書き込みが完了すると、自動的にVerifyを開始します。
![raspberrypiimager_verify 2020-12-04 16.26.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/1106ef2b-57e4-3ec7-080a-3b9a77bb6aff.png)
verifyが完了すると下記のウインドウが表示されます。**CONTINUE**をクリックすると、ウインドウが閉じ、OSのインストールが完了します。
筆者が実施した環境では、OSの書き込み開始からVerifyの完了まで、25分程度かかりました。
![raspberrypiimager_finish 2020-12-04 16.28.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/343e6aad-827c-91f6-675f-376e3401bee2.png)
</div></details>

###SSHの有効化
次に、安全に（=他人が勝手にRaspberryPiを操作したり、PCとRaspberryPiとの間の通信を盗聴することを防ぎつつ）、PCからネットワークを経由してRaspberryPiにログインして操作を可能にするために、SSH（Secure Shell）を有効にします。
OSをインストールしたmicroSDカードのrootに、**SSH**という名前の空のファイルを作成すると、SSHが有効になります。
<details><summary>詳細手順</summary><div>
>ファイルの作成には、Linuxコマンドの**touch**を使用します。Launchpadからターミナルを起動し、`touch /volumes/【microSDカード rootディレクトリ名】/ssh`と入力します。【microSDカード rootディレクトリ名】の部分は、**Finder**でドライブを表示したときに表示されるmicroSDカードのドライブ名です。
![Finder＿ドライブ選択 2020-12-07 18.23.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/1248ff56-d5f4-88dd-5efa-79f77e703174.png)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src=//qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/2fb6d21b-b528-d7a6-9556-85e3ad1347ac.png width=83%>
</div></details>

###無線LANの設定
RaspberryPiを無線LANに接続するために、OSをインストールしたmicroSDカードのrootに、**wpa_supplicant.conf**という名前の設定ファイルを作成します。
作成した**wpa_supplicant.conf**には、下記のコードを書き込みます。

```:wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
    ssid="SSID"
    psk="PIN"
}

```

上記コード中の**SSID**の部分は使用する無線LAN環境のSSID、**PIN**の部分は使用する無線LAN環境のPINとします。
**上記コードで、ssidとpskのダブルコーテーション（"）が全角になっていたため、コピーして使用しても正常に動作しませんでした。(2021/1/28　修正)。**
<details><summary>詳細手順</summary><div>
>ファイルの作成には、macのターミナル上で標準で使用できるテキストエディター **viエディター**を使用します。
Launchpadからターミナルを起動し、`vi /volumes/【microSDカード rootディレクトリ名】/wpa_supplicant.conf`と入力すると、viエディター上でwpa_supplicant.confという名前の新しいファイルが開きます(【microSDカード rootディレクトリ名】の部分は、SSHの有効化のときと同様に、**Finder**でドライブを表示したときに表示されるmicroSDカードのドライブ名です)。
![vi_起動 2020-12-10 15.47.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/02ce4e0b-6391-db88-d11b-fd9e0e7fbc51.png)
![vi_起動直後 2020-12-10 15.47.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/5cb17dbc-1ecd-fb37-4dc4-55e31ea6b572.png)
次に、使用する無線LANに接続するための情報を書き込みます。
上記の**wpa_supplicant.conf**に書き込むコードを、そのまま（**SSID**、**PIN**の部分も変更せず）コピーします。
viエディターを開いたターミナルのウインドウ上にマウスポインタを移動し、トラックパッドを副ボタンクリック（２本指のクリック）してペーストを選択すれば、コードが入力できます。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src=//qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/613252b2-7e48-f83a-d7a8-3875eb2c7eab.png  width=83%>
![vi_ペースト後 2020-12-10 15.50.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/3ca204e8-bc4a-64ef-23a3-0b966afe958a.png)
次に、使用する無線LANの環境に合わせて編集します。コードの**SSID**と**PIN**の部分を、使用する無線LANのSSIDとPINに書き換えます。
viエディターでは、文字を消去するときは、カーソルを消去したい文字上に移動して**x**を入力します。**SSID**の部分を書き換えるためには、まず矢印キーを使用してカーソルを**SSID**先頭の**S**の位置に移動します。この状態で、**x**キーを4回押すと、**SSID**が削除されます。
![vi_ssidカーソル移動 2020-12-10 15.50.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/f7ce0370-310d-bc69-5ab0-0a59888124ff.png)
![vi_ssid削除 2020-12-10 15.50.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/c4c067dc-eda2-0978-bdfd-aed66eb51a68.png)
次に、使用する無線LAN環境のSSIDを入力します。viエディターで文字を入力する際は、入力したい位置へカーソルを移動した後、**i**キーを押して挿入モードに変更します。この状態で、キーボードから入力した文字が、カーソルの位置に挿入されます。
![vi_ssid挿入モード 2020-12-10 15.51.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/64599a6a-eefd-1422-9f2d-38c923431efe.png)
![vi_ssid入力 2020-12-10 15.51.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/ecc6ab3c-4a88-2382-143d-ab79de34c4b5.png)
入力が完了したら、escキーを押下すれば挿入モードが終了し、入力した内容が確定します。
![vi_ssid確定 2020-12-10 15.52.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/f2e9c9f7-b0f6-fbdc-6362-5a22289f90fb.png)
同様に、カーソルを**PIN**の先頭の**P**の位置に移動し、使用する無線LAN環境のPINに書き換えます。
![vi_pin入力確定 2020-12-10 15.53.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/92a13646-51a1-f6dc-49bd-cac4c54c3539.png)
PINの書き換えが完了したら、キーボードから『:』（コロン）、『w』、『q』、『↩︎』（リターン）の順に入力すると、編集した内容が保存され、viエディターが終了します（このとき、カーソルを移動させる必要はありません）。
![vi_保存終了 2020-12-10 15.53.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/e9ee093d-1b74-f9be-aa74-ba21084b882c.png)
Linuxコマンドの**cat**を使用すると、作成したwpa_supplicant.confの内容を確認できます。ターミナルで、`cat /volumes/【microSDカード rootディレクトリ名】/wpa_supplicant.conf`と入力します（【microSDカード rootディレクトリ名】の部分は、**Finder**でドライブを表示したときに表示されるmicroSDカードのドライブ名です）。
![cat 2020-12-10 15.56.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/f690fafb-322d-b8ed-f6ab-64a75c1cfae1.png)
</div></details>

###画面出力設定
RaspberryPi OSは、標準の設定ではHDMIでディスプレイを接続していないと、PCからリモートデスクトップ接続してもRaspberryPiの画面が表示されずにエラーとなってしまいます。ディスプレイを接続していないRaspberryPiへのリモートデスクトップ接続でRaspberryPiの画面をPCに表示できるよう、設定を変更します。
OSをインストールしたmicroSDカードのrootにある**config.txt**を編集することで、設定が変更できます。
**config.txt**の中でコメントアウトされている```# hdmi_force_hotplug=1```という設定を有効にすることで、リモートデスクトップ接続しているPCでRaspberryPiの画面を表示できるようになります。
<details><summary>詳細手順</summary><div>
>
1. ターミナルで、`vi /volumes/【microSDカード rootディレクトリ名】/config.txt`と入力し、viエディター上で**config.txt**を開きます（【microSDカード rootディレクトリ名】の部分は、**Finder**でドライブを表示したときに表示されるmicroSDカードのドライブ名です）。
2. 矢印キーでカーソルを、```# hdmi_force_hotplug=1```の**#**の上に移動します。
![vi_config修正 2020-12-09 19.05.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679257/13196056-56f5-0aef-084d-ec7fa7c1ede8.png)
3. xキーを押下します。（**#**が削除されます。）
4. キーボードから『:』（コロン）、『w』、『q』、『↩︎』（リターン）の順に入力します。（変更が保存され、viエディターが終了します。）
5. ターミナルで、`cat /volumes/【microSDカード rootディレクトリ名】/config.txt`と入力すれば、**config.txt**の内容が表示され、変更が行われていることを確認できます（【microSDカード rootディレクトリ名】の部分は、**Finder**でドライブを表示したときに表示されるmicroSDカードのドライブ名です）。

</div></details>

これで、OSのインストールと、RaspberryPi初期起動前の設定変更は完了です。
#参考
今回の作業の実施にあたり、下記を参考にいたしました。
<dl>
 <dt>Raspberry PI OSのインストール、SSHの有効化、無線LANの設定</dt>

 <dd><a href="https://www.raspberrypi.org/software/"><b>Raspberry Pi OS　（公式サイト）</b></a></dd>

 <dd><a href="https://sukiburo.jp/setup-raspberry-pi/"><small>sukiburo</small> <b>ラズパイ(raspberry pi)の初期設定をするよ(win/mac対応)</b></a></dd>
 <dt>画面出力設定</dt>

 <dd><a href="https://dev.classmethod.jp/articles/raspberry-pi-4-ssh-vnc-remote/"><small>Developers.IO</small><b> Raspberry Pi 4にSSHとVNCで接続してみた</b></a></dd>
</dl>

#関連投稿
[RaspberryPi 4BでAI、RaspberryPi 4BでIoT（まえがき）](https://qiita.com/Jin_Kubota/items/787c677e273ab2409282)
[RaspberryPi 4BでAI、RaspberryPi 4BでIoT（システム概要）](https://qiita.com/Jin_Kubota/items/1f225e7813ba0b281923)
[RaspberryPi 4BでAI、RaspberryPi 4BでIoT（開発環境）](https://qiita.com/Jin_Kubota/items/6a63c6ea4e621427a541)

#おわりに
プログラミング初心者のため、誤りが多々あると思います。アドバイス、励ましのコメントなどいただけると嬉しいです。