ルータのボタンをワンプッシュ!Raspberry Pi Zero WのWifi接続を簡単に切り替える方法
第1回 全日本ラズパイゼロW争奪戦に運良く勝利して、Raspberry Pi Zero Wを手に入れました。
普段はPimoroniのScroll pHat HDを装着して、無線ルータ経由で為替とか明日の天気とかを取ってきてだらだら流しています。
結構実用的です。
これをテザリングしたスマホに接続して飲み会でデモ(ドヤぁ!ええやろぉ!)をしたかったのですが、いちいちRaspberry Pi Zero Wにコンソールを繋いで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
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