16
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Raspberry Pi Zero W】Wi-Fiクライアント/サーバ(AP)切り替え

Last updated at Posted at 2018-04-13

##概要
自宅ではWiFiのクライアント動作し、WiFiのない環境では自らWiFiのサーバ(アクセスポイント)になることで、いつでもラズパイにアクセスしたいと思い、以前、別の記事でWiFiドングルを2つ接続することで実現しました。
しかし、Zeroだと、USBポートも少ないし、消費電力的にも厳しいと思い、(手動ですが)簡単に切り替えられる仕組みを考えてみました。
自宅の環境(例えば、ファイルサーバ、Webサーバ等)をモバイルでも使用(公開)できて便利ですよ。

##構成イメージ
 自宅
  Wifiルータ(アクセスポイント)
   └ Raspberry Zero W(WiFiクライアント:wlan0:192.168.1.2)
   └ 端末(Wi-fiクライアント:192.168.1.100~200)

 外出先
  Raspberry Zero W(アクセスポイント:wlan0:192.168.2.1)
   └ 端末(Wi-fiクライアント:192.168.2.100~200)

##自宅設定(WiFiモード)
 それぞれだと思うので参考程度に。。

$ sudo vi /etc/network/interfaces
・・・
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
・・・
network={
        ssid="使用するSSID"
        psk="上記SSIDのパスワード"
}

##外出先設定の構築(APモード)
外出先設定を上書きしてしまうので、まずはバックアップしてから編集し、同様にバックアップ。

$ sudo cp -p /etc/network/interfaces ~/wifi_interfaces
$ sudo vi /etc/network/interfaces
・・・
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.2.1
netmask 255.255.255.0
$ sudo cp -p /etc/network/interfaces ~/ap_interfaces

アクセスポイントとDHCPサーバの環境構築は別の記事参照。
違いはwlan1でなくwlan0。

##切替
現在APモードとして動作している前提で、WiFiモードに切り替えます。

$ sudo systemctl disable hostapd
$ sudo systemctl disable isc-dhcp-server
$ sudo cp -p wifi_interfaces /etc/network/interfaces

$ sudo reboot

再起動後、WiFiモードになっていれば成功。次はその逆。

$ sudo systemctl enable hostapd
$ sudo systemctl enable isc-dhcp-server
$ sudo cp -p ap_interfaces /etc/network/interfaces

$ sudo reboot

再起動後、APモードになっていれば成功。
もう少し楽するため、スクリプト化。

$ vi ~/netch.sh
netch.sh
#!/bin/bash

if [ "$1" == "ap" ]; then
    sudo systemctl enable hostapd
    sudo systemctl enable isc-dhcp-server
    sudo cp -p /etc/network/interfaces /etc/network/interfaces.bak
    sudo cp -p ap_interfaces /etc/network/interfaces
elif [ "$1" == "wifi" ]; then
    sudo systemctl disable hostapd
    sudo systemctl disable isc-dhcp-server
    sudo cp -p /etc/network/interfaces /etc/network/interfaces.bak
    sudo cp -p wifi_interfaces /etc/network/interfaces
else
    echo "abort."
    exit
fi

cat /etc/network/interfaces

read -p "reboot ok? (y/N): " yn
case "$yn" in [yY]*) ;; *) echo "abort." ; exit ;; esac

sudo reboot

WiFiモードにする場合

$ ./netch.sh wifi
・・・
reboot ok? (y/N):y

APモードにする場合

$ ./netch.sh ap
・・・
reboot ok? (y/N):y

##応用
Raspberry Pi Zero W は Bluetooth が使用できるので、Bluetoothリモートシャッターで写真撮影を参考に、多少改造すれば、ボタン操作での切り替えも可能ですね。

16
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?