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()

카메라에 적합하게 WLANWINC (레거시 WiFi 실드) 또는 LAN (내장 이더넷)으로 교체하세요. 생성 -> 활성화 -> 연결 -> 소켓 사용이라는 상위 수준 패턴은 세 경우 모두 동일합니다.

공통 네트워크 어댑터 인터페이스

이 섹션은 서로 다른 하드웨어용 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 키워드

disconnect() None

네트워크에서 연결을 해제합니다.

isconnected() bool

네트워크에 연결되어 있으면 True 를 반환하고, 그렇지 않으면 False 를 반환합니다.

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 를 사용하세요.

  • gw4 IPv4 기본 게이트웨이를 가져오거나 설정합니다.

  • dhcp6 ( True/False ) 상태 비저장 DHCPv6를 통해 DNS 서버를 획득합니다. DHCPv6를 통한 IP 주소 획득은 현재 구현되어 있지 않습니다.

  • autoconf6 ( True/False ) 라우터 광고에서 공유되는 네트워크 접두사를 통해 상태 비저장 IPv6 주소를 획득합니다. 상태 비저장 주소가 획득되었는지 확인하려면 읽기 전용 속성 has_autoconf6 을 사용하세요.

  • addr4 (예: 192.168.0.4/24 ) 주소가 어떻게 획득되었는지와 관계없이 현재 IPv4 주소와 네트워크 마스크를 (ip, subnet) -튜플로 가져옵니다. 이 메서드는 정적 IPv4 주소를 (ip, subnet) -튜플 또는 CIDR 표기법으로 설정하는 데 사용할 수 있습니다.

  • addr6 (예: fe80::1234:5678 ) 현재 IPv6 주소 목록을 (ip, state, preferred_lifetime, valid_lifetime) -튜플로 가져옵니다. 여기에는 링크-로컬, slaac, 정적 주소가 포함됩니다. preferred_lifetimevalid_lifetime 은 각 IPv6 주소의 남은 유효 및 선호 수명을 초 단위로 나타냅니다. state 는 주소의 현재 상태를 나타냅니다:

    • 0x08 - 0x0f 은 주소가 잠정적임을 나타내며, 보낸 프로브 수를 셉니다.

    • 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() 에서 다루는)을 넘어서는 추가 매개변수를 다룰 수 있습니다. 여기에는 네트워크별 및 하드웨어별 매개변수가 포함됩니다. 매개변수를 설정할 때는 키워드 인수 구문을 사용해야 하며, 여러 매개변수를 한 번에 설정할 수 있습니다. 조회할 때는 매개변수 이름을 문자열로 따옴표로 묶어야 하며, 한 번에 하나의 매개변수만 조회할 수 있습니다:

# 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

라디오 규정 준수에 사용할 두 글자 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 구성 매개변수를 가져오거나 설정합니다. 지원되는 매개변수는 다음과 같습니다(특정 매개변수의 사용 가능 여부는 포트 및 특정 네트워크 인터페이스에 따라 다릅니다):

  • dns DNS 서버를 가져오거나 설정합니다. 이 메서드는 IPv4와 IPv6 주소를 모두 지원할 수 있습니다.

  • prefer ( 4/6 ) 도메인 이름에 A 레코드와 AAAA 레코드가 모두 있는 경우 반환할 주소 유형을 지정합니다. 이는 로컬 DNS 캐시를 지우지 않으므로, 이전에 획득한 주소는 변경되지 않을 수 있다는 점에 유의하세요.