【RaspberryPi2B】USB無線子機TP-Link製TL-WN725Nとwi-fiを接続するのに苦戦した報告

今回はRaspberry Pi 2BにUSB無線子機である[TP-Link社製TL-WN725N](https://www.tp-link.com/jp/support/download/tl-wn725n/)のドライバをインストールするときに行ったことをまとめます。
他のサイトをいくつか参照していましたが、どれも5年以上前の記事ばかりであった上に、無線LAN接続自体の操作を一貫してまとめられたものが見当たらなかったためそれをここでまとめてしまおうという根端です。
初学者ですので間違いがありましたら指摘くださると助かります。

# 環境
* RaspberryPi 2 ModelB (ハード)
* TP-Link TL-WN725N (WirelessLAN※安い！)
* Linux 6.1.21-v7+　（Kernel version）

# 行うべきこと一覧（他記事参照）
* ラズパイのセットアップ（電源ケーブル・OSインストール・マウス・キーボード・モニター・有線LANを接続）
これについてはあらゆる記事がありますのでご自分で探してみてください。

**有線LANの固定IP化はこの記事のネットワーク接続-固定IP化を参照してください**

* WinSCP・RealVNC設定（おすすめ）
どちらも無料ですので是非お勧めします。参考記事をリンクします。
WinSCPはラズパイと使用しているPCのディレクトリを接続しファイルの移動を便利にするもの。

https://raspi-school.com/winscp/

WinSCPについては初期設定だと管理者権限が与えられていない故にファイルの操作が不可になっていますので、どうしてもファイルの入れ替えを行いたい場合はこちらを参考に。高度なサイトの設定はログイン画面[編集]→[設定]で表示されます。

![高度なサイトの設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3725072/bca664dc-4d49-68f0-1f04-17c5394cdeab.png)

https://qiita.com/daichi87gi/items/3edd5e702db47605df52

RealVNCはラズパイの周辺機器を接続せずに電源ケーブルとLAＮのみでリモートデスクトップを他デバイスで使えるものです。

https://www.indoorcorgielec.com/resources/raspberry-pi/raspberry-pi-vnc/

ここまでやると私と同じ環境になります。

# 本編

## 機器の接続
とりあえず機器を接続しましょう。何も起こらないはずです。
しかしながら、
```sh:sh
$ lsusb 
```
では
```sh:sh
pi@raspberrypi:~ $ lsusb
Bus 001 Device 004: ID 0bda:8179 Realtek Semiconductor Corp. RTL8188EUS 802.11n Wireless Network Adapter
Bus 001 Device 003: ID 0424:ec00 Microchip Technology, Inc. (formerly SMSC) SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Microchip Technology, Inc. (formerly SMSC) SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
```
とここでは `Bus 001` に`RTL8188EUS`とあり、これが今回のTL-WN725Nです。つまり認識はしていそう。
ラズパイに特化した無線子機は既にドライバをインストールしているようですが、今回買ったのはヤマダ電機で800円の格安商品であったため、やはりドライバのインストールは必須らしい...

## でかすぎる罠その１
[公式の製品ページ](https://www.tp-link.com/jp/support/download/tl-wn725n/)に`Installation Guide for Linux.pdf`があるためしっかり調べた人はこれをみてある程度作業をしたでしょうが、全くこれは**罠**です。

罠といっても一部の人には必要（かもしれない操作）ですが、ほとんどに人にとってはModify Kernelの操作は手間がかかりすぎます。おそらくデフォルトのカーネル設定では動作しないためにDriverSourceをコンパイルする必要があるため、その前段階としてのカーネル構築なのでしょう。

ただ、実際にはGitHubで公開されている公式と同じものをカーネル構築とコンパイル操作なしにインストールが可能でした。カーネル構築には非常に時間がかかるうえに、コンパイル操作がするっと上手くいくはずもなく、ただ沼るだけなので公式の手順にのっとるのは非常におすすめしません。（これに1日をつぶしました。）

**公式ガイドは無視する**

これが1つ目の罠の回避方法です。

## 実際の手順
### ドライバのインストール

https://note.com/kf34/n/n7c2f9a3e9725

で公開されている手順を参考にしています。
ドライバを公開してくださっている。

https://github.com/aircrack-ng/rtl8188eus

GitHubをクローンします。ここでホームディレクトリでコードを打つようにしてください。

```sh
$ cd ~
$ sudo apt update
$ sudo apt-get install git
$ git clone https://github.com/aircrack-ng/rtl8188eus
```
Cloneしたらそのディレクトリに入りビルドを行います。
```sh
$ cd rtl8288eus
$ sudo make && sudo make install
```
私はここでrebootしましたが、必要ないかもしれません。
rebootしてもまだ接続はできないはずです。
`↑↓`マークにカーソルを合わせても`no wireless interfaces found`となってしまっていると思います。
具体的には`iwconfig`と打つとネットワークの詳細が確認できます。
```sh
$ iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

wlan0     unassociated  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency=2.412 GHz  Access Point: Not-Associated   
          Sensitivity:0/0  
          Retry:off   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0
```
解決方法はBlacklistにドライバを追加することです。
```sh
$ echo 'blacklist r8188eu' | sudo tee -a '/etc/modprobe.d/realtek.conf'
```
出力は何もないはず。
```sh
$ cat /etc/modprobe.d/realtek.conf
```
で`blacklist r8188eu`と出力されていればOKです。
ここで、bracklistに入れるのは`r8188eu`と`8188eu`のどちらかのようです。どちらも入れると動作せず、誤った一方を入れても動作しなくなります。

カーネルモジュールをロードします。
```sh
$ sudo insmod 8188.ko
```
※`cd`してからずっとディレクトリは`rtl8188eus`です。

私の環境ではエラーがでました。
```sh
insmod: ERROR: couldn't load module "8188eu.ko": File exist
```
driver同士が戦っているらしいため以下のコマンドで解決できます。（なぜこのコマンドなのかはわからず）
```sh
$ rmmod 8188eu
```
再起動します。
```sh
$ reboot
```
すると、`↑↓`アイコンだった部分が
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3725072/604f2ced-3006-63b5-a0a0-0f01ec0aec61.png)
見慣れたWi-Fiになっているはずです。
問題の解決につながりそうなリンクを一応張っておきます。

https://github.com/mfruba/kernel/issues/4

念のためモジュールが正しくインストールされているかの確認をしましょう。
```sh
$ lsmod
```
これで`8188eu`が見つかればOKです。

## ネットワーク接続
### とりあえず接続
あともう一息です。既にWi-Fiアイコンをクリックしていれば、検知されているアクセスポイントが羅列されていると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3725072/d22e2565-67ae-98cb-962c-989129bcbeca.png)
これをクリックして普段と同様にSSIDとPWDを入れさえすれば接続が可能です。

### 固定IP化
ただ今回は毎回割り当てられているIPアドレスが同じでないとリモート接続が面倒になるため、ファイルに直接書き込むことで固定IP化を図ります。

https://qiita.com/forest1/items/49e9c3a6fd613a38be46

こちらの記事が分かりやすいですが、少々データが古いです。
ここに2025年2月現在で設定しておくと良いファイル設定を残します。
有線LAN接続時に固定IP化をしていると思いますが、もう一度記述しておきます。
ラズパイもしくは他のPCにて
```sh
> arp -a # PC
$ arp -a # raspi
```
すると
```sh: PC出力
インターフェイス: 略 --- 0x**
  インターネット アドレス 物理アドレス           種類
  192.168.11.1          **-**-**-**-**-**     動的
～～中略～～
  255.255.255.255       **-**-**-**-**-**     静的
```
と出力されます。`ipconfig`でも確かめられますが、
ルータのIPアドレスが192.168.11.1であることがわかります。
ここでリストされていないアドレスは未使用であるため、それ以外のアドレスは未使用ということになります。つまり固定化して良いことになります。この時、電源の入っていないデバイスについては表示されないためバッティングには気をつけてください。

今回は参考元記事に倣い
* 親機LANIP：192.168.11.1
* RaspberryPi eth0(有線)IP：192.168.11.2
* RaspberryPi wlan0(無線)IP：192.168.11.3
として設定します。

**/etc/network/interfaces**
現在は定義せずに使用が可能です。

**/etc/dhcpcd.conf**
こちらは定義が必要です。
```sh
$ sudo nano /etc/dhcp.conf
```
nanoを用いて以下を記述します。`
static domain_search=`は現在定義の必要はありません。
```sh
interface eth0
static ip_address=192.168.11.2/24
static routers=192.168.11.1
static domain_name_servers=192.168.11.1

interface wlan0
static ip_address=192.168.11.3/24
static routers=192.168.11.1
static domain_name_servers=192.168.11.1

noipv6
```
書き込めたら、`ctrl+X`→`y`→`enter`キーで保存ができます。

**/etc/wpa_supplicant/wpa_supplicant.conf**

```sh
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
```

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

network={
        ssid="使用するルータSSIDに置き換え"
        psk="パスワードに置き換え"
        key_mgmt=WPA-PSK
}
```
書き込めたら、同様に`ctrl+X`→`y`→`enter`キーで保存ができます。
SSIDが　ABCD-A123
パスワードが　qwerty9876
である場合、
```sh
        ssid="ABCD-A123"
        psk="qwerty9876"
```
このような形に置き換えてください。

### でかすぎる罠その２
実は私はここまでの操作を行ってもWi-Fiのマークはでるものの実際に**接続まではできていませんでした**。

よって何度も上のファイルの中身を見直したり、色んなところをいじくったり、途中まで構成していたカーネルのファイルが悪さをしていないかなど試行錯誤をするはめになりました。
しかし、12時間にも及ぶ格闘の末、ついに沼を脱出しました。

**解決のカギ**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3725072/385d72c6-f570-a8b0-04f6-c090fbe24a40.png)
[TL-WN725N(EU&US)_3.0_datasheet.pdf](https://static.tp-link.com/2020/202010/20201019/TL-WN725N(EU&US)_3.0_datasheet.pdf)

**！？！？**
> 150Mbps 2.4GHz

**2.4GHzのみ**だということをすっかり忘れていました。
`wpa_supplicant.conf`にSSIDとして記載していたのは5GHzの方...無様すぎて涙がでそう。
購入時には確認していたはずなのに...
罠その１で公式への嫌悪がマックスに達していたため製品ページのタブを閉じていたため発見が遅れてしまいました。
なんとなく他の電波の干渉を防ぐために5GHzの方が良いだろうとそっちの方に接続していたがよくありませんでした。

**製品仕様は確認しよう**

教訓その２です。

# まとめ
公式ガイドは無視しつつ製品仕様はしっかり確認するのが大事ですね。
10年前のデバイスをWi-Fi接続しようとする人はもういないかもしれませんが、私自身の備忘録として以上を残しておきます。