network --- ネットワーク設定
このモジュールはネットワークドライバーとルーティングの設定を提供します。このモジュールを使うには、ネットワーク機能を備えるようビルドした MicroPython をインストールする必要があります。特定のハードウェア用のネットワークドライバーは、このモジュール内で利用可能であり、ハードウェアネットワークインタフェースを設定するために使われます。設定したインタフェースによって提供されたネットワークサービスは socket モジュールを介して利用可能になります。
たとえば次のように使います:
# 特定のネットワークインタフェースの接続と IP 設定の表示
# 特定のドライバーの例は以降を参照
import network
import time
nic = network.Driver(...)
if not nic.isconnected():
nic.connect()
print("Waiting for connection...")
while not nic.isconnected():
time.sleep(1)
print(nic.ipconfig("addr4"))
# これで通常どおり socket を使えるようになる
import socket
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()
共通のネットワークアダプターインタフェース
この章では、さまざまなハードウェアの MicroPython ポート で実装されているすべてのネットワークインタフェースクラスの(暗黙の)抽象基底クラスについて説明します。つまり、MicroPython は実際には AbstractNIC クラスを提供しませんが、以降の章で説明するように、実際の NIC クラスはすべて、ここで説明するメソッドを実装します。
- class network.AbstractNIC(id=None, ...)
ネットワークインタフェースオブジェクトをインスタンス化します。パラメータはネットワークインタフェースに依存します。同じタイプのインタフェースが複数ある場合は、最初のパラメータを id にします。
- AbstractNIC.active([is_active])
ブール型の引数が渡された場合、ネットワークインタフェースを有効化("up")または無効化("down")します。引数が与えられていなければ現在の状態を問い合わせます。他のほとんどのメソッドは有効化したインターフェースを必要とします(無効化したインターフェースでそれらを呼び出す動作は未定義です)。
- AbstractNIC.connect([service_id, key=None, *, ...])
インターフェイスをネットワークに接続します。このメソッドはオプションであり、「常に接続されている」とは限らないインタフェースに対してのみ利用可能です。パラメータが指定されていない場合は、デフォルトの(または唯一の)サービスに接続します。単一のパラメータが与えられた場合、それは接続するサービスのプライマリ識別子です。これはサービスにアクセスするために必要な鍵(パスワード)を伴うことがあります。ネットワーク媒体の種類や特定の装置に応じて、さらに任意のキーワードのみのパラメータがあり得ます。パラメータは、次の目的で使用できます: a) 代替サービス識別タイプを指定; b) 追加の接続パラメータを提供。さまざまな媒体タイプのそれぞれに、定義済み/推奨パラメータのセットがあります:
WiFi: bssid - 特定の BSSID (MAC アドレス)に接続するためのキーワード
- AbstractNIC.disconnect()
ネットワークから切断します。
- AbstractNIC.isconnected()
ネットワークに接続されていれば
Trueを返し、そうでなければFalseを返します。
- AbstractNIC.scan(*, ...)
利用可能なネットワークサービス/接続をスキャンします。戻り値は、検出されたサービスパラメータを持つタプルのリストです。さまざまなネットワーク媒体に対して、定義済み/推奨のタプル形式にはさまざまな種類があります:
WiFi: (ssid, bssid, channel, RSSI, security, hidden)。特定のデバイスに固有のさらなる項目もあり得ます。
この関数は、追加のキーワード引数を受け取ることができ、スキャン結果をフィルタリングしたり(たとえば、特定のサービスのスキャン、特定のチャンネルのスキャン、特定のセットのサービスのスキャンなど)、スキャン期間やその他のパラメータに影響を与えたりできます。可能であれば、パラメータ名は connect() のものと一致させるべきです。
- AbstractNIC.status([param])
インターフェースの動的な状況情報を照会します。引数なしで呼び出された場合、戻り値はネットワークリンクステータスを表します。そうでなければ param は取得する特定のステータスパラメータを命名する文字列であるべきです。
戻り値の型と値は、ネットワークの媒体/テクノロジによって異なります。サポートされている可能性のあるパラメータは次のとおりです。
WiFi STA: AP 信号の RSSI を取得するには
'rssi'使いますWiFi AP: AP に接続されているすべてのSTAのリストを取得するには
'stations'を使います。このリストには (MAC, RSSI) の形式のタプルが含まれています。
- AbstractNIC.ipconfig('param')
- AbstractNIC.ipconfig(param=value, ...)
インタフェース固有の IP 設定パラメータを取得または設定します。サポートされているパラメータは以下の通りです(一部のパラメータは、ポートや特定のネットワークインターフェースに依存します)。
dhcp4(True/False): DHCP を介して IPv4 アドレス、ゲートウェイ、DNS サーバを取得します。このメソッドは、アドレスの取得を待つためにブロックされません。アドレスが取得されたかを確認するには、読込み専用プロパティhas_dhcp4を使ってください。gw4: IPv4 デフォルトゲートウェイを取得/設定します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): タプル(ip, state, preferred_lifetime, valid_lifetime)として、現在の IPv6 アドレスのリストを取得します。これにはリンクローカル、SLAAC、静的アドレスが含まれます。preferred_lifetimeおよびvalid_lifetimeは、それぞれの IPv6 アドレスの残りの優先有効期間と有効期間(秒単位)を表します。stateはアドレスの現在の状態を示します:0x08-0x0f: アドレスが暫定的で、送信されたプローブの数をカウントしていることを示します。0x10: アドレスが非推奨(ただし、まだ有効)であることを示します。0x30: アドレスが推奨である(かつ有効である)ことを示します。0x40: アドレスが重複しており、使用できないことを示します。
このメソッドでは
fe80::1234:5678のように、このパラメータにアドレスを設定することで、静的な IPv6 アドレスを設定するために使えます。
- AbstractNIC.ifconfig([(ip, subnet, gateway, dns)])
注釈
この関数は非推奨です。代わりに
ipconfig()を使ってください。IP レベルのネットワークインターフェースパラメータ(IPアドレス、サブネットマスク、ゲートウェイ、DNSサーバー)を取得/設定します。引数なしで呼び出されると、このメソッドは上記の情報を含む4タプルを返します。上記の値を設定するには、必要な情報を含む4項目のタプルを渡します。例えば次のように設定します:
nic.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8'))
- AbstractNIC.config('param')
- AbstractNIC.config(param=value, ...)
一般的なネットワークインターフェースパラメータを取得または設定します。これらのメソッドは、(
ipconfig()で扱われるように)標準の IP 設定以外の追加のパラメータを扱うことを可能にします 。これらには、ネットワーク固有およびハードウェア固有のパラメータが含まれています。パラメータを設定するには、キーワード引数の構文を使用する必要があり、複数のパラメータを一度に設定できます。問合せを実行する場合、パラメータ名は文字列として引用符で囲みます。一度に問合せできるパラメータは1つだけです。# WiFi アクセスポイント名(正式には SSID と呼ばれている)と WiFi チャンネルを設定 ap.config(ssid='My AP', channel=11) # 一つずつパラメータを問合せ print(ap.config('ssid')) print(ap.config('channel'))
特定のネットワーククラスの処理系
以下の具象クラスは AbstractNIC インターフェースを実装し、さまざまな種類のネットワークインターフェースを制御する方法を提供します。
ネットワーク関数
以下はネットワークモジュールで利用可能な関数です。
- network.country([code])
無線規格で使われる2文字の ISO 3166-1 Alpha-2 国コードを取得または設定します。
code パラメータを指定した場合、その値に国を設定します。パラメータを指定せずに関数を呼び出した場合、現在の国が返されます。
デフォルトのコード
"XX"は、"XX"リージョンを表します。
- network.hostname([name])
ネットワーク上でこのデバイスを識別するために使うホスト名を取得または設定します。これはすべてのインターフェイスで使われます。
- このホスト名は以下の用途で使われます。
DHCPサーバーへのクライアント要求(DHCP を使っている場合)
mDNS経由でのブロードキャスト(有効な場合)
name パラメータを指定した場合、その値にホスト名を設定されます。パラメータを指定せずに関数を呼び出した場合、現在のホスト名が返されます。
ホスト名の変更は通常、接続中にのみ適用されます。DHCP の場合、ホスト名は DHCP クライアントリクエストの一部であり、ほとんどのポートでの mDNS の実装は接続中に一度だけホスト名を初期化します。そのため、ネットワークインターフェイスをアクティブ化/接続する前にホスト名を設定する必要があります。
ホスト名の長さは32文字までです。 "MicroPython のポート によっては、メモリの都合でそれ以下の長さになっていることもあります。指定した名前に収まらない場合は
ValueErrorが発生します。デフォルトのホスト名は通常、ボードの名前になります。
- network.ipconfig('param')
- network.ipconfig(param=value, ...)
グローバルな IP 設定パラメータを取得または設定します。サポートされているパラメータは次のとおりです(一部のパラメータの利用可能性は、ポートや特定のネットワークインタフェースに依存します)。
dns: DNS サーバを取得/設定します。このメソッドは、IPv4 と IPv6 の両方のアドレスをサポートできます。prefer(4/6): ドメイン名に A レコードと AAAA レコードの両方がある場合、どちらのアドレスタイプを返すかを指定します。注意点として、これによりローカルの DNS キャッシュはクリアされないため、以前に取得したアドレスは変更されない可能性があります。
- network.phy_mode([mode])
PHY モードを取得または設定します。
mode パラメータを指定した場合、この値に PHY モードを設定します。パラメータなしで関数を呼び出すと、現在の PHY モードが返されます。
- 指定可能なモードは定数として定義されています:
MODE_11B-- IEEE 802.11b,MODE_11G-- IEEE 802.11g,MODE_11N-- IEEE 802.11n.
対応ポート: ESP8266。