空飛ぶロボットのつくりかた

ロボットをつくるために必要な技術をまとめます。ロボットの未来についても考えたりします。

Raspberry Pi Zero W で遊んでみる(3)~アクセスポイント化~

やりたいこと

WIFI環境がない場所でもひとつのraspi zero wをアクセスポイントとして通信がしたい

なので、raspi zero w をアクセスポイント化にトライ

教科書

MACアドレスを調べる

pi@raspberrypi:~$ iw dev

udev ruleを追加

ファイルを作成

$ sudo nano /etc/udev/rules.d/70-persistent-net.rules

以下の"b8:27:eb:ff:ff:ff"の部分を先に調べたMACアドレスに書き換えて上のファイルに記述

SUBSYSTEM=="ieee80211", ACTION=="add|change", ATTR{macaddress}=="b8:27:eb:ff:ff:ff", KERNEL=="phy0", \
  RUN+="/sbin/iw phy phy0 interface add ap0 type __ap", \
  RUN+="/bin/ip link set ap0 address b8:27:eb:ff:ff:ff"

Dnsmasq and Hostapdのインストール

$ sudo apt-get install dnsmasq hostapd

Dnsmasq and Hostapdのためのファイル設定

3つのファイルを書き換える

1. /etc/dnsmasq.conf

interface=lo,ap0
no-dhcp-interface=lo,wlan0
bind-interfaces
server=8.8.8.8
domain-needed
bogus-priv
dhcp-range=192.168.10.50,192.168.10.150,12h

2. /etc/hostapd/hostapd.conf

以下のssidとpassphraseを自分の好きな名前に設定する。" "で囲む必要はない。

ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
interface=ap0
driver=nl80211
ssid=YourApNameHere
hw_mode=g
channel=11
wmm_enabled=0
macaddr_acl=0
auth_algs=1
wpa=2
wpa_passphrase=YourPassPhraseHere
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP

3. /etc/default/hostapd

DAEMON_CONF="/etc/hostapd/hostapd.conf"

Interfaces Fileの修正

1. /etc/wpa_supplicant/wpa_supplicant.conf

使用できるWIFIがあればそのWIFISSIDとパスワードを設定

country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="YourSSID1"
    psk="YourPassphrase1"
    id_str="AP1"
}

2. /etc/network/interfaces

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
auto ap0
auto wlan0
iface lo inet loopback

allow-hotplug ap0
iface ap0 inet static
    address 192.168.10.1
    netmask 255.255.255.0
    hostapd /etc/hostapd/hostapd.conf

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface AP1 inet dhcp

起動時の設定

/home/piに以下シェルスクリプトを作成

pi@raspberrypi:~$ cat ./start-ap-managed-wifi.sh
#!/bin/bash
sleep 30
sudo ifdown --force wlan0 && sudo ifdown --force ap0 && sudo ifup ap0 && sudo ifup wlan0
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 ! -d 192.168.10.0/24 -j MASQUERADE
sudo systemctl restart dnsmasq

実行権限を付加

pi@raspberrypi:~$ chmod +x ./start-ap-managed-wifi.sh

起動時に実行するために、cronに設定

$ sudo crontab -e

以下を最終行に追加

@reboot /home/pi/start-ap-managed-wifi.sh

最後に...

リブート!

これで母艦PCのwifiを見ると設定したSSIDが見えるはず!!

コメント

wifi環境がない場所でsshで作業できるのは便利 ♪

おまけ

sshのホスト名を変更する方法

$ sudo -e /etc/hostname
変更する
$ reboot

再起動するとssh -X pi@変更後のホスト名.localで接続可能

udevについて

有線LANを接続する方法

USB OTG

名前解決

参考