network --- ネットワーク構成¶
このモジュールは、ネットワークドライバとルーティング構成を提供します。このモジュールを使用するには、ネットワーク機能を備えたMicroPythonのバリアント/ビルドがインストールされている必要があります。特定のハードウェア向けのネットワークドライバはこのモジュール内で利用でき、ハードウェアネットワークインターフェースを構成するために使用されます。構成されたインターフェースが提供するネットワークサービスは、socket モジュールを介して利用できるようになります。
例えば:
import network
import socket
import time
nic = network.WLAN(network.WLAN.IF_STA)
nic.active(True)
nic.connect("your-ssid", "your-key")
print("Waiting for connection...")
while not nic.isconnected():
time.sleep(1)
print(nic.ipconfig("addr4"))
# Open a TCP socket as usual.
addr = socket.getaddrinfo("micropython.org", 80)[0][-1]
s = socket.socket()
s.connect(addr)
s.send(b"GET / HTTP/1.1\r\nHost: micropython.org\r\n\r\n")
data = s.recv(1000)
s.close()
カメラに応じて、WLAN を WINC (レガシーWiFiシールド) または LAN (内蔵イーサネット) に置き換えてください。構築 -> 起動 -> 接続 -> ソケット使用という高レベルのパターンは、3つのケースすべてで同じです。
共通ネットワークアダプタインターフェース¶
このセクションでは、異なるハードウェア向けに MicroPythonポート によって実装される、すべてのネットワークインターフェースクラスの (暗黙の) 抽象基底クラスについて説明します。これは、MicroPythonが実際に AbstractNIC クラスを提供するわけではないものの、以降のセクションで説明する実際のNICクラスはいずれも、ここで説明するメソッドを実装することを意味します。
- class network.AbstractNIC(id: int | None = None, *args: Any, **kwargs: Any) None¶
ネットワークインターフェースオブジェクトをインスタンス化します。パラメータはネットワークインターフェースに依存します。同じタイプのインターフェースが複数ある場合、最初のパラメータは
idであるべきです。- active(is_active: bool | None = None, /) bool¶
ネットワークインターフェースを起動または停止します。
引数なしの場合、現在の状態を返します -- インターフェースがアクティブな間は
True、それ以外の場合はFalseです。インターフェースを有効化するには
Trueを渡します: 基盤のネットワークコントローラに電源を投入 / リセットし、該当する場合はファームウェアをロードし、このインターフェースでIPスタックを起動します。ネットワークと通信する後続の呼び出し (connect()、scan()、ipconfig()など) は、インターフェースがアクティブであることを必要とします。インターフェースを無効化するには
Falseを渡します: IPスタックを停止し、ドライバリソースを解放します。無線インターフェースでは、これにより現在参加しているネットワークからの関連付けも解除されます。非アクティブなインターフェースで他のメソッドを呼び出した場合の動作は未定義です。
- connect(service_id: str | None = None, key: str | None = None, *, bssid: bytes | None = None, **kwargs: Any) None¶
インターフェースをネットワークに接続します。このメソッドはオプションであり、「常時接続」ではないインターフェースでのみ利用できます。パラメータが指定されない場合、デフォルトの (または唯一の) サービスに接続します。単一のパラメータが指定された場合、それは接続先サービスの主識別子です。これには、当該サービスへのアクセスに必要な鍵 (パスワード) を伴うことがあります。ネットワーク媒体のタイプや特定のデバイスに応じて、さらに任意のキーワード専用パラメータが存在することがあります。パラメータは次の用途に使用できます: a) 代替のサービス識別子タイプを指定する。b) 追加の接続パラメータを提供する。さまざまな媒体タイプには、事前定義/推奨されるパラメータの異なるセットがあり、その中には次のものが含まれます:
WiFi: 特定のBSSID (MACアドレス) に接続するための bssid キーワード
- scan(**kwargs: Any) List[Tuple]¶
利用可能なネットワークサービス/接続をスキャンします。検出されたサービスパラメータを含むタプルのリストを返します。さまざまなネットワーク媒体には、事前定義/推奨されるタプル形式の異なるバリエーションがあり、その中には次のものが含まれます:
WiFi: (ssid, bssid, channel, RSSI, security, hidden)。特定のデバイス固有のさらなるフィールドが存在することがあります。
この関数は、スキャン結果をフィルタリングする (例えば特定のサービス、特定のチャンネル、特定のセットのサービスをスキャンするなど) ため、およびスキャン時間やその他のパラメータに影響を与えるために、追加のキーワード引数を受け付けることがあります。可能な場合、パラメータ名はconnect()のものと一致させるべきです。
- status(param: str | None = None) Any¶
インターフェースの動的な状態情報を問い合わせます。引数なしで呼び出された場合、戻り値はネットワークリンク状態を表します。それ以外の場合、param は取得する特定の状態パラメータを指定する文字列であるべきです。
戻り値の型と値は、ネットワーク媒体/技術に依存します。サポートされる可能性があるパラメータのいくつかは次のとおりです:
WiFi STA:
'rssi'を使用してAP信号のRSSIを取得しますWiFi AP:
'stations'を使用して、APに接続されているすべてのSTAのリストを取得します。リストには (MAC, RSSI) という形式のタプルが含まれます。
- ipconfig(param: str) Any¶
- ipconfig(**kwargs: Any) None
インターフェース固有のIP構成インターフェースパラメータを取得または設定します。サポートされるパラメータは次のとおりです (特定のパラメータが利用できるかどうかは、ポートおよび特定のネットワークインターフェースに依存します):
dhcp4(True/False) DHCP経由でIPv4アドレス、ゲートウェイ、DNSサーバを取得します。このメソッドはブロックせず、アドレスの取得を待ちません。アドレスが取得されたかどうかを確認するには、読み取り専用プロパティhas_dhcp4を使用します。gw4IPv4のデフォルトゲートウェイを取得/設定します。dhcp6(True/False) ステートレスDHCPv6経由でDNSサーバを取得します。DHCPv6経由でのIPアドレスの取得は現在実装されていません。autoconf6(True/False) ルータ広告で共有されるネットワークプレフィックスを介して、ステートレスIPv6アドレスを取得します。ステートレスアドレスが取得されたかどうかを確認するには、読み取り専用プロパティhas_autoconf6を使用します。addr4(例:192.168.0.4/24) アドレスがどのように取得されたかに関わらず、現在のIPv4アドレスとネットワークマスクを(ip, subnet)タプルとして取得します。このメソッドは、(ip, subnet)タプルまたはCIDR表記のいずれかで静的IPv4アドレスを設定するために使用できます。addr6(例:fe80::1234:5678) 現在のIPv6アドレスのリストを(ip, state, preferred_lifetime, valid_lifetime)タプルとして取得します。これにはリンクローカル、slaac、静的アドレスが含まれます。preferred_lifetimeとvalid_lifetimeは、各IPv6アドレスの残りの有効ライフタイムおよび優先ライフタイムを秒単位で表します。stateはアドレスの現在の状態を示します:0x08-0x0fはアドレスが仮 (tentative) であることを示し、送信されたプローブの数を数えます。0x10アドレスは非推奨 (ただし依然として有効) です0x30アドレスは優先 (かつ有効) です0x40アドレスは重複しており、使用できません。
このメソッドは、このパラメータを
fe80::1234:5678のようなアドレスに設定することで、静的IPv6アドレスを設定するために使用できます。
- ifconfig(config: Tuple[str, str, str, str] | None = None) Tuple[str, str, str, str] | None¶
注釈
この関数は非推奨です。代わりに
ipconfig()を使用してください。IPレベルのネットワークインターフェースパラメータ (IPアドレス、サブネットマスク、ゲートウェイ、DNSサーバ) を取得/設定します。引数なしで呼び出された場合、このメソッドは上記の情報を含む4要素タプルを返します。上記の値を設定するには、必要な情報を含む4要素タプルを渡します。例えば:
nic.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8'))
- config(param: str) Any¶
- config(**kwargs: Any) None
一般的なネットワークインターフェースパラメータを取得または設定します。これらのメソッドにより、標準のIP構成 (
ipconfig()で扱われるもの) を超える追加のパラメータを扱うことができます。これにはネットワーク固有およびハードウェア固有のパラメータが含まれます。パラメータを設定する場合はキーワード引数構文を使用すべきであり、複数のパラメータを一度に設定できます。問い合わせる場合は、パラメータ名を文字列として引用符で囲むべきであり、一度に1つのパラメータのみを問い合わせることができます:# Set WiFi access point name (formally known as SSID) and WiFi channel ap.config(ssid='My AP', channel=11) # Query params one by one print(ap.config('ssid')) print(ap.config('channel'))
特定のネットワーククラス実装¶
以下の具象クラスはAbstractNICインターフェースを実装し、さまざまな種類のネットワークインターフェースを制御する方法を提供します。
ネットワーク関数¶
以下は、networkモジュールで利用可能な関数です。
- network.country(code: str | None = None) str | None¶
無線コンプライアンスに使用される、2文字のISO 3166-1 Alpha-2国コードを取得または設定します。
code パラメータが指定された場合、国はこの値に設定されます。パラメータなしで関数が呼び出された場合、現在の国を返します。
デフォルトコード
"XX"は「ワールドワイド」リージョンを表します。
- network.hostname(name: str | None = None) str | None¶
ネットワーク上でこのデバイスを識別するホスト名を取得または設定します。これはすべてのインターフェースで使用されます。
- このホスト名は次の用途に使用されます:
クライアント要求でDHCPサーバへ送信する。(DHCPを使用している場合)
mDNS経由でブロードキャストする。(有効な場合)
name パラメータが指定された場合、ホスト名はこの値に設定されます。パラメータなしで関数が呼び出された場合、現在のホスト名を返します。
ホスト名の変更は、通常は接続中にのみ適用されます。DHCPの場合、これはホスト名がDHCPクライアント要求の一部であるためであり、ほとんどのポートにおけるmDNSの実装では接続中に一度だけホスト名が初期化されるためです。このため、ネットワークインターフェースを起動/接続する前にホスト名を設定する必要があります。
ホスト名の長さは32文字に制限されています。MicroPythonポート は、メモリ上の理由からより低い制限を設定することを選択する場合があります。指定された名前が収まらない場合、
ValueErrorが送出されます。デフォルトのホスト名は、通常はボードの名前です。
- network.ipconfig(param: str) Any¶
- network.ipconfig(**kwargs: Any) None
グローバルなIP構成パラメータを取得または設定します。サポートされるパラメータは次のとおりです (特定のパラメータが利用できるかどうかは、ポートおよび特定のネットワークインターフェースに依存します):
dnsDNSサーバを取得/設定します。このメソッドはIPv4とIPv6の両方のアドレスをサポートできます。prefer(4/6) ドメイン名がAレコードとAAAAレコードの両方を持つ場合に、どのアドレスタイプを返すかを指定します。これはローカルDNSキャッシュをクリアしないため、以前に取得したアドレスが変化しない可能性があることに注意してください。