成り行きで引き受けた「大人の自由研究」。ラズパイでつくる『スズメ激写装置』、一見順調そうに見えるが……さて。今回は、使い勝手を大きく変える「Wi-Fi化」を進める。

まずはWi-Fiの設定を

うだるような暑さの昼下がり、編集部I氏から電話がかかってきた。そこまでダメ人間ではないので、ビールは注いでいない。

I氏:「またチマチマと環境設定ですか!?」
海上:「ハードウェアを絞り込んでいるからラクですよ」 ※:第2回を参照
I氏:「コマンドはほどほどに。一般読者には難しすぎるから」
海上:「PCからSSHで遠隔操作すれば、コマンド入力もコピペ対応できますよ」
I氏:「とはいえ、viやemacsといったエディタでの作業は必要でしょ」
海上:「扱いやすいテキストエディタ『nano』がありますから」
I氏:「そうなの?」
海上:「……座布団全部、って感じですかね」

気を取り直して、Wi-Fiの環境設定に進もう。前回、SSHを使い有線LAN経由でリモートログインするところまで説明したが、そのままでは長いEthernetケーブルを引き回さねばならず、ベランダとはいえ屋外利用には不向き。Wi-Fi化すれば自宅のルータ/アクセスポイントだけでなく、スマートフォンをルータ代わりにできるので(テザリングを応用)、屋外へも持ち出せる。なお、第2回で紹介したUSB Wi-Fiアダプタは2.4GHz通信のみ対応するため、電波法に抵触する心配はない。

Wi-Fiの設定だが、SSHでリモートログイン後、まずは「ifconfig」コマンドを実行しよう。第2回で紹介したUSB Wi-Fiアダプタであれば、システムの起動とともにモジュール(ドライバ)が読み込まれ、自動的に「wlan0」というネットワークデバイス名で認識されているはず。この確認ができれば、最初の関門はクリアだ。

ifconfigコマンドを実行したところ。「wlan0」というネットワークデバイスが表示されていれば、USB Wi-Fiドライバが動作していると推定できる

ネットワークデバイスとして認識されていれば、以下のコマンドラインをPCのテキストエディタへコピー&ペーストし、「○○○」部分を接続するWi-Fiアクセスポイント名に、「△△△」部分を接続用パスワードにそれぞれ置き換え、さらにそれを端末画面(SSHクライアント)へコピー&ペーストしよう。もちろん直接入力してもいいが、コマンド入力に不慣れな場合は無理をしないほうがいい。これで、Wi-Fiアクセスポイントの設定は完了だ。

wpa_passphrase "○○○" "△△△" | sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf

コピー&ペーストしたコマンドラインを実行すれば、Wi-Fiアクセスポイント接続用の設定が完了する

続いてはIPアドレスの設定を。現在、家庭で利用されているルータ(兼Wi-Fiアクセスポイント)の多くにはDHCPサーバが用意されており、アクセスポイントに接続したクライアントに対しIPアドレスを貸し与える機能がある。IPアドレスは固定でも構わないのだが、『スズメ激写装置』は接続のつど変わる可能性がある変動型のほうが好都合なのだ。

その理由は、冒頭にも挙げた「テザリング」。iOSにしてもAndroid OSにしても、テザリング子機(本稿の場合『スズメ激写装置』)に対しIPアドレスを割り振ってくれるため、変動型のほうが運用はラクなのだ。それに、利用するLinuxディストリビューション「Raspbian」は、AvahiというBonjour互換のIPアドレス自動設定機能がデフォルトで稼働しているため、変動型でも不便はない。

というわけで、いよいよ「nano」を使いネットワークの設定ファイルを編集する。ファイルは「/etc/network/interfaces」、これを引数として与え実行すればいい(変更には管理者権限が必要なのでsudoを使う)。初期設定でいろいろ定義されているが、それをすべてクリアしたうえでリスト1の内容をコピー&ペーストしよう。有線LANポートはケーブルを接続しないかぎり使わず、ふだんはUSB WI-Fiアダプタで通信するための設定だ。

Control-Xとタイプすると、画面下に「Save modified buffer」と確認のメッセージが表示されるので「y」をタイプし、続いて現れる「File Name to Write: /etc/network/interfaces」ではそのままreturnキーを押せばいい。これで、IPアドレスの設定は完了だ。

$ sudo nano /etc/network/interfaces

nanoにリスト1の内容をペーストしたところ。このあとファイルを上書き保存すれば、Wi-Fi関連の設定は峠を越える

リスト1:/etc/network/interfaces

auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

ついでにテザリングの設定も

これでWi-Fiの設定はひとまず完了。動作確認のためにも、いちどシステムを停止させ、Ethernetケーブルを抜いたうえで(USB Wi-Fiアダプタだけで)起動するかテストしてみよう。システム停止のコマンドは以下のとおり、Raspberry Pi前面の緑色LEDが10回点滅したことを確認のうえ、電源(USB micro-B)ケーブルを引き抜くこと。

$ sudo halt

次回Raspberry Piの電源をオンにすると(スイッチがないのでケーブルを接続するのだが)、DHCPサーバから貸し出されたIPアドレスがUSB Wi-Fiアダプタに割り当てられ、そのIPアドレス経由でリモートログインできるようになる。ただし、前述したとおり接続のつど変更されることがあるため、OS Xの場合は以下のとおりBonjour名を指定したほうがいい。Bonjour名はiOSのSSHクライアントアプリ「Serverauditor」でも利用できるので、念のため。

$ ssh pi@raspberrypi.local

Raspberry Piには電源ボタンがないため、面倒だが毎回このようにコマンドを実行してシステムを終了しなければならない

RaspbianではBonjour互換機能(Avahi)が動作しているため、SSHクライアントアプリから「raspberrypi.local」というホスト名で接続できる

最後に、テザリングの設定を。以下のとおり管理者権限でnanoを起動し、リスト2の内容を追加しよう。ssid行にはスマートフォンの名称を、psk行にはテザリングで使うパスワードを入力すればいい。/etc/network/interfacesのときと同じ要領で上書き保存すれば設定完了、次回システムを起動したときには手もとのスマートフォンがWi-Fiアクセスポイント代わりとなる。

なお、テザリングを使う場合、Raspberry Piの電源を入れる前にスマートフォン側で受け入れ体制を準備しておくこと。たとえばiPhoneの場合、『設定』の「インターネット共有」画面にあるスイッチを有効にしたうえで、その画面を表示したまま待機していれば確実だ。

$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf


リスト2:/etc/wpa_supplicant/wpa_supplicant.confに追加

network={
    ssid="Shinobu6"  ←スマートフォンの名称
    psk="suzumechan"  ←テザリングのパスワード
    key_mgmt=WPA-PSK   ←暗号化方式
}

iPhoneのテザリング設定画面。SSIDは『設定』→「一般」→「情報」→「名前」に入力した文字列を使う

I氏:「なんだかんだ、ここまで順調じゃないですか」
海上:「もうWi-Fiで遠隔操作できるし、スマホがあれば外へ持ち出せるし」
I氏:「残る課題はカメラのセットアップと動体検知ですかね」
海上:「ですね」
I氏:「スズメが飛んでこなかったときのオチも考えといてくださいよ」
海上:「(泣)」
I氏:「これがほんとのスズメの涙とか、そういうオチはいりませんから」
海上:「……(バレたか)」