openHAB on Raspberry Pi: Appendix A
Raspberry Piの無線WiFi利用
今回はopenHABの動作とは本質的には関係ないのでおまけです。さらに手順が長くなるので2つに分けようと思います。
概略としてはこう分けようと思います。
- WiFiドングルをデバイスとして認識
- WPA2でアクセスポイントに接続
今回はWiFiドングルの認識をやります。
WiFiドングルをデバイスとして認識
Raspberry PiでWiFiを使っている人がいて、家にも1個使っていないのがあったので試そうと思いました。
デバイス認識などでとても参考になったのは以下のサイトです。
今回使ったのはWiFiドングルはこちらです。
(1) WiFiドングルを認識
制御のためのモジュールを入れたい。まずlsusbで現況確認します。
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 0789:0168 Logitec Corp. LAN-W150N/U2 Wireless LAN Adapter
Bus 001 Device 005: ID 413c:2105 Dell Computer Corp. Model L100 Keyboard
ここで分かったこと
- デバイスの名前がLAN-W150N/U2
- IDが0789:0168
(2) rt2800usbをmodprobeする
(i) モジュールをつっこむ
lsmodの出力がうまくHTML化できてないけど、とりあえずmodprobeで適切なモジュールが入ったことを確認してください。
$ sudo modprobe rt2800usb
$ lsmod
Module Size Used by
aes_generic 32497 0
arc4 1387 2
rt2800usb 12481 0
rt2800lib 48137 1 rt2800usb
crc_ccitt 1553 1 rt2800lib
rt2x00usb 11851 1 rt2800usb
rt2x00lib 43907 3 rt2x00usb,rt2800lib,rt2800usb
mac80211 251866 3 rt2x00lib,rt2x00usb,rt2800lib
cfg80211 180452 2 mac80211,rt2x00lib
snd_bcm2835 21505 0
snd_pcm 80650 1 snd_bcm2835
snd_page_alloc 5347 1 snd_pcm
snd_seq 59372 0
snd_seq_device 6916 1 snd_seq
snd_timer 21638 2 snd_seq,snd_pcm
snd 57253 5 snd_timer,snd_seq_device,snd_seq,snd_pcm,snd_bcm2835
evdev 9470 0
(ii) /etc/modules を編集
毎回起動時に読み込まれるようにします。私の設定ファイルはこんな感じです。
----
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.
snd-bcm2835
rt2800usb
----
これで起動時には読み出されるはず。ここまではよかったのですが、再起動後に指定のモジュールは入るけどネットワークのデバイスがiwconfig, ifconfigでもまったく見えなくて途方にくれました。
これをなんとかするには/etc/modprobe.d/に設定を追加する必要があります。
(iii) /etc/modprobe.d/usb-lan.conf の作成
実はmodprobe.d以下はよくわかっておりません。でもusbのIDを見てデバイスを認識しているっぽいということで以下のようにしました。usb-lan.confの中身は以下のようになります
install rt2800usb /sbin/modprobe --ignore-install rt2800usb; /bin/echo "0789 0168" > /sys/bus/usb/drivers/rt2800usb/new_id
(iV) /etc/udev/rules.d/70-persistent-net.rules を修正?確認?
修正内容を失念したのですが、以下のようなものになってます。
----
# USB device 0x2019:0xed14 (usb) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:01:8E:DC:C9:9B", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0"
# USB device 0x:0x (rt2800usb) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:01:8e:dc:c9:9b", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan1"
----
2行とも同じような内容に見えますね。1行消してしまってもいいかもしれません
(V) 再起動。
iwconfigには無事にwlan1が出現
lo no wireless extensions.
eth0 no wireless extensions.
wlan1 IEEE 802.11bgn
ESSID:off/any Mode:Managed Frequency:2.452 GHz Access Point: Not-Associated
Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off Power Management:on
まとめ
これでデバイスが認識できました。次回はwpa_supplicantとの合わせ技です