[ラズパイ x 環境構築] Wi-FiとSSHから行うRaspberryPi Zero Wのセットアップ方法


2021/02/11

とても今更感はあるのですが、以前手に入れたRaspberry Pi Zeroをしばらく放置していたのを思い出したので、いつでも何かに使えるようにセットアップ方法をメモしておきます。

なお通常サイズのRaspberry Pi 3/4B系のセットアップは以前記した記事の内容の方で詳しく解説していたのでよろしければそちらの内容をご参照ください。


Raspberry Pi Zeroをセットアップする前の注意点

Raspberry Pi Zeroの初回のOSインストールで一番困ってしまうのが、ラズパイシリーズでばらつきのあるHDMI端子の規格ではないかと思います。

著者が手持ちで良く利用しているのがRaspberry Pi 3B+ですが、この製品のディスプレイ接続HDMIポートは最も標準的なタイプ(Type-A)です。今やパソコンやテレビ、ゲーム機などでお馴染みのものでHDMIといえばこの形状を思い浮かべる方も多いかと思います。

それで今回説明するRaspberry Pi Zero W/WHは、Type-Aよりも一回り小さいタイプのmini-HDMI(Type-C)接続の端子ポートが採用されています。

なので液晶ディスプレイに接続する場合は、ディスプレイ側のHDMI端子(Type-A)と、ラズパイZeroW側のmini-HDMI端子(Type-C)を備えているケーブルか、異形変換アダプターが必要になってきます。

それはそれで最近ではRaspberry Pi 4Bを購入されて使われている方も多いような状況でありますが、こちらはmicro-HDMI端子(Type-D)を採用しています。このmicro-HDMI端子は主にスマホやタブレットなどで利用されているケーブルであり、Type-Cよりさらに小さい端子サイズになります。

このような事情がありラスパイ一台ごとにHDMIケーブルを用意するにも、適切なHDMIケーブルが用意出来なければ液晶ディスプレイに接続できないし、OS周りの初回設定ができない...という状況を想定して、ディスプレイ接続を利用しないセットアップ方法を行いたいと思います。


ディスプレイレスなRaspberry Pi ZeroのSSHからの設定手順

ではここからは具体的に何かしらのホストOSからラズパイをSSH接続させてセットアップさせる方法を順次やっていきます。

Raspberry Pi OS Liteの導入

Raspberry Pi Zeroの用途だと、最低限のパッケージが使えるLiteが適していると思います。もちろんDesktop版も動作はしますが、公式サイトから以下のリンクから炊き出しイメージを入手できます。

合同会社タコスキングダム|蛸壺の中の工作室

ここから適切なmicroSDカードにダウンロードしてきたイメージを適切なイメージライター焼いておきます。

この手のSDカードへのイメージの書き込みの手順はウェブ検索などでも無数に引っかかりますので、ここでは説明をスキップします。

イメージがSDカードに書き込まれたらこのSDカードの中身のフォルダが編集できるように、別のパソコンに接続します。

このときMacOSやWindowsなどのオートマウントしてくれるOSでSDカードの編集するのが一番手っ取り早いですが、今回は手元のPCがLinux(別のラズパイに入れたRaspberry Pi OSを含む)でマウント後に設定を追加していきます。

SSHとWiFiの設定

まずは先程のSDカードを別のLinuxOSパソコンに挿す前の状態にデバイスを確認しておきます。

            $ ls /dev/ | grep -e 'sd'
sda
sda1
sda2
sda5
        
ここではsdから始まるデバイスが現在接続されているボリュームデバイス名になります。

次にSDカードをこのパソコンにUSB接続して、再度同じコマンドで確認すると、

            $ ls /dev/ | grep -e 'sd'
sda
sda1
sda2
sda5
sdb
sdb1
sdb2
        
なにやら手元の環境ではsdbのボリュームデバイスの候補が3つほど増えました。どうやら先程書き込んだRaspberry Pi OS Liteのボリューム構造を反映した内容になっているようです。

おそらくはメインが
sdb1で、補助的なボリュームがsdb2であると憶測し、/media以下にこのsdb1デバイスをマウントしてみます。

            $ sudo mount -t vfat /dev/sdb1 /media
$ ls /media
COPYING.linux                bcm2711-rpi-4-b.dtb   issue.txt
LICENCE.broadcom             bcm2711-rpi-400.dtb   kernel.img
'System Volume Information'   bcm2711-rpi-cm4.dtb   kernel7.img
bcm2708-rpi-b-plus.dtb       bootcode.bin          kernel7l.img
bcm2708-rpi-b-rev1.dtb       cmdline.txt           kernel8.img
bcm2708-rpi-b.dtb            config.txt            overlays
bcm2708-rpi-cm.dtb           fixup.dat             start.elf
bcm2708-rpi-zero-w.dtb       fixup4.dat            start4.elf
bcm2708-rpi-zero.dtb         fixup4cd.dat          start4cd.elf
bcm2709-rpi-2-b.dtb          fixup4db.dat          start4db.elf
bcm2710-rpi-2-b.dtb          fixup4x.dat           start4x.elf
bcm2710-rpi-3-b-plus.dtb     fixup_cd.dat          start_cd.elf
bcm2710-rpi-3-b.dtb          fixup_db.dat          start_db.elf
bcm2710-rpi-cm3.dtb          fixup_x.dat           start_x.elf
        
どうやらsdb1であたりのようです。

ではこのフォルダのファイルを編集していきます。

まずはSSHを有効にする作業ですが、このsdb1ボリュームのルートに
sshという空ファイルを作ることで、SSHで接続できるようになる仕様だそうです。

            $ cd /media/
$ sudo touch ssh
        
次に、Wi-Fiの設定もここで行います。

Wi-Fiの設定は
wpa_supplicant.confというファイルを作成してから、現在のご自宅で利用している2.4G用のSSIDとパスワードの内容を直接記述することになります。

            $ sudo touch wpa_supplicant.conf
$ sudo nano wpa_supplicant.conf
#👇以下の内容で編集
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
    ssid="WiFi機器から得られるSSID"
    psk="WiFi機器から得られるパスワード"
    key_mgmt=WPA-PSK
}
        
なお、既に同じようにWi-Fiネットワークに繋いでいるラズパイがあれば、/etc/wpa_supplicant/wpa_supplicant.confの内容を確認することで現在のWi-Fiの設定値が確認できます。

ではこの設定が済んだら、ボリュームをアンマウントします。

            #👇アンマウントするために一旦mediaフォルダからログアウトする
$ cd ~
$ sudo umount /media
$ ls /media
#マウントしていたボリュームの内容が消えていることを確認
        
アンマウントが完了したら、パソコンからSDカードを引っこ抜いてもOKです。

ちなみに上で設定した
sshwpa_supplicant.confですが、Raspberry Pi OSを一度起動してしまうと、システムに設定が反映された後に自動で削除されてしまいます。なので、これらのファイルが無くなったからといってもう一回同じファイルを作る必要はありませんので、ご注意ください。

SSH接続の確認

いよいよ先程のmicroSDをRaspberry Pi Zero側に差し込んで、電源を供給して起動します。

ますがSSHできちんと接続できるかを試します。

まずは動的にWi-Fi接続されて状態ですので、IP値を調べる必要があります。家庭内のブロードバンドルーターであれば、何かしらの管理ユーティリティツールが使えるので、そこで接続している個体を確認することができます。

合同会社タコスキングダム|蛸壺の中の工作室

手元の環境では
192.168.0.103というIPが割り振られているようです。またここでもラズパイが正しくWi-Fi接続していることが確認できます。

肝心のSSH接続のほうはというと、Raspberry Pi OSのデフォルト設定ではユーザー名は
pi、パスワードraspberryであることを踏まえて、

            $ ssh pi@192.168.0.103
#パスワードを入力...
pi@raspberrypi:~ $
        
となりようやくモニターなしの操作でラズパイに接続できました。

この時点で先にアップデートを行いましょう。

            $ sudo apt update
$ sudo apt upgrade
        
再起動後は、あとはもうSSH接続を確立できればしめたもので、デフォルトユーザー名を変えたり、

IPアドレス値を固定したりと、細かい設定が別の端末から操作できます。

Dockerのインストール

この項目はオプションとして、Raspberry Pi Zeroのスペックを考えるとDockerは少し重いのですが軽めのコンテナであれば問題なく動作します。何かと入れておくと便利ですので導入をオススメしておきます。

インストール手順は以前の記事で紹介させて頂いた内容と同じですので、ここでは省略します。

Wi-Fiを常時接続しておく設定

Raspberry Pi Zeroの用途としては、その省電力性を活かした常時稼働する使い方が期待されるので、実はこのパートが今回一番説明したかったポイントになります。

Raspberry Pi OSのデフォルトだとパワーマネジャーが一定時間接続がアイドル状態になってしまった時に、そのままWi-Fi機能を休止させてしまうため、リモートで簡易サーバーのような使い方をしていた場合に突然通信が途絶えてしまいます。もうこうなってしまうと一度電源を落として強制再起動をかけないといけなくなりますが、これが遠隔地においたファイルサーバーで使っていたラズパイで起こってしまうと目も当てられない事態になってしまいます...。そうならないためには、power management機能を使って、きちんとWi-Fi電源が常時起動している状態にしていないといけません。

まずデフォルトでは以下のようにwi-fiのpower management機能がONになっていることが確認できます。

            $ iwconfig wlan0
wlan0     IEEE 802.11  ESSID:"TP-Link_***"
          Mode:Managed  Frequency:2.427 GHz  Access Point: 74:DA:88:3B:80:77
          Bit Rate=72.2 Mb/s   Tx-Power=31 dBm
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on #👈電源管理機能はON
          Link Quality=64/70  Signal level=-46 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:20  Invalid misc:0   Missed beacon:0
        
そこで、このpower managementを以下のコマンドで切ります。

            $ sudo iwconfig wlan0 power off
$ wconfig wlan0
wlan0     IEEE 802.11  ESSID:"TP-Link_***"  
          Mode:Managed  Frequency:2.427 GHz  Access Point: 74:DA:88:3B:80:77   
          Bit Rate=72.2 Mb/s   Tx-Power=31 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:off #👈電源管理機能はOFF
          Link Quality=65/70  Signal level=-45 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:20  Invalid misc:0   Missed beacon:0
        
しかしこれだけでは次回のラズパイ起動時に再びPower ManagementがONに戻ってしまうため、再起動後に自動でOFFになるように/etc/rc.localに以下を編集します。

            $ sudo nano /etc/rc.local
#!/bin/sh -e

#...中略

#👇exit 0の手前に以下の一行を追加
iwconfig wlan0 power off

exit 0
        
また再起動の度に/etc/rc.localが起動できるようにsudo raspi-configから[1. System Options] > [S6. Network at Boot]の設定を有効にしておきます。

合同会社タコスキングダム|蛸壺の中の工作室

ラズパイ再起動後に
wconfig wlan0コマンドから電源管理機能がOFFになっていることを確認できれば完了です。


まとめ

以上の内容でRaspberry Pi OSを新しくmicroSDを書き込んでから、Raspberry Pi Zeroで利用する際までに、直接モニターを介さずにワイヤレスな環境からSSHのみでセットアップする方法の概要になります。

もちろん、SSH接続してラズパイ側を操作できるためのセットアップ用のパソコンが最低1台は必要にはなりますが、WindowsやMacOSでのSDカードへの書き込み操作は、今回例に挙げたLinuxでの作業よりマウント/アンマウントの手順が省けるため、もっと簡単にはなると思います。

今回はセットアップ作業にフォーカスを当てましたが、今後は時間の許す限りで、Raspberry Pi Zeroの具体的な使いこなしの例も話題として取り上げていければなぁと考えています。
記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

電子工作を身近に知っていただけるように、材料調達からDIYのハウツーまで気になったところをできるだけ細かく記事にしてブログ配信してます。