wifiの設定 - HondaLab/Robot-Intelligence GitHub Wiki
ロボットと基地DebianPCは無線LANでつなぐ. 無線LANの設定は
- WPA2 による認証
- IPアドレス設定
の2つが必要である. スマホなどの無線LAN接続ではDHCPによる自動アドレス割当が行われるが,ここでは固定IPをコマンドで設定する方法を示す.
インターネットに接続する場合はこの他に
- DNSの設定
- routeの設定
が必要となる. ロボットに固定IPアドレスを割り振って直接接続する場合は,3,4の設定は必要ないが,1,2の設定は最低限必要である.
WPA2認証を行うためには,
wpa_supplicant というコマンドをつかう. wpa_supplicantがインストールされていない場合は下記の様にインストールする必要がある.
apt-get install wpasupplicant
つぎに
暗号化されたpassphraseを生成して、
ファイルに保存する. すでに /etc/wpa_supplicant.conf ファイルが存在していたら,ファイル名を別のものにする必要があるので注意する.
cd /etc/wpa_supplicant
wpa_passphrase ESSID PASSPHRASE > wpa_supplicant.conf
もちろん ESSIDとPASSPHRASEは、接続しようとする無線LANに対応したものを用いる.
ちなみにESSIDを確認するには
iwlist インターフェイス名 scan | grep ESSID
を実行すれば,その場所でのWi-FiのESSIDを調べることができる.
wpa_supplicant.conf の内容例は下記のような感じになる。
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
ssid=ESSID
#psk=PASSPHRASE
psk=abcdefg12345xxx----------------
}
pskは暗号化されている. #psk=PASSPHRASE の行はそのままでも認証に支障はないが,削除したほうが,セキュリティーは高くなる.
wpa_supplicantは複数実行できない.
過去に実行されたwpa_supplicantが残っている可能性があるので、killallする。
killall wpa_supplicant
wpa_supplicantを起動する.
使うインターフェイス名が wlan0 の例を下記に示す. wpa_passphraseコマンドでつくったwpa_supplicant.confファイルを指定する。
/sbin/wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf
インターフェイス名がwlan0ではない場合は,iwconfigコマンドなどでインターフェイス名を確認してそれを指定する. 無線LANは"w"ではじまるインターフェイス名である. ちなみに有線LANは"e"ではじまるインターフェイス名である.
認証の確認
iwconfigを実行してESSIDのところに下記のようにアクセスポイントのESSIDが表示されれば認証が成功している.
wlx2cb05d72a0a6 IEEE 802.11 ESSID:"xxxx"
Mode:Managed Frequency:2.462 GHz Access Point: xx:xx:xx:xx:xx:xx
Bit Rate=54 Mb/s Tx-Power=20 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=59/70 Signal level=-51 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:2 Invalid misc:25676 Missed beacon:0
IPアドレスの設定
ifconfigコマンドを用いて
ifconfig インターフェイス名 172.16.7.xxx netmask 255.255.255.0
172.16.7.xxxというプライベートIPアドレスを用いた例を示した. xxxの部分は各インターフェイス固有のアドレス(0 〜 255)を用いる. 重複はできない.重複してアドレス番号が用いられた場合,そのネットワーク全体が停止する.
netmask 255.255.255.0 は最後の8bitがホストアドレスで,それより上位の桁がネットワークアドレス であることを示す.
スクリプトを用いて認証とアドレス設定を一度に実行する.
上記一連のコマンドなどを,下記のようなスクリプトファイルを用意しておいて, それを実行するようにすれば,起動の度にWi-Fi認証やアドレス設定の手間が大幅に簡略化できる.
#!/usr/bin/sh
intf=インターフェイス名
addr=172.16.7.xxx
router=172.16.7.yyy
network=172.16.7.0/24
mask=255.255.255.0
dns=8.8.8.8
killall wpa_supplicant
sleep 1
wpa_supplicant -B -i $intf -c /etc/wpa_supplicant/wpa_supplicant.conf
sleep 1
ifconfig $intf $addr netmask $mask
sleep 1
route add -net $network $intf
sleep 1
route add default gw $router
sleep 1
echo "nameserver $dns" > /etc/resolv.conf
上記の例ではrouterの設定とDNSの設定も行っている. ローカルネットだけで運用する場合には,それらは必要なく,wpa_supplicantとifconfigに関する部分だけで十分である.
上記のスクリプトをwpa.shというファイルに保存したとする.
su
chmod u+x wpa.sh
とrootの実行パーミッションを付加しておけば,
./wpa.sh
と実行するだけで,一連のWi-Fi設定が自動的に実行される.
ネットワーク接続の確認
ping コマンドを用いて接続先との通信が確立されいるかどうか確認する.
ping 172.16.7.yyy
1秒おきに通信速度が通知される. Ctrl-Cで停止することができる.