ラズパイ(Raspberry Pi Zero W)とWiFiの接続が定期的に切れる問題に対する対処法です。
ググるとifconfig wlan0 up
をする方法やPower Management
を変更する方法が出てきますが、私の場合はこれでは解決に至りませんでした。。
対処法
#!/bin/bash
# pingの宛先(192.168.0.1)は環境に合わせてください
ping -c 1 192.168.0.1>/dev/null
if [[ $? -ne 0 ]]; then
# GUIによるWiFiのON/OFFの操作に該当するコマンド
sudo rfkill block wifi
sleep 5
sudo rfkill unblock wifi
fi
上記シェルスクリプトをcron
で毎分実行させます。
# クーロンの編集
crontab -e
# 以下の設定を記載する(...はファイルへのパス)
* * * * * /.../reconnect_wifi.sh
この方法(クーロンで毎分起動する方法)だと最大1分程度接続が切れたまま放置されてしまうので、while
文で任意の秒数ごとに監視するスクリプトに変更するなどしても良いと思います。その場合、ラズパイの電源を入れたタイミングで自動起動する様にサービス化などをすると良いと思います。(今回はサービス化などが面倒だったのでクーロンを使いました。)
やってること
ping
でルーターに向けて疎通を確認し、繋がらない場合はrfkill
コマンドでWiFiの落とし上げを行なっています。
rfkill
コマンドによる処理は、ラズパイ内でWiFiをOFF → ON
する操作に該当します。(下記画像内のTrun Off Wi-Fi
をクリックする操作)
(画像: https://zenn.dev/chantakan/articles/babdd4a884df8c)
私が検証した際にifconfig wlan0 up
などでは接続が戻りませんでしたが、ラズパイ内でWiFiの落とし上げを行うと繋がる様になりました。そのため、ラズパイ内のGUIで行っている処理に該当するコマンドを探して実装した次第です。
最後に
ラズパイは初期セットアップが終わるとssh接続で使うことが多いかと思います。そうした際に接続が切れていて電源の落とし上げが必要になるのは非常に不便です。
なぜ接続が切れてしまうのか?という点は正直よく分かりませんが、上記回避策によって「繋がらない!」と感じることは無くなりました。
本記事が少しでも参考になれば幸いです。