Raspberry Pi の Wi-Fi がつながりにくくなったとき

Raspberry Pi

Raspberry Pi の Wi-Fi がつながりにくくなったときのチェックポイントをまとめておきます。

以下の環境で動作確認をしています。
環境: Raspberry Pi 3 model B+, buster, Windows パソコン

背景 ラズパイの Wi-Fi が繋がりにくくなった!

日頃、Raspberry Pi を Wi-Fi 接続で自動起動させて活用しています。
ところが最近、Raspberry Pi の Wi-Fi 接続が安定しなくなってきました。起動時にネットワーク接続に成功するのが、2~3回中1回といった状態になりました。

自動起動用の Raspberry Pi には通常、無線 LAN 経由で、別の Windows パソコンなどからリモートデスクトップでアクセスしています。
Wi-Fi 接続に失敗すると、その間、Raspberry Pi 側の操作はリモートでは何もできなくなります。画面を確認することもできません。リモート接続では原因の特定が特に難しくなります。
かといって、たまたま無線 LAN 接続に失敗したからといって、その都度、Raspberry Pi にモニターをつないで確認をする、というのも煩雑すぎて非現実的です。(Raspberry Pi も複数持っていますし。。)

ということで、Raspberry Pi の起動時などログ出力をするなどの改善をおこない、いくつかのコマンドで確認をしたところ、原因が特定でき、確実に動くようになりました。そこで、Wi-Fi 接続などが不安定となったときの一連の手順とチェックポイントをまとめ、公開しておきます。

確認手順 ~ ラズパイの Wi-Fi 接続が不安定なとき

Wi-Fi 接続を何度かトライしてみる アナログ要因、デジタル要因を切り分ける

① まず、Raspberry Pi に電源を何度か入れなおして、Wi-Fi 接続を何度かトライしてみます。
※ 複数回起動させたとき、Wi-Fi 接続に失敗するのが何回程度か、定量的に把握してみます。
※ 必ずつねに失敗するのであれば、デジタル関連の要因が疑われます。例えば、ネットワークに関する GUI の設定、設定ファイルの修正で、直前に変更したものを確認してみます。
※ もし、たとえば、5回に1回のように、ある一定の確率で接続に失敗する/成功するのであれば、アナログ関連の要因が考えられます。例えば、電波の状態や電源の安定性などです。

② 加えて、①で Raspberry Pi を起動したとき、Windows パソコン側のコマンドプロンプト(または、Anaconda Prompt)で “arp -a” を実行してみます。

※ Windows パソコン側からローカルネットワーク内を監視し続けて、再起動時の Raspberry Pi の IP アドレスが現れるかかどうかを確認してみます。”arp -a” で Raspberry Pi の IP アドレスが表示されるのであれば、リモート接続も可能と考えられます。

③ つぎに、Wi-Fi 機器側(アクセスポイント等)の電源を ON/OFF してみます。
※ Raspberry Pi 側(Wi-Fi デバイス)が正常に起動しているのであれば、電波が一時的に断絶したとき、Raspberry Pi 側から Wi-Fi 機器への接続を再トライする動きとなります。
このとき、②の “arp -a” コマンドを同時に実行することで、Wi-Fi ネットワークに再接続しにいく動きを確認してみます。

他に考えられる確認項目としては、以下があります。

確認項目
※ Wi-Fi の電波がつながりにくい場合は、Raspberry Pi と Wi-Fi のアクセスポイントを結ぶ直線近辺にあるモノを片づけてみる。
※ 配線ケーブルや机など、電波を遮蔽する要因となりうるものも片づける。
※ Raspberry Pi 3 model B+ の場合、Wi-Fi/bluetooth のアンテナは、基板表面のラズベリーパイのマークの付いた金属部分(銀色部分)となっている。そこで、アンテナ素子近辺のケーブル類/金属類/遮蔽物をなくして片づける/電波が通りやすくなるよう配線のレイアウトを改善する/アンテナ周辺の空間を広く確保する。
※ Raspberry Pi とアクセスポイント間の距離を近づけてみる。
※ Raspberry Pi に接続しているハードウェア機器で、最近変更したものをもとに戻してみる。
※ 使っていない/不要な USB機器を外してみる。すべての USB 機器を外してみる。
※ 疑わしい場合は、GPIO に接続したデバイス(5V のピン接続など)も外してみる。
※ 最近、Wi-Fi ルーターを交換した等といった場合は、パスワード等の初期設定を忘れていないか確認する。

Wi-Fi がつながったときの確認 & 改善ポイント

起動時の画面出力を再表示してみる

④ 何とかつながる状態になったら、Raspberry Pi 側でターミナルを起動して “dmesg” + [enter] と入力してみます。起動時の出力を再表示するコマンドです。
$ dmesg

→ もし、ここで、”Under-voltage detected!” という警告が出ているようであれば、システムの起動時に電圧降下が生じていることがわかります。

※ この場合、電圧関連の改善をします。たとえば、Raspberry Pi の電源に使っている USB 電源などで、アンペア数の大きなものに変更できないか検討してみます。また、Raspberry Pi に接続している機器側で、起動時の音量設定など起動時の出力を下げられないか/外部電源が取れないか/外部電源が取れる機器に交換できないか、などを検討します。

※ 他にエラーが表示されていないか確認します。

起動時などにログを残すよう修正する

起動時や、終了時、自動処理の実行時にログが残っていないと、問題発生時、トレースすることがが困難となります。
そこで、Raspberry Pi (Linux) の cron 機能を使って、以下を例にログを残すように修正してみます。具体的なスクリプトや設定方法は、末尾の関連リンクに記載しています。
なお、ログは一時的なものであれば、Raspberry Pi の起動 SD カードに書き込んでも問題ないと思いますが、書き込みを常時/長期間行う場合は、USB カードリーダーなどを使って、外部の SD カードに書き込むようにしたほうが、システムを破損するリスクを低減するという観点で、より安全です。

ログを残す項目の例 
※ 起動時にスクリプトを実行するようにして、起動日時のログを残すよう修正する。
※ 指定時刻に自動でシャットダウンをする際も、crontab -e で直接、shutdown コマンドを実行するのではなく、終了用の Python などのスクリプトを実行するようにする。スクリプト側で、終了日時のログの記録を終えたのち、シャットダウンコマンドを実行するようにする。
※ 起動、終了以外で、自動実行するコマンドについても、スクリプト化して実行する日時のログを書き出すようにする。

自動実行する処理は、システムが安定してから実行するようにする

Raspberry Pi の起動時に、独自の処理/カスタマイズした処理を行いたいことがあると思います。
この場合、cron 機能を使って、起動直後にそのまま自動で実行すると、電源や Wi-Fi 接続などが不安定になることがあります。そこで、一定時間のスリープを入れるようにします。

具体的には、自動化する処理は、ターミナルで crontab -e を実行して記載します。起動後に行う処理は、”@reboot sudo … ” という行を追加して記載します。”@reboot ” で始まる行がすでに記載されていたら、その行の終わりあたりに行を追加して、同様に実行したいコマンドを追加していきます。
一例として、以下のようにスリープを入れ、システムが安定化してから、実行するようにしてみます。

修正前
@reboot sudo python /home/pi/…/start1.py
修正後
@reboot sleep 30
@reboot sudo python /home/pi/…/start1.py

※ python のスクリプト start1.py を実行する前に、30 秒ほどのスリープを入れておく事例です。
※ 経験的に、温湿度のデバイスをつないで計測を行うような場合、起動直後にいきなり計測を始めるよりは、計測前に “@reboot sleep 40” などを入れたほうが安定に動作しています。スリープを入れる場合の期間(秒数)は、システム起動後、Wi-Fi 接続やシステムが安定化する時間をみて、調整してみてください。
※ ログの書き出しも、起動直後に USB に接続した SD カードにログを書き出そうとすると、失敗することがあるようです。接続する機器にもよると思いますが、USB ポートも、安定するまでの時間が必要なようです。経験的に、上記の程度のスリープを入れたところ、安定動作しています。

システムが安定となったあたりで、ネットワークを再接続する処理を入れておく

また、システムが安定化したあたりで、Wi-Fi などのネットワークを自動で再接続するコマンドを入れておきます。上記と同様に、crontab -e を実行したときの編集画面で、以下を追加します。


@reboot sleep 60
@reboot sudo dhclient wlan0

※ こうしておくと、起動直後のネットワーク接続に失敗した場合であっても、システムの起動後、例えば 60秒後、システムが安定化したあたりで Wi-Fi 接続を再トライしにいくことになります。
動作確認をする場合は、Raspberry Pi が起動するタイミングに合わせて、ローカルネットワーク内の Windows パソコンなどから arp -a コマンドを実行します。すると、Raspberry Pi 側で Wi-Fi 接続の再トライがうまくできているか、確認することが可能となります(リモートであっても)。
システムの起動直後は、Raspberry Pi 本体に加え、接続した複数の周辺機器も同時に起動します。すると、何か問題があったとき、問題個所、問題要因の切り分けが難しくなります。
そこで、起動後、指定時間経過後にネットワーク接続だけを単独で再接続するようにします。これにより、システムが正常起動していれば、再接続するはずということがわかります。加えて、ネットワーク接続がそもそも動くのか/動かないのかを切り分けて、単独で動作確認をすることも可能になります。

消費電力の見積り(推測)

Raspberry Pi の消費電力については、ネット検索をしても、具体的な見積もり例をあまり見たことがありません。
そこで推測が入りますが、消費電力について見積もりを記載しておくことにします。計測したわけではありません。あくまでも各機器の仕様からの推測、一例です。

デバイス 消費電力(推測、一例)
Raspberry Pi 3 model B+ 基板 600mA ~ 1,000mA ? x 5V
USB スピーカー 500mA x 5V (MAX)
USB カードリーダー ?? mA x 5V
USB 電源(スマホ用) 2.4 A x 5V
USB 電源(安いもの) 1 A x 5V

※ 私が持っているラズパイの事例では、USB 給電タイプの USB スピーカーを Raspberry Pi につないだところ、1A の USB 電源では電力が不足し、Wi-Fi も含め、USB 機器が安定起動しなくなりました。そこで、2.4A の USB 電源に代えたところ、安定して動作するようになりました。
USB スピーカーや USB ハードディスク(モーターを使った機器)などを接続すると、電力供給が不足する可能性が高くなると考えられます。
※ 本来は、接続機器も含め、消費電力に関するこうした見積もりを作っておくとベターかなと思います。しかし、接続する機器によって、Raspberry Pi 本体の消費電力も大きく変動するようであり、起動直後などの電源仕様の明確化が難しいです。上の表は、安定動作している状態からの推測です。
※ また、Raspberry Pi の buster や bullseye のように、最新の OSや基板に更新するほど、基板の消費電力が上昇する傾向があるようです。バージョンアップなどの性能改善に伴い、USB 電源の能力が不足する傾向があるため、可能な範囲で、概算での消費電力を把握しておくことが望ましいと考えられます。

まとめ

Raspberry Pi で Wi-Fi 接続などが不安定になったときの確認事項についてまとめました。
デジタル関連の設定はさておき、アナログ関連での不安定要因は、まずはこのようなところかなと思います。
Wi-Fi などが不安定になったとき、手順やコマンド、着眼点を記載したサイトがあまり見つからなかったため、各観点と全体の流れをまとめてみました。

関連リンク
・ USBスピーカーをデフォルトに設定する 【Raspberry Pi】
・ 起動、終了時にログを出力する 【Raspberry Pi】

タイトルとURLをコピーしました