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はモジュールが起動する動作モードを選択します:WINC.MODE_STA-- ステーション / クライアント。connect()でアクセスポイントに接続します。これがデフォルトです。WINC.MODE_AP-- アクセスポイント。start_ap()で AP を設定し、クライアント接続を受け付けます。WINC.MODE_P2P-- WiFi Direct。WINC.MODE_BSP-- BSP のみを起動します(無線なし)。WINC.MODE_FIRMWARE-- ファームウェア更新モード。fw_dump()とfw_update()で必要です。
注釈
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上で、セキュリティモードsecurity(OPEN、WPA_PSKまたは 802.1X 定数のいずれか)を使い、パスワードkeyで WiFi ネットワークssidに接続します。securityとchannelはキーワード専用です。接続後は
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を返します。
- 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/WPA2 Enterprise(802.1X)のセキュリティ値も存在します。ファームウェアはこれを
802_1Xという名前で公開していますが、これは有効な Python 識別子ではありません。getattr(network.WINC, "802_1X")経由でアクセスしてください。- MODE_FIRMWARE: int¶
ファームウェア更新モード。
fw_dump()とfw_update()で必要です。