class WINC -- WiFi シールドドライバ

WINC クラスは、OpenMV WiFi シールド上の Atmel WINC1500 802.11 b/g/n WiFi モジュールを駆動します。OpenMV Cam M4、M7、H7、H7 Plus、Pure Thermal(WiFi シールドが対応するように設計された STM32 ボード)で利用可能です。WiFi 内蔵のボード(OpenMV Cam N6、OpenMV Cam RT1062、Arduino Giga)では代わりに WLAN を使用してください。

例 -- アクセスポイントに接続してアドレスを表示する:

import network

wlan = network.WINC()
wlan.connect("SSID", "KEY", security=network.WINC.WPA_PSK)

print("status:    ", "connected" if wlan.isconnected() else "off")
print("rssi:      ", wlan.rssi(), "dBm")
print("interface: ", wlan.ifconfig())
print("netinfo:   ", wlan.netinfo())

例 -- オープンなアクセスポイントを立ち上げてクライアントを待つ:

import network

wlan = network.WINC(mode=network.WINC.MODE_AP)
wlan.start_ap("OpenMV-Cam", security=network.WINC.OPEN, channel=6)

print("waiting for a station to associate...")
print(wlan.wait_for_sta(timeout=None))

コンストラクタ

class network.WINC(mode: int = WINC.MODE_STA) None

WINC ドライバオブジェクトを作成し、WiFi シールドを起動します。

mode はモジュールが起動する動作モードを選択します:

注釈

AP モードでは、WINC1500 にハードウェア上の制限があります:

  • 一度に接続できるクライアントは 1 台のみです。

  • OPEN または WEP セキュリティのみがサポートされます。

  • WiFi モジュールのファームウェアのバグにより、クライアントが切断するとバインド済みのソケットが動作しなくなります。サーバーソケットにタイムアウトを設定して例外を発生させ、それを使ってソケットを開き直せるようにしてください。

メソッド

active(is_active: bool | None = None) bool

WiFi シールドを起動または停止します。

引数なしの場合、現在の状態を返します。シールドが初期化され無線が起動している間は True、それ以外は False です。

active(True) は SPI 経由で WINC1500 のファームウェアハンドシェイクを実行し、設定された mode で無線を起動します。インターフェースが既にアクティブな場合は何もしません。connect() はまだ呼ばれていなければこれを自動的に呼び出します。それ以外のメソッド(scan()rssi()netinfo() など)では、まず active(True) を呼び出す必要があります。

active(False) は無線を再びシャットダウンし(WINC は BSP のみのモードに戻ります)、SPI ピンを解放します。

connect(ssid: str, key: str | None = None, *, security: int = WINC.WPA_PSK, channel: int = 1) None

無線チャンネル channel 上で、セキュリティモード securityOPENWPA_PSK または 802.1X 定数のいずれか)を使い、パスワード key で WiFi ネットワーク ssid に接続します。securitychannel はキーワード専用です。

接続後は socket モジュールを使って TCP/UDP ポートを開きます。

このメソッドは接続が完了するか失敗するまでブロックします。

config(ssid: str, key: str | None = None, *, security: int = WINC.WPA_PSK, channel: int = 1) None

connect() のエイリアスです。他の network インターフェースで config を呼び出すコードとの互換性のために提供されています。

start_ap(ssid: str, key: str | None = None, *, security: int = WINC.OPEN, channel: int = 1) None

mode=MODE_AP でオブジェクトを構築した後に、アクセスポイントを設定して起動するために使用する connect() のエイリアスです。AP は OPEN または WEP セキュリティのみをサポートします。WEP を使用する場合は key が必須です。

disconnect() None

STA モードで、現在接続中のアクセスポイントから切断します。シールドはアクティブなままです。再接続するには connect() を呼び出してください。現在接続していない場合は何もしません。

isconnected() bool

STA モードで、アクセスポイントに接続しかつ IPv4 アドレスを(DHCP または ifconfig() 経由で)取得済みのとき True を返します。認証中 / 接続中 / DHCP の段階の間は False を返します。

connected_sta() List[str]

AP モードで、現在接続中のクライアントの IP アドレスを含むリストを返します(クライアントが接続していない場合は空のリスト)。

wait_for_sta(timeout: int | None) List[str]

AP モードで、クライアントが接続するまでブロックし、そのクライアントの IP アドレスを含むリストを返します。timeout はミリ秒単位の最大待機時間です。無期限に待つには None を渡します。

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

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

引数なしで呼び出すと、現在の設定を返します。

4 要素タプルで呼び出すと、DHCP で取得した設定の代わりに静的 IP 設定を行います。

例 -- 接続前に静的 IP を固定する:

wlan = network.WINC()
wlan.ifconfig(("192.168.1.100", "255.255.255.0",
               "192.168.1.1", "192.168.1.1"))
wlan.connect(SSID, key=KEY, security=network.WINC.WPA_PSK)

注釈

WINC は最新の AbstractNIC.ipconfig() API を実装していません。ここでは ifconfig() を使用してください。

netinfo() Tuple[int, int, str, str, str]

現在の接続を表す 5 要素タプルを返します:

  • [0] RSSI を int で(dBm)。

  • [1] セキュリティモード -- セキュリティ定数のいずれか。

  • [2] SSID 文字列。

  • [3] BSSID を "XX:XX:XX:XX:XX:XX" MAC 文字列として。

  • [4] IPv4 アドレスをドット区切り 4 つ組の文字列として。

scan() List[Tuple[str, str, int, int, int, int]]

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

  • [0] SSID 文字列。

  • [1] BSSID を "XX:XX:XX:XX:XX:XX" MAC 文字列として。

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

  • [3] RSSI(dBm)。

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

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

ネットワークに接続する前に呼び出すことができます。

rssi() int

現在接続中のアクセスポイントの RSSI を dBm で返します。おおよその目安: -30 は優良、-67 はストリーミングに問題なし、-80 はぎりぎり、-90 以下は使用不可です。STA モードで isconnected()True の間のみ意味を持ちます。

fw_version() Tuple[int, int, int, int, int, int, int]

WINC1500 のファームウェアとドライバのバージョンを表す 7 要素タプルを返します:

  • [0] ファームウェアのメジャー。

  • [1] ファームウェアのマイナー。

  • [2] ファームウェアのパッチ。

  • [3] ドライバのメジャー。

  • [4] ドライバのマイナー。

  • [5] ドライバのパッチ。

  • [6] チップのハードウェアリビジョン。

fw_dump(path: str) None

WINC1500 の内部フラッシュを読み出し、得られたファームウェアイメージを OpenMV のファイルシステム上の path のファイルに書き込みます。fw_update() を呼び出す前に、現在インストールされているイメージをバックアップするために使用します。

モジュールが mode=MODE_FIRMWARE で構築されている必要があります。

fw_update(path: str) None

WINC1500 の内部フラッシュを消去し、path のバイナリイメージで書き込みます。イメージは OpenMV ファームウェアが期待するレイアウトに一致している必要があります(通常は Atmel / Microchip が WINC SDK とともに提供します)。

この呼び出しは、フラッシュの書き込みと検証の間、数秒間ブロックします。呼び出しが戻った後は、WINC1500 が新しいイメージから起動するように OpenMV Cam の電源を入れ直してください。

モジュールが mode=MODE_FIRMWARE で構築されている必要があります。

定数

OPEN: int

暗号化されていないネットワーク用のセキュリティ値。connect() / start_ap()security 引数に渡します。

WPA_PSK: int

事前共有キーを使う WPA/WPA2 用のセキュリティ値。connect() のデフォルトです。

注釈

WPA/WPA2 Enterprise(802.1X)のセキュリティ値も存在します。ファームウェアはこれを 802_1X という名前で公開していますが、これは有効な Python 識別子ではありません。getattr(network.WINC, "802_1X") 経由でアクセスしてください。

MODE_STA: int

ステーションモード -- クライアントとしてアクセスポイントに接続します。デフォルトのコンストラクタモードです。

MODE_AP: int

アクセスポイントモード -- WINC がクライアントの接続先となる AP になります。

MODE_P2P: int

WiFi Direct(ピアツーピア)モード。

MODE_BSP: int

WINC のボードサポートパッケージのみを初期化します -- 無線は起動しません。ファームウェア更新フローで使用されます。

MODE_FIRMWARE: int

ファームウェア更新モード。fw_dump()fw_update() で必要です。