【小ネタ】Raspberry PiをPCと直結して無線LANのIPを確認する

2016.03.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、せーのです。

ついに64bit、Quad 1.2GhzというもうほとんどPCに近いRaspberry Pi 3の発売が決定しシングルボードでは頭一つ抜けた感のあるRaspberry Pi。私もデモやセッションの際に、また実案件でもよく使うボードです。
が、特に外に出た時に遭遇するが「これのIPなんだろ問題」です。

開発時のスタイル

Raspberry PiはEdisonと違い電源をPCに挿したからといってシリアル接続することができません。ですので接続はSSHというパターンが多いです。 また、Raspberry Piには無線LANのモジュールがなく(Raspberry Pi 3ではWi-FiとBluetoothが標準で載るそうです)、有線のEthernetのみとなっています。今時現地に有線用のHUBポートがある方が珍しく、無線LAN用のドングルをUSBに挿して使用する事が多いです。有線ポートを使わない、という事ですね。

そこで開発時の流れとしては

  • HDMI端子をそこら辺の空いているディスプレイに挿す
  • Raspberry Piに直接USBマウス、キーボードを挿す
  • 画面上からWi-Fiをセットアップ
  • SSHを許可(Rasbeanのバージョンがwheezyの場合。jessieからはデフォルトが許可になっている)
  • PCを同ネットワークに設定
  • PCよりSSH接続
  • マウス、キーボード、HDMIを外す

というようなセットアップをすることが多いです。特にOSからスクラッチで組む時はほぼこれです。
ですので環境としてはこんな感じになります。

raspberryPiLAN1

現地でのスタイル

さて、このようにしてRaspberry Pi上でソリューションを組み上げたら、いよいよ現地でのセットアップとなります。 現地ではなるべくRaspberry Piを独立させて動かしたいため、

  • 電源 => モバイルバッテリーに挿す
  • Wi-Fi => IoTゲートウェイやポータブルWi-Fiルータ(SSH接続出来るタイプ)につなげる
  • 操作は全てSSH越しに行う

という形に変わります。つまりこんな感じです。

raspberryPiLAN2

この状態でSSH接続を試みると幾つかのハードルが待っています。

Wi-Fiルータにつながらない(つながったかどうかがわからない)

オフィスでのネットワークの優先順位が高くなっているため、似たようなSSIDを拾ってしまい、現地でのポータブルWi-Fiルータが見つけられない、またはwpa_supplicant.confにそもそもポータブルWi-Fiルータが登録されていない、というパターンです。

IPアドレスがわからない(何かの拍子で変わっている)

ネットワークには接続できているものの、ポータブルWi-FiルータのDHCPリースが終わってしまい、新しいIPがDHCPから振られてしまったためにどのIPかがわからない、というパターンです。特にデモ直前まで同じIPだったのに10分前で繋がらなくなるとそのまま逃げ出したくなります。

こうなるともうどうなっているのかがわからないため、上の開発時スタイルに戻す必要があります。現地でHDMIのつながるディスプレイを求めてUSBマウスとUSBキーボードを片手にさまよい歩く事になります(私は現地の控室にあるTVをよく使わせてもらいました)。

この状態を防ぐためには現地でも確実に繋がるような接続方法を一つ確保しておくと良いでしょう。

有線でSSH接続をする

PCとRaspberry PiをLANケーブルで直接つなげます。AppleのEthernet-USBの変換アダプタが便利です。

raspberryPiLAN3

PC側のEhernet以外のネットワーク(Wi-Fiなど)をOFFにします。

raspberryPiLAN4

arpコマンドを打ちます。

Tsuyoshis-Macbook:~ Tsuyoshi$ arp -a
none.local (169.254.162.40) at b8:27:eb:c:ff:68 on en8 [ethernet]
? (169.254.255.255) at ff:ff:ff:ff:ff:ff on en8 [ethernet]
? (192.168.1.1) at 7c:e9:d3:a2:8b:ba on en0 ifscope [ethernet]
? (192.168.1.2) at 0:25:dc:58:57:9f on en0 ifscope [ethernet]
? (192.168.1.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet]
broadcasthost (255.255.255.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet]

IPアドレスとMACアドレスの一覧が出るかと思います。Raspberry PiのMACアドレスはベンダーID(b8:27:eb) + CPUシリアル番号の下6桁、と決まっています。
つまり、この中で[b8:27:eb]で始まるMACアドレスのIPがRaspberry PiのIPとなります。
ではSSHを打ってみます。

Tsuyoshis-Macbook:~ Tsuyoshi$ ssh pi@169.254.162.40
Warning: Permanently added '169.254.162.40' (ECDSA) to the list of known hosts.
pi@169.254.162.40's password:
Linux (none) 4.1.13-v7+ #826 SMP PREEMPT Fri Nov 13 20:19:03 GMT 2015 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

xhost:  unable to open display ""
pi@(none) ~ $

無事つながりました。 あとはifconfigボタンでwlan0を確認すればIPアドレスが分かります。

まとめ

これでいざ現地でRaspberry Piがおかしくなった時でも状況が確認できますね。
他にもMacとの直接接続であればavahiを入れて名前解決する、という方法もあります。こちらは機会があればまたご紹介致します。