Ubuntu Server 22.04をインストールしたラズパイ4(Raspberry Pi 4B)にUSB wifi アダプタを取り付け、無線通信をする方法を紹介します。
家電量販店などで販売されているUSB wifi アダプタは、MicrosoftのWindowsやAppleのMacに対応している記載が見られますが、Linux(UbuntuはLinuxのディストリビューション)について書かれているものは稀です。
WindowsやMacの場合はUSB wifi アダプタに付属しているOSに対応したドライバーをインストールすれば使えるようになりますが、Linuxの場合は付属していないため、自分でドライバーを探し、インストールを頑張らなければなりません。
さらには、USB wifi アダプタのチップセットにあったドライバーでなければwifiに接続することができないことに加え、Linuxのカーネルのバージョンなど環境にも影響を受けます。
そのため「とりあえずUSB wifi アダプタを買ってみて、ドライバーを探して入れてみたけど使えなかった」ということはよく起きているようです。
筆者の環境にて、ラズパイにUSB wifi アダプタを接続し、無線LANルータと通信ができたため、成功例として記事にまとめます。
どのような時に使うか
ラズパイ4にはWifi機能が内蔵されています。そのためUSB Wifi アダプタを使わずとも無線通信を行うことができます。
しかし、次のようなシチュエーションでUSB Wifi アダプタを使えると便利です。
シチュエーション | 内容 |
無線通信の安定性向上 | ラズパイ内蔵Wifi:機能OFF USB Wifiアダプタ:通信 |
外出先での開発 | Wifi①:ラズパイでAPを立てて、開発用PCと直接通信をしてSSHで開発。 Wifi②:スマホでテザリングし、gitなどでダウンロード(インターネット接続) |
移動ロボットに搭載 | Wifi①:ラズパイでAPを立てて、他のロボットなどと通信。 Wifi②:インターネット接続 移動する物体に有線が不要になる。犬の散歩をしなくてよく、ロボット動作時にケーブルの抜き指しをしなくていい。 |
デバイス・環境
ラズパイ、OS、USB Wifi アダプタは次のものを使用しています。
USB wifi アダプタは国内メーカのエレコム株式会社製を選んでいます。Wi-Fi 5規格で2.4GHz帯, 5Ghz帯(W52/W53/W56)を備えています。
- Raspberry Pi 4 Model B 4GB
- Ubuntu 22.04(Linux raspberrypi 5.15.0-1075-raspi)
- エレコム Wi-Fi 無線LAN 子機 WDC-867DU3S2
ドライバーは「morrownr/88x2bu-20210702」を使います。本記事を読む際、Ubuntuのバージョンが異なっている場合も多いと思いますので、Kernelのバージョンが対応しているかを確認しておきましょう。
Ubuntuとlinuxカーネルのバージョンは次で確認できます。
uname -r
lsb_release -a
ドライバーのインストール
ラズパイにドライバーをインストールする手順を記載します。
まずはシステムをアップグレードします。アップデートがされた場合は再起動をしておきます。
sudo apt update && sudo apt upgrade
sudo reboot
USB wifi アダプタをUSBコネクタに接続します。今回はラズパイの中央下にあるUSB3.0に接続しています。
wifiとして認識されているかを確認します。今回の使っているUSB wifiアダプタに対応したドライバーをまだインストールしていないため、lo, eth0, wlan0の3つが表示されているはずです。
ip link
-----
1: lo: (略)
2: eth0: (略)
3: wlan0: (略)
Wifiとしては認識されていませんが、USBデバイスとしては認識されているかを確認します。
lsusb
-----
(略)
Bus 001 Device 003: ID 0bda:b812 Realtek Semiconductor Corp. RTL88x2bu [AC1200 Techkey]
次に必要なパッケージをインストールします。
sudo apt install -y build-essential dkms git iw
そしてドライバーをダウンロードして、インストールしていきます。
mkdir -p ~/src
cd ~/src
git clone https://github.com/morrownr/88x2bu-20210702.git
cd ~/src/88x2bu-20210702
sudo sh install-driver.sh
-----
(略)
Do you want to edit the driver options file now? (recommended) [Y/n] n
Do you want to apply the new options by rebooting now? (recommended) [Y/n] y
Connection to raspberrypi.local closed by remote host.
Connection to raspberrypi.local closed.
インストールにおいて2つの質問が表示されます。今回は1つ目をn、二つ目をyにしてます。
ドライバーが正しくインストールできているかを確認します。以下のようにコメントが表示されればインストールできています。
find /lib/modules/`uname -r`/ -name "88x2bu.ko"
-----
/lib/modules/5.15.0-1075-raspi/updates/dkms/88x2bu.ko
Wifi認識されているかを確認します。うまくいっていれば、4つ目にwlxから始まるインターフェース名が表示されています。
ip link
-----
1: lo: (略)
2: eth0: (略)
3: wlan0: (略)
4: wlx(略):(略)
wlxから始まるインターフェース名は、systemdが採用している命名規則に従った固定的な名前(wlx + MACアドレス)です。
以上でUSB wifi アダプタとして繋げることができました。
接続先の設定
次に無線Wifiルーターに接続するためにnetplanの設定をします。
まずnetplanの設定ファイルを確認します。次のようなファイルがあるはずです。
ls /etc/netplan/
-----
50-cloud-init.yaml
念のためファイルのバックアップを取ります。
sudo cp /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.backup
ファイルを編集します。ここではテキストエディタにnanoを使っています。
sudo nano /etc/netplan/50-cloud-init.yaml
内蔵Wifi(wlan0)の書き方を参考にして、USB wifi アダプタの接続先を追加します。インデントを忘れずに合わせてください。
network:
version: 2
renderer: networkd # または NetworkManager (ファイルで確認)
ethernets:
eth0:
dhcp4: true
optional: true
# (eth0に関する他の設定があればそのまま)
wifis:
wlan0: # ◆ 既存の内蔵Wi-Fi設定 (内容は変更しない)
dhcp4: true
optional: true
access-points:
"Wi-Fi_SSID":
password: "Wi-Fiパスワード"
# ↓↓↓ ここからが追加する設定 ↓↓↓
wlx************: # ip linkで確認したインターフェース名を入力
dhcp4: true # IPv4アドレスをDHCPで取得
optional: true # 起動時に接続できなくてもエラーにしない
access-points:
"Wi-Fi_SSID": # 接続したい自宅のSSIDを入力("Wi-Fi_SSID"を書き換え)
password: "Wi-Fiパスワード" # そのパスワードを入力("Wi-Fiパスワード"を書き換え)
# ↑↑↑ ここまでが追加する設定 ↑↑↑
編集を終えたら、Ctrl + Xを押し、次にY、最後にEnterでファイルを保存し、nanoを終了します。
そしてファイルの変更をシステムに反映させます。この反映でUSB wifi アダプタは設定した無線LANルータへの接続を試みます。問題なければIPアドレスを取得できます。
sudo netplan apply
IPアドレスが取得できたかを確認します。showの後にip linkで取得したインターフェース名を入力して実行します。inetの後にIPアドレスが表示されれば、接続は成功です。
ip addr show wlx************ # (インターフェース名:wlx + MACアドレス)
-----
inet 192.168.10.112/24 (略)
次のコマンドでもipアドレスを取得できているかを確認できます。
ip addr
以上で、ラズパイ4(Ubuntu22.04)でUSB wifi アダプタを使い、Wifi接続できました。
まとめ
上記の手順で、USB Wifi アダプタのドライバーをインストールし、無線LANルータと通信することができました。
ラズパイに有線LANを接続することができない、また接続すると邪魔になってしまう場合に使える手段の一つです。ただWifiを2つ動かしたときに、通信環境が不安定になることもありますので状況に応じて使い分けましょう。
<注意点>
- Wifiの周波数ですが、5Ghz帯のW52/W53は電波法により野外での使用は禁止されています。屋外で使用する場合は注意してください。
- ラズパイの環境は上記で示したとおりですが、OSをインストールした直後に実施したわけではありません。いくつかのソフトウェアがインストールされた状態で行っています(ros2 Humbleなど)。
- 筆者は開発用PCとラズパイ内蔵wifiで無線LANルータを介してssh接続して、ドライバーのインストール、netplanの設定をしています。
USB wifi アダプタの接続後、rebootし、sshで接続しようとした際、うまく接続できない場合があります。
その際は「ssh user名@reboot前に確認したIPアドレス」を使って接続を試みます。 - 通信がうまくいくかは環境にも左右されます。本構成でうまくいかない可能性もありますので、ご留意ください。