Raspberry Pi 3の内蔵WiFiを無効にしてUSB WiFiアダプタを利用する

Raspberry Pi 3 Model Bの内蔵WiFiは、個体差があるかもしれませんが割と貧弱なものなので、代わりにいつも外付けのUSB WiFiアダプタ([ELECOM WDC-150SU2MBK](http://www2.elecom.co.jp/network/wireless-lan/adapter/wdc-150su2m/))を使っています。
(以前、内蔵WiFiが貧弱なことに気付かないでルーターが壊れてしまったかと思い、ルーターを買い換えてしまいました😭)

今回の記事では、Raspberry Pi 3の内蔵WiFiを無効にする方法と、USB WiFiアダプタを利用してアクセスポイントに接続する方法を紹介します。

(2017/05/10 修正) `ifconfig` コマンドの代わりに `ip` コマンドを利用するようにしました。

# 内蔵WiFiを無効にしてUSB WiFiアダプタを利用する理由
- 内蔵WiFiはアクセスポイントから少し距離が離れただけで不安定になったりする
- 内蔵WiFiを無効にしないままUSB WiFiアダプタを利用しようとすると、内蔵WiFiとUSB WiFiアダプタが**同時に同一のアクセスポイントに接続する**動作をしてしまう
    - Zeroconfを用いたSSH接続(例: `ssh pi@raspberrypi.local`)などする場合に、内蔵WiFi経由で繋がる可能性もあり、USB WiFiアダプタ経由で繋がるか怪しくなる
    - 内蔵WiFiを利用している分、無駄な電流(実測値0.02A前後)が流れることになる

|無効化設定なし(内蔵WiFi + USB WiFiアダプタ)|無効化設定あり(USB WiFiアダプタのみ)|
|---|---|
|![P4300985.jpg](https://qiita-image-store.s3.amazonaws.com/0/137045/aa0695bd-fd96-7d91-9c3c-6bcd7c27db0b.jpeg)|![P4300981.jpg](https://qiita-image-store.s3.amazonaws.com/0/137045/78c5f222-9bc4-fcd2-6541-5d7db70bbcb8.jpeg)|



# 動作環境
- Raspberry Pi 3 Model B
    - Raspbian Jessie Lite 2017-04-10
        - イメージをMicroSDに書き込んだ後、MicroSDのルートディレクトリに`ssh`という名前で空のファイルを作成
            - 詳しくは[Raspberry PiとMac or Windows PCを有線で直接繋いでさくっとSSH接続する](http://qiita.com/mascii/items/7d955395158d4231aef6)などを参照
- USB WiFiアダプタ: [ELECOM WDC-150SU2MBK](http://www2.elecom.co.jp/network/wireless-lan/adapter/wdc-150su2m/)
    - Raspbian上で追加のドライバが不要
    - 安価(700〜800円程度)
    - チャンネル 2.4GHz : 1～13ch
    - 内蔵WiFiよりもちゃんと電波が飛び、安定している印象です

# 内蔵WiFiを無効にする
ELECOM WDC-150SU2MBKをRaspberry Piに挿入していない状態から始めていきます。

まず、有線LANでSSH接続をします([Raspberry PiとMac or Windows PCを有線で直接繋いでさくっとSSH接続する](http://qiita.com/mascii/items/7d955395158d4231aef6)などを参照)

内蔵WiFiを無効にする前に、 `ip link show` を確認してみます

```text:Raspbian
pi@raspberrypi:~ $ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether b8:27:eb:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DORMANT group default qlen 1000
    link/ether b8:27:eb:xx:xx:xx brd ff:ff:ff:ff:ff:ff
```

`wlan0` があるはずです(ない場合は、お持ちのボードが実はRaspberry Pi **2** Model Bなどだったりするかもしれません。**2**であっても同様の設定でWDC-150SU2MBKを利用できます)

以下のコマンドをRaspbian上で実行し、 `/etc/modprobe.d/raspi-blacklist.conf` に内蔵WiFiを無効にする設定を追記します

```
cat << EOF | sudo tee -a /etc/modprobe.d/raspi-blacklist.conf
#wifi
blacklist brcmfmac
blacklist brcmutil
EOF
```

ここで `ip link show` してもまだ `wlan0` が出てきますので、再起動をします

```text:Raspbian
pi@raspberrypi:~ $ sudo reboot
```

再度、有線LANでSSH接続し、 `ip link show` で `wlan0` がないことを確認してみましょう

```text:Raspbian
pi@raspberrypi:~ $ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether b8:27:eb:xx:xx:xx brd ff:ff:ff:ff:ff:ff
```

# WDC-150SU2MBKをRaspberry Piに挿入
いったんシャットダウンをします

```text:Raspbian
pi@raspberrypi:~ $ sudo halt
```

WDC-150SU2MBKをRaspberry Piに挿入し、再度電源を投入します。
有線LANでSSH接続し、 `ip link show` を確認します

```text:Raspbian
pi@raspberrypi:~ $ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether b8:27:eb:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000
    link/ether bc:5c:4c:xx:xx:xx brd ff:ff:ff:ff:ff:ff
```

`wlan0` がまた出てきましたが、link/etherの右に書いてあるMACアドレスが先ほどのものと異なっているはずです。
MACアドレスの先頭6桁はベンダー識別子となっており、 `b8:27:eb` がRaspberry Pi Foundationの識別子、 `bc:5c:4c` がELECOMの識別子となっています(https://mac.uic.jp/ で確認できます)

|`b8:27:eb`|`bc:5c:4c`|
|---|---|
|<img width="312" alt="b827eb.png" src="https://qiita-image-store.s3.amazonaws.com/0/137045/ae13cb89-e997-235a-ed70-d574c9072fca.png">|<img width="321" alt="bc5c4c.png" src="https://qiita-image-store.s3.amazonaws.com/0/137045/a720862c-2eb6-794a-8682-c285838fc16e.png">|

# SSIDとパスフレーズを設定する
内蔵WiFiもですが、WDC-150SU2MBKは2.4GHz帯のみ利用できます。
ルーターのデフォルトの設定では、2.4GHz帯のSSIDにはgやGといった文字が含まれていることが多いです。

`(ssid)`, `(passphrase)` を置き換えて以下のコマンドをRaspbian上で実行します

```
sudo sh -c 'wpa_passphrase (ssid) (passphrase) | grep -v "#psk=" >> /etc/wpa_supplicant/wpa_supplicant.conf'
```

パスフレーズがない場合は、[Life with IT - Raspberry Pi 3でパスフレーズなしのWi-Fiアクセスポイントに接続する設定(Raspbian Jessie Lite)](http://l-w-i.net/t/raspbian/wifi_001.txt)を見て設定してください(自己責任でお願いします)

# WiFi経由の接続に切り替える

再起動をし、有線LANのケーブルを抜きます

```text:Raspbian
pi@raspberrypi:~ $ sudo reboot
```

PCとRaspberry Piが同じネットワークに繋がっていて、適切に設定されていればZeroconfを用いるかRaspberry Piに割り当てられたIPアドレスを調べるなどしてSSH接続ができるはずです

```text:macOS
$ ssh pi@raspberrypi.local
```

# 参考サイト
[Raspberry Pi 公式フォーラム - How to disable the Pi3's WLAN & Bluetooth ?](https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=138610)