はじめに
プログラミングの学習を始めてから4ヶ月。pythonを使い、RaspberryPiでAI、IoTの技術を利用した高齢者見守りシステムを作ってみました。
制作の過程を、何回かに分けてまとめていきます。
今回は、RaspberryPiの初期設定のうちの、OSのインストールと、初期起動前の設定変更についてまとめます。
使用機材
- PC
- MacBook Pro 16
- 2.3 GHz 8コアIntel Core i9
- 16 GB 2667 MHz DDR4
- macOS Big Sur ver.11.0.1
- メモリリーダーライタ
- ELECOM MR-A39NWHF1
- 変換ケーブル
- Apple USB-C - USBアダプタ
- microSDカード
- SanDisk
- microSDXC UHS-I カード
- 128GB
RaspberryPiの初期設定
RaspberryPiにキーボードやディスプレイなどを接続せず、PCと無線LANで接続してPCから操作できるように設定します。

RaspberryPiの初期設定は、**ゆうさんのブログ sukiburo**で非常に丁寧に説明されており、参考にして実施しました。
ここに書きました一連の作業はPCで実施します。これらの作業の間は、microSDカードをRaspberryPiには挿入しません。
Raspberry Pi OSのインストール
sukiburoでは、OSをRaspberryPi公式サイトからダウンロードし、マニュアルでmicroSDカードに書き込む方法が説明されています。この通りにやれば問題なくOSのインストールができるのですが、ここではRaspberry Pi Imagerを使ってインストールする方法を試してみます。
この方法では、事前にOSをダウンドードしたり、microSDカードをフォーマットする必要はありません。
まず、RaspberryPi公式サイトからmacOS用のPaspberry PI Imagerをダウンロードし、PCにインストールします。
詳細手順
>[RaspberryPi公式サイト](https://www.raspberrypi.org/software/)の**Download for macOS**をクリックすると、インストーラー "imager_1.4.dmg"のダウンロードが開始されます。

ダウンロードが完了したら、保存されたファイル**imager_1.4.dmg**をダブルクリックし、アプリケーションをPCにインストールします。
下記のウインドウが表示されたら、左側のラズベリーのアイコンを、右側のフォルダーのアイコン上にドラッグ&ドロップすればインストールは完了。Launchpadから**Paspberry PI Imager**を起動できるようになります。(インストーラ**imager_1.4.dmg**は削除して問題ありません。)

準備ができたので、Paspberry PI Imagerを使って、microSDカードにraspberryPi OSをインストールします。
詳細手順
>インターネットアクセス可能なPCに接続されたmicroSDカードライターのスロットに、microSDカードを挿入します。
次に、Launchpadで**Paspberry PI Imager**のアイコンをクリックし、**Paspberry PI Imager**を起動します。
下記のウインドウが表示されたら、**CHOOSE OS**をクリックします。

下記のOS選択ウィンドウが表示されますので、**Raspberry Pi OS(32-bit)**をクリックします。

OSを選択すると下記のウインドウが表示されますので、**CHOOSE SD CARD**をクリックします。

下記のウインドウが表示されますので、使用するSDカードをクリックします。

OSとSDカードの選択が完了すると、下記のウインドウが表示され、OSの書き込みが開始可能となります。
選択したOS、SDカードに間違いがなければ、**WRITE**をクリックします。

microSDカード上の全てのデータが消去されることを確認すウインドウが表示されるので、問題なければ**YES**をクリックします。

下記のウインドウが表示され、microSDカードへのOSの書き込みが開始されます。

OSの書き込みが完了すると、自動的にVerifyを開始します。

verifyが完了すると下記のウインドウが表示されます。**CONTINUE**をクリックすると、ウインドウが閉じ、OSのインストールが完了します。
筆者が実施した環境では、OSの書き込み開始からVerifyの完了まで、25分程度かかりました。

SSHの有効化
次に、安全に(=他人が勝手にRaspberryPiを操作したり、PCとRaspberryPiとの間の通信を盗聴することを防ぎつつ)、PCからネットワークを経由してRaspberryPiにログインして操作を可能にするために、SSH(Secure Shell)を有効にします。
OSをインストールしたmicroSDカードのrootに、SSHという名前の空のファイルを作成すると、SSHが有効になります。
詳細手順
>ファイルの作成には、Linuxコマンドの**touch**を使用します。Launchpadからターミナルを起動し、`touch /volumes/【microSDカード rootディレクトリ名】/ssh`と入力します。【microSDカード rootディレクトリ名】の部分は、**Finder**でドライブを表示したときに表示されるmicroSDカードのドライブ名です。

無線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 修正)。
詳細手順
>ファイルの作成には、macのターミナル上で標準で使用できるテキストエディター **viエディター**を使用します。
Launchpadからターミナルを起動し、`vi /volumes/【microSDカード rootディレクトリ名】/wpa_supplicant.conf`と入力すると、viエディター上でwpa_supplicant.confという名前の新しいファイルが開きます(【microSDカード rootディレクトリ名】の部分は、SSHの有効化のときと同様に、**Finder**でドライブを表示したときに表示されるmicroSDカードのドライブ名です)。


次に、使用する無線LANに接続するための情報を書き込みます。
上記の**wpa_supplicant.conf**に書き込むコードを、そのまま(**SSID**、**PIN**の部分も変更せず)コピーします。
viエディターを開いたターミナルのウインドウ上にマウスポインタを移動し、トラックパッドを副ボタンクリック(2本指のクリック)してペーストを選択すれば、コードが入力できます。


次に、使用する無線LANの環境に合わせて編集します。コードの**SSID**と**PIN**の部分を、使用する無線LANのSSIDとPINに書き換えます。
viエディターでは、文字を消去するときは、カーソルを消去したい文字上に移動して**x**を入力します。**SSID**の部分を書き換えるためには、まず矢印キーを使用してカーソルを**SSID**先頭の**S**の位置に移動します。この状態で、**x**キーを4回押すと、**SSID**が削除されます。


次に、使用する無線LAN環境のSSIDを入力します。viエディターで文字を入力する際は、入力したい位置へカーソルを移動した後、**i**キーを押して挿入モードに変更します。この状態で、キーボードから入力した文字が、カーソルの位置に挿入されます。


入力が完了したら、escキーを押下すれば挿入モードが終了し、入力した内容が確定します。

同様に、カーソルを**PIN**の先頭の**P**の位置に移動し、使用する無線LAN環境のPINに書き換えます。

PINの書き換えが完了したら、キーボードから『:』(コロン)、『w』、『q』、『↩︎』(リターン)の順に入力すると、編集した内容が保存され、viエディターが終了します(このとき、カーソルを移動させる必要はありません)。

Linuxコマンドの**cat**を使用すると、作成したwpa_supplicant.confの内容を確認できます。ターミナルで、`cat /volumes/【microSDカード rootディレクトリ名】/wpa_supplicant.conf`と入力します(【microSDカード rootディレクトリ名】の部分は、**Finder**でドライブを表示したときに表示されるmicroSDカードのドライブ名です)。

画面出力設定
RaspberryPi OSは、標準の設定ではHDMIでディスプレイを接続していないと、PCからリモートデスクトップ接続してもRaspberryPiの画面が表示されずにエラーとなってしまいます。ディスプレイを接続していないRaspberryPiへのリモートデスクトップ接続でRaspberryPiの画面をPCに表示できるよう、設定を変更します。
OSをインストールしたmicroSDカードのrootにあるconfig.txtを編集することで、設定が変更できます。
config.txtの中でコメントアウトされている# hdmi_force_hotplug=1
という設定を有効にすることで、リモートデスクトップ接続しているPCでRaspberryPiの画面を表示できるようになります。
詳細手順
>
1. ターミナルで、`vi /volumes/【microSDカード rootディレクトリ名】/config.txt`と入力し、viエディター上で**config.txt**を開きます(【microSDカード rootディレクトリ名】の部分は、**Finder**でドライブを表示したときに表示されるmicroSDカードのドライブ名です)。
2. 矢印キーでカーソルを、```# hdmi_force_hotplug=1```の**#**の上に移動します。

3. xキーを押下します。(**#**が削除されます。)
4. キーボードから『:』(コロン)、『w』、『q』、『↩︎』(リターン)の順に入力します。(変更が保存され、viエディターが終了します。)
5. ターミナルで、`cat /volumes/【microSDカード rootディレクトリ名】/config.txt`と入力すれば、**config.txt**の内容が表示され、変更が行われていることを確認できます(【microSDカード rootディレクトリ名】の部分は、**Finder**でドライブを表示したときに表示されるmicroSDカードのドライブ名です)。
これで、OSのインストールと、RaspberryPi初期起動前の設定変更は完了です。
参考
今回の作業の実施にあたり、下記を参考にいたしました。
- Raspberry PI OSのインストール、SSHの有効化、無線LANの設定
- Raspberry Pi OS (公式サイト)
- sukiburo ラズパイ(raspberry pi)の初期設定をするよ(win/mac対応)
- 画面出力設定
- Developers.IO Raspberry Pi 4にSSHとVNCで接続してみた
関連投稿
RaspberryPi 4BでAI、RaspberryPi 4BでIoT(まえがき)
RaspberryPi 4BでAI、RaspberryPi 4BでIoT(システム概要)
RaspberryPi 4BでAI、RaspberryPi 4BでIoT(開発環境)
おわりに
プログラミング初心者のため、誤りが多々あると思います。アドバイス、励ましのコメントなどいただけると嬉しいです。