今回は、Pythonを使ってWiFiの状態を管理・操作する方法について、具体的なコード例を交えて紹介します。WiFi接続をプログラムで制御することにより、接続の自動化やネットワーク情報の取得などが可能です。こうした機能は、ネットワーク管理やIoTデバイスの操作に役立ちます。Python初心者にも理解しやすいように丁寧に説明していきます。
必要なパッケージのインストール
PythonでWiFi情報にアクセスし、操作するためには、専用のライブラリが必要です。ここでは、「wifi
」と「subprocess
」というライブラリを使用します。wifi
ライブラリはWiFiネットワークの管理を簡単にし、subprocess
はシステムコマンドの実行に便利です。
まずはライブラリをインストールします。wifi
ライブラリは以下のコマンドでインストール可能です。
pip install wifi
WiFiネットワークのスキャン
最初に、利用可能なWiFiネットワークをリストアップしてみましょう。これにより、接続可能なSSID(ネットワーク名)を取得し、その中から特定のネットワークに接続することができます。
以下のコードでは、周囲のWiFiネットワークをスキャンし、SSIDと電波強度を表示します。
import wifi # WiFiネットワークをスキャン networks = wifi.Cell.all('wlan0') # 'wlan0'は一般的な無線インターフェイスの名前です # ネットワーク情報を表示 for network in networks: print(f"SSID: {network.ssid}, 信号強度: {network.signal}")
実行結果例
SSID: Home_Network, 信号強度: -40 SSID: Cafe_WiFi, 信号強度: -70 SSID: Office_WiFi, 信号強度: -60
この結果から、周囲のWiFiネットワークのリストが表示され、それぞれの信号強度を確認できます。信号強度の数値が小さいほど、接続が強力であることを示しています。
WiFiネットワークへの接続
特定のWiFiネットワークに接続するためには、そのSSIDとパスワードが必要です。次に、指定したネットワークに接続するコードを示します。
import wifi # 接続先のSSIDとパスワード ssid = "Home_Network" password = "your_password" # 接続先のネットワークをスキャン networks = wifi.Cell.all('wlan0') target_network = None for network in networks: if network.ssid == ssid: target_network = network break # ネットワークが見つかった場合に接続 if target_network: scheme = wifi.Scheme.for_cell('wlan0', 'home', target_network, password) scheme.save() scheme.activate() print(f"{ssid}に接続しました。") else: print(f"{ssid}が見つかりませんでした。")
実行結果例
Home_Networkに接続しました。
接続状態の確認
WiFiに接続した後、その状態を確認することも重要です。接続が成功しているか、IPアドレスが取得されているかをPythonでチェックすることができます。
以下のコードでは、subprocess
を使って接続状態を確認しています。
import subprocess def check_connection(): # IPアドレスを確認するためのコマンド result = subprocess.run(["ip", "addr", "show", "wlan0"], capture_output=True, text=True) if "inet " in result.stdout: print("WiFi接続は正常です。") else: print("WiFi接続に失敗しています。") check_connection()
実行結果例
WiFi接続は正常です。
自動再接続機能
WiFi接続が途中で切れた場合に、自動で再接続を試みる機能を追加してみましょう。これは、安定した接続が必要な場面や、IoTデバイスでの利用に役立ちます。
以下のコードは、一定時間ごとに接続を確認し、接続が切れていた場合は再接続するという処理を行います。
import time def auto_reconnect(ssid, password): while True: result = subprocess.run(["ip", "addr", "show", "wlan0"], capture_output=True, text=True) # WiFiが切断されている場合 if "inet " not in result.stdout: print("接続が切れました。再接続を試みます...") # 再接続を試みる networks = wifi.Cell.all('wlan0') target_network = None for network in networks: if network.ssid == ssid: target_network = network break if target_network: scheme = wifi.Scheme.for_cell('wlan0', 'home', target_network, password) scheme.activate() print(f"{ssid}に再接続しました。") else: print(f"{ssid}が見つかりませんでした。") else: print("WiFi接続は正常です。") # 5秒待機して再確認 time.sleep(5) # 使用するSSIDとパスワード auto_reconnect("Home_Network", "your_password")
実行結果例
WiFi接続は正常です。 接続が切れました。再接続を試みます... Home_Networkに再接続しました。
まとめ
ここまでで、Pythonを使ってWiFi接続を操作し、ネットワークのスキャン、接続、接続状態の確認、自動再接続機能を実装する方法を紹介しました。