class WLAN -- 内蔵WiFiインターフェースの制御

WLAN クラスは、最新のOpenMV Camに搭載されたオンボードWiFi無線を駆動します。同じクラスが、ボードのWiFi MCUに応じて2つの異なる基盤ドライバをラップします:

  • CYW43 (Infineon CYW43xxx Murata WiFiモジュール)。OpenMV Cam N6、OpenMV Cam RT1062、Arduino Portenta H7、Arduino Nicla Vision、Arduino Giga R1 WiFiで使用されます。

  • NINA W10 (u-blox NINA-W10 / ESP32-WROOM)。Arduino Nano RP2040 Connectで使用されます。

2つのドライバは同じメソッド名を公開していますが、いくつかの引数と受け付ける config() キーのセットが異なります。相違点については以下で示しています。

レガシーなWINC1500 WiFiシールド (M4 / M7 / H7 / H7 Plus / Pure Thermal) を備えたOpenMVカメラは、代わりに WINC を使用します。

使用例:

import network

# Enable the station interface and connect to a WiFi AP.
nic = network.WLAN(network.WLAN.IF_STA)
nic.active(True)
nic.connect("your-ssid", "your-key")
while not nic.isconnected():
    pass

print(nic.ipconfig("addr4"))

コンストラクタ

class network.WLAN(interface_id: int = WLAN.IF_STA) None

WLAN インターフェースオブジェクトを作成します。

interface_id は、操作対象となるインターフェースを選択します:

  • WLAN.IF_STA -- ステーション / クライアントモード。connect() で上流のアクセスポイントに接続します。これがデフォルトです。

  • WLAN.IF_AP -- アクセスポイントモード。config() でAPを構成し、クライアント接続を受け付けます。

両方のインターフェースは同じ物理無線によって支えられています。一方を構築しても、もう一方を妨げることはありません。

メソッド

active(is_active: bool | None = None) bool

WiFi無線を起動または停止します。

引数なしの場合、現在の状態を返します -- 無線が起動している間は True、それ以外の場合は False です。

active(True) はWiFi MCUに電源を投入し、そのファームウェアをロードして (CYW43はフラッシュからファームウェアブロブを取得し、NINAは現在フラッシュされているファームウェアバージョンを検証します)、このインターフェースのlwIP netifを起動します。その他すべてのメソッド -- connect()scan()ipconfig() など -- は、インターフェースがアクティブであることを必要とします。

active(False) は無線を再び電源オフにします。STAインターフェースでは、これにより現在のAPからの関連付けも解除され、netifが解放されます。

connect(ssid: str, key: str | None = None, *, security: int = -1, bssid: bytes | None = None, channel: int = -1) None

STAインターフェースを指定されたアクセスポイントに関連付けます。

ssid -- ネットワークSSID (文字列またはバイト列)。

key -- パスワード / 事前共有鍵。オープンネットワークの場合は None を渡します。

security (キーワード専用) -- SEC_* 定数のいずれか。-1 (デフォルト) は自動選択します: key が空の場合は SEC_OPEN、それ以外の場合は SEC_WPA_WPA2 です。

bssid (キーワード専用、CYW43のみ) -- この6バイトのMACアドレスを持つAPに関連付けを限定します。NINAドライバでは無視されます。

channel (キーワード専用) -- 優先する無線チャンネル。デフォルトは「ドライバに選択させる」です。

disconnect() None

STAモードでは、現在関連付けられているアクセスポイントとの関連付けを解除します。インターフェースはアクティブのままです。再び関連付けるには connect() を呼び出し、無線を完全に電源オフにするには active() (False) を呼び出します。現在関連付けられていない場合は何もしません。

isconnected() bool

STAモードでは、アクセスポイントに関連付けられていて かつ DHCPからIPv4アドレスが取得された (または ipconfig() で静的に割り当てられた) 場合に True を返します。リンクがまだ認証/関連付け/DHCPフェーズにある間は False を返します。

APモードでは、少なくとも1つのステーションが参加した場合に True を返します。

scan(*, passive: bool = False, ssid: bytes | None = None, bssid: bytes | None = None) List[Tuple[bytes, bytes, int, int, int, int]]

近くのアクセスポイントをスキャンし、6要素タプルのリストを返します:

  • [0] SSID (バイト列。隠しネットワークの場合は空)。

  • [1] BSSID (6バイトMAC、bytes)。binascii.hexlify() で変換します。

  • [2] チャンネル番号。

  • [3] dBm単位のRSSI。

  • [4] セキュリティモード (SEC_* 定数のいずれか)。

  • [5] 予約済み (常に 1)。

すべてのキーワード引数はCYW43専用です:

  • passive -- True の場合、デフォルトのアクティブなプローブ要求スキャンの代わりにパッシブスキャンを使用します。

  • ssid -- スキャンを1つのSSIDに限定します。

  • bssid -- スキャンを1つのBSSIDに限定します。

スキャンはSTAインターフェース上でのみ意味を持ちます。

status() int
status(param: str) Any

接続状態を問い合わせます。

引数なしの場合、リンク状態を小さな整数として返します (ドライバ固有のエンコーディング -- 真の値は「関連付け済み」を意味します)。

文字列引数を指定した場合:

  • "rssi" -- STAモードでは、現在のRSSIをdBm単位で返します。

  • "stations" -- APモードでは、接続されているステーションのリストを返します。CYW43は [(mac_bytes,), ...] を返し、NINAは [ip_string, ...] を返します。

ifconfig(config: Tuple[str, str, str, str] | None = None) Tuple[str, str, str, str] | None

IPv4インターフェースパラメータを (ip, subnet, gateway, dns) のドット区切り文字列の4要素タプルとして取得または設定します。

注釈

新しいコードでは ipconfig() を推奨します:

nic.ipconfig(addr4="192.168.0.4/24", gw4="192.168.0.1")
network.ipconfig(dns="8.8.8.8")
ipconfig(param: str) Any
ipconfig(**kwargs: Any) None

IPv4 / IPv6インターフェースパラメータを取得または設定します。CYW43ドライバは標準のlwIP実装に委譲し、AbstractNIC.ipconfig() に記載されているキーの全セットをサポートします。NINAドライバは、より小さなインターフェースごとのサブセットを実装します -- dhcp4has_dhcp4 (読み取り専用)、加えて取得 / 設定用の addr4gw4 です。

config(param: str) Any
config(**kwargs: Any) None

WiFi固有のインターフェースパラメータを取得または設定します。

単一の位置文字列引数を指定すると、そのパラメータの値を返します。キーワード引数を指定すると、一度に1つ以上のパラメータを設定します -- 動作中のAPに影響する変更は、APを自動的に停止して再起動させます。

例:

# Set up the access-point name and channel.
ap.config(ssid="My AP", channel=11)
# Query params one at a time.
print(ap.config("ssid"))
print(ap.config("mac"))

CYW43ドライバ -- 取得可能なパラメータ:

  • "antenna" -- アンテナセレクタ (int)。

  • "channel" -- 現在のチャンネル。

  • "ssid" / "essid" -- 現在のSSID (文字列)。

  • "security" -- APの認証モード (SEC_* のいずれか)。

  • "mac" -- インターフェースのMACアドレス (6 bytes)。

  • "pm" -- 電源管理値。

  • "txpower" -- dBm単位の送信電力。

  • "hostname" -- DHCP/mDNSホスト名。非推奨。代わりに network.hostname() を使用してください。

CYW43ドライバ -- 設定可能なパラメータ:

  • antenna=<int> -- アンテナセレクタ。

  • channel=<int> -- APチャンネル。

  • ssid=<str> / essid=<str> -- AP SSID。

  • key=<str> / password=<str> -- APの事前共有鍵。

  • security=<int> -- APの認証モード (SEC_* のいずれか)。

  • pm=<int> -- 電源管理モード (PM_NONEPM_PERFORMANCEPM_POWERSAVE のいずれか)。

  • monitor=<int> -- モニター / 全マルチキャストモードを有効にします。

  • txpower=<int> -- dBm単位の送信電力。

  • trace=<int> -- 内部ドライバトレースのビットマスク。

  • hostname=<str> -- DHCP/mDNSホスト名。非推奨。代わりに network.hostname() を使用してください。

NINAドライバ -- 取得可能なパラメータ:

  • "ssid" -- 現在のSSID (文字列)。

  • "security" -- APの認証モード。

  • "mac" / "bssid" -- インターフェースのMACアドレス (6 bytes)。

  • "fw_version" -- 3要素タプル (major, minor, patch)

NINAドライバ -- 設定可能なパラメータ: この呼び出しは connect() に転送され、同じキーワード引数 (ssidkeysecuritychannel) を受け付けます。APインターフェース上でのみ有効です。

deinit() None

WiFi MCUを電源再投入し、ドライバが保持しているすべてのリソース (ファームウェアバッファ、lwIP netif、SPI/SDIOバス) を解放します。これを呼び出した後、WLAN オブジェクトは使用前に再構築する必要があります。完全なリセットが必要な場合 (たとえば無線のファームウェアを再フラッシュする前や、固着したドライバ状態から回復する場合) は、active() (False) ではなくこれを使用してください。CYW43のみ。

send_ethernet(buf: bytes) None

生のイーサネットフレーム buf を、IPスタックをバイパスしてドライバの送信パスに直接注入します。L2のみの利用者 (ブリッジング、カスタムEtherTypeプロトコルなど) を想定しています。フレームには宛先/送信元MACとEtherTypeを含める必要があります (FCSは不要 -- ハードウェアが付加します)。CYW43のみ。

ioctl(cmd: int, buf: bytearray) None

ドライバ固有の制御コマンドを発行します。cmd は基盤無線ファームウェアで定義された数値のioctlコードであり、buf はコマンドのペイロードと応答の両方に使用される可変バッファです。有効な cmd 値のセットはドライバ固有であり、CYW43とNINAの間で互換性はありません。主に低レベルのテストスクリプトやチップ立ち上げコードで使用されます。

定数

IF_STA: int

ステーション / クライアントインターフェース識別子。STAモードを選択するためにコンストラクタに渡します。

IF_AP: int

アクセスポイントインターフェース識別子。APモードを選択するためにコンストラクタに渡します。

SEC_OPEN: int

暗号化されていないネットワーク用のセキュリティ値。両方のドライバで利用できます。

SEC_WPA_WPA2: int

事前共有鍵を使用するWPA / WPA2用のセキュリティ値。connect() に鍵が指定された場合のデフォルトです。両方のドライバで利用できます。

SEC_WPA3: int

事前共有鍵を使用するWPA3 (SAE) 用のセキュリティ値。CYW43のみ。

SEC_WPA2_WPA3: int

WPA2 / WPA3移行モード用のセキュリティ値。CYW43のみ。

SEC_WEP: int

WEP (Wired Equivalent Privacy) 用のセキュリティ値。レガシーなアクセスポイントとの互換性のために提供されています -- WEPは暗号学的に破られており、新規の運用では使用すべきではありません。NINAのみ。

OPEN: int

SEC_OPEN の後方互換エイリアス。新しいコードでは SEC_OPEN を使用すべきです。NINAのみ。

WEP: int

SEC_WEP の後方互換エイリアス。新しいコードでは SEC_WEP を使用すべきです。NINAのみ。

WPA_PSK: int

SEC_WPA_WPA2 の後方互換エイリアス。新しいコードでは SEC_WPA_WPA2 を使用すべきです。NINAのみ。

PM_NONE: int

WiFi電源管理を無効にするために config(pm=...) に渡します。CYW43のみ。

PM_PERFORMANCE: int

パフォーマンス向けに調整されたWiFi電源管理を有効にするために config(pm=...) に渡します。CYW43のみ。

PM_POWERSAVE: int

最大のバッテリー寿命向けに調整されたWiFi電源管理を有効にするために config(pm=...) に渡します。CYW43のみ。