成り行きで引き受けた「大人の自由研究」。ラズパイでつくる『スズメ激写装置』、一見順調そうに見えるが……さて。今回は、使い勝手を大きく変える「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」というネットワークデバイス名で認識されているはず。この確認ができれば、最初の関門はクリアだ。
ネットワークデバイスとして認識されていれば、以下のコマンドラインをPCのテキストエディタへコピー&ペーストし、「○○○」部分を接続するWi-Fiアクセスポイント名に、「△△△」部分を接続用パスワードにそれぞれ置き換え、さらにそれを端末画面(SSHクライアント)へコピー&ペーストしよう。もちろん直接入力してもいいが、コマンド入力に不慣れな場合は無理をしないほうがいい。これで、Wi-Fiアクセスポイントの設定は完了だ。
wpa_passphrase "○○○" "△△△" | sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf
続いては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
リスト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
最後に、テザリングの設定を。以下のとおり管理者権限で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 ←暗号化方式
}
I氏:「なんだかんだ、ここまで順調じゃないですか」
海上:「もうWi-Fiで遠隔操作できるし、スマホがあれば外へ持ち出せるし」
I氏:「残る課題はカメラのセットアップと動体検知ですかね」
海上:「ですね」
I氏:「スズメが飛んでこなかったときのオチも考えといてくださいよ」
海上:「(泣)」
I氏:「これがほんとのスズメの涙とか、そういうオチはいりませんから」
海上:「……(バレたか)」