もぐてっく

人は1つ歳を取る度、1ビットづつ大きくなれると信じてた。

ルータのボタンをワンプッシュ!Raspberry Pi Zero WのWifi接続を簡単に切り替える方法

第1回 全日本ラズパイゼロW争奪戦に運良く勝利して、Raspberry Pi Zero Wを手に入れました。

普段はPimoroniのScroll pHat HDを装着して、無線ルータ経由で為替とか明日の天気とかを取ってきてだらだら流しています。
結構実用的です。

f:id:moguno:20170830221018p:plain:w350

これをテザリングしたスマホに接続して飲み会でデモ(ドヤぁ!ええやろぉ!)をしたかったのですが、いちいちRaspberry Pi Zero Wにコンソールを繋いでWifi設定を変更するのが面倒でした。

なので、WPSを使ってWifi接続を簡単に切り替えられる仕組みを作ることにしました。

WPSって?

Wi-Fi Protected Setup - Wikipedia

ざっくり、ルータと端末の「WPSボタン」を押すことで、両者を設定なしで接続してくれる仕組みです。

しかしながら、Raspberry Pi Zero Wにはボタンみたいな入力デバイスは付いていないので、Raspbianの起動時に、WPSボタンを押したのと同等の状態になるようにしました。

後はお好きなルータのWPSボタンを押すことで、Raspberry Pi Zero WとのWifi接続が確立すると言う寸法です。

設定

これはRaspbianのwithout Desktop版用の設定です。

NICの設定

まずWifiアダプタwlan0を設定します。

/etc/network/interfaces
・・・
allow-hotplug wlan0
iface wlan0 inet dhcp
    wpa-conf /opt/wps/etc/wpa_supplicant/for_wps_button.conf
/opt/wps/etc/wpa_supplicant/for_wps_button.conf
ctrl_interface=/run/wpa_supplicant

普段はやたら面倒なwpa_supplicantの設定ですが、今回はWPSが全てやってくれるので超シンプルですね。

Raspberry Pi Zero W起動時に、WPSボタンを押した感じにするスクリプトを実行する

/etc/rc.local
・・・
/opt/wps/bin/wps_connect.sh &
・・・

スクリプトの中身はこんな感じです。
Raspberry Pi Zero WのLEDを操作して、WPS接続待ちであることが視覚的に分かるようにしました。

/opt/wps/bin/wps_connect.sh
#! /bin/sh

# LEDを100ms周期で点滅させる
echo timer > /sys/class/leds/led0/trigger
echo 100 > /sys/class/leds/led0/delay_off
echo 100 > /sys/class/leds/led0/delay_on

# WPSボタンを押す
/sbin/wpa_cli -i wlan0 wps_pbc

# 5秒周期でWifi接続が確立したかチェックする
while sleep 5;do
	STATUS=`/sbin/wpa_cli -i wlan0 status | grep wpa_state= | cut -d = -f 2`

	case $STATUS in
                # 接続失敗
		INACTIVE)
                        # もう一度WPSボタンを押す
			/sbin/wpa_cli -i wlan0 wps_pbc
			;;

                # 接続成功
		COMPLETED)
                        # LEDを点灯に戻して終了
                	echo "mmc0" > /sys/class/leds/led0/trigger
			exit 0
			;;
	esac
done

使い方

  • Raspberry Pi Zero WにUSB電源を接続してしばらく待つと、オンボードのLEDが短い周期で点滅し始めます。
  • すかさず、ルータのWPSボタン(各社呼び方がバラバラみたいです)を押したり、AndroidスマホWifiテザリング設定画面にある「WPSプッシュボタン」をタップしたりします。

f:id:moguno:20170830220945p:plain:w350
f:id:moguno:20170830220859p:plain:w350

  • 10〜20秒程度でWifi接続が確立し、オンボードLEDが点灯状態になります。