複数のWi‑Fiアクセスポイントを事前登録し、移動先で自動接続
Raspberry Pi Zero Wには、複数のWi‑Fiアクセスポイントを事前登録し、移動先で自動接続させられます。
Raspberry Pi Zero WやRaspberry Pi Zero 2W等は超小型で運びやすいのですが、面倒な事に有線LANポートは無く、MicroUSBしかなく、2つあるうち一つは電源。もう一つあるが間隔が狭く、USBメモリ等直差し出来ない。結局USBポートやUSBーLANに有線LANを持ってウロウロする。ついでにUSBマウスにUSBキーボード・・・これじゃ、モバイルなんて言えない。
また、行った先で、上記の付帯品を持っていなかったらWIFIにも接続できず・・・お手上げ。そんな代物(ポンコツ)を事前にWFIアクセスポイントとパスワードが分かってたら、登録しておいてポンと接続。これが理想です。兎に角毎回イライラするzero系は、ストレスが溜まる代物ですけど、何故か沢山あるので使いたい!使うのであれば便利に効率よくしたい!という願望があります。で、今回は自宅で設定したRaspberry Pi Zero Wを別の場所に持って行くので、事前に分かっていたAPとPWを登録しておいたのに接続できなくて、自宅とその場所を何度も往復した事を書いています。(アー糞長かったな)

最初に起動して、Wifi接続できず・・・起動して、IP探すも無し。画面無い、マウス無い、キーボド無いの3重苦状態からどうしたのか?
一度戻ってモニターを持ってきます。微妙な時間が過ぎるくらいの距離だったわけで。モニター接続して「起動」・・・IP:127.0.0.1・・・よく見る奴です。自分自身のIPです。(ループバックアドレス)
うぅ!USBLAN接続(MicroUSB端子接続できる奴)を取りにまた戻ります。・・・・その時に有線LAN(長い奴15m)も一緒に。
今度は、接続できたようです。事前にこの場所のAPとPWを登録しておいたのに、何故接続できなかったのか?疑問です。
起動時に登録済APへ接続できなかった理由
登録済みでも、自動接続が有効とは限りません。また、登録済みというだけでは接続成功は保証されません。
考えられる原因:
connection.autoconnectが無効- 保存されたパスワードが違う
- 起動時にアクセスポイントへ到達できなかった
- Wi‑Fiがブロックされていた
- WPA方式が一致しなかった
- Wi‑Fi地域が未設定だった
- 別の登録済みWi‑Fiが優先された
当時の正確な原因はログで確認します
sudo journalctl -b -u NetworkManager --no-pager |
grep -iE 'TP-LINK|wlan0|wifi|fail|error|auth|secret'
アホみたいにLOGが出てきます。アホみたいに記録されています。
前回起動時:
~ $ sudo journalctl -b -1 -u NetworkManager --no-pager | grep -iE 'TP-LINK|wlan0|wifi|fail|error|auth|secret'
Specifying boot ID or boot offset has no effect, no persistent journal was found.
『ブートIDまたはブートオフセットを指定しても効果はありません。永続ジャーナルが見つかりませんでした。』
何言っているのか?わかりません。解らないことは無駄です。
複数のWi‑Fiを自動接続対象にする
複数の接続設定に実行できます。
sudo nmcli connection modify "アクセスポイントを書く" \
connection.autoconnect yes \
connection.autoconnect-priority 10 \
connection.autoconnect-retries 0
こうやって、複数のAPを登録していきます。autoconnect-retries 0は継続的に接続を再試行する設定です。
これですと0回、アホなWIFI-APには一万回ぐらい書いてやりたくなりますが、無駄ですので、そこそこに。
設定確認:
nmcli -f NAME,TYPE,AUTOCONNECT,AUTOCONNECT-PRIORITY connection show
NAME TYPE AUTOCONNECT AUTOCONNECT-PRIORITY
Wired connection 1 ethernet yes -999
Buffalo-G-3270 1 wifi yes 10
lo loopback no 0
netplan-wlan0-***** wifi yes 0
TP-******* wifi yes 10
WAV****-**** wifi yes 10
こんな感じで登録してあるAP一覧が出てきます。ここで安心してはダメです。
接続先の選択基準
NetworkManagerは、必ずしも電波が強い順だけで選びません。
- 到達可能な登録済みWi‑Fiが候補
autoconnect-priorityが高い接続を優先- 優先度が同じ場合は、最近使った接続なども考慮
優先順位を指定する例:
sudo nmcli connection modify "**-****_****" \
connection.autoconnect-priority 100
sudo nmcli connection modify "*****-G-*** *" \
connection.autoconnect-priority 50
ブルー文字の所の数値が大きい方が優先されます。場所ごとに接続先が1つしか届かない場合は、全て同じ優先度でも構いません。
移動先のWi‑Fiを事前登録する
アクセスポイントが現在届かない場所でも、SSIDとパスワードが分かっていれば登録できます。
sudo nmcli connection add \
type wifi \
ifname wlan0 \
con-name "移動先WiFi" \
ssid "SSID名"
sudo nmcli connection modify "移動先WiFi" \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.psk "パスワード" \
connection.autoconnect yes \
connection.autoconnect-priority 10 \
connection.autoconnect-retries 0 \
ipv4.method auto
移動先でPiの電源を入れると、その場所で受信可能な登録済みWi‑Fiへの自動接続を試みます。
ipv4.method autoは、自動接続を有効にします。最重要項目です。
connection.autoconnect-priority 10 \は、複数のWi‑Fiが利用できる場合の優先順位です。数値が大きい接続が優先されます。
connection.autoconnect-retries 0 \は、接続失敗後も継続して再試行します。移動してWi‑Fi圏内に入った際の接続に有効です。
なお、実際に接続するには、次の設定も正確である必要があります。
ssid "SSID名"
wifi-sec.key-mgmt wpa-psk
wifi-sec.psk "パスワード"
autoにしてなかったのよ。だから事前登録しても自動に接続できなかったのよ。登録したら自動接続位しなきゃならんの解れよ。って機械に言っても、猫に言っても無駄ですけど。猫なんか丁寧に説明しても理解してないからな。