class WINC – WiFi 실드 드라이버

WINC 클래스는 OpenMV WiFi Shield의 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에는 하드웨어 제약이 있습니다:

  • 한 번에 하나의 클라이언트만 연결할 수 있습니다.

  • 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

비밀번호 key, 보안 모드 security (OPEN, WPA_PSK 또는 802.1X 상수 중 하나)를 사용하여 라디오 channel 에서 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-튜플과 함께 호출하면 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를 정수(dBm)로.

  • [1] 보안 모드 – 보안 상수 중 하나.

  • [2] SSID 문자열.

  • [3] BSSID를 "XX:XX:XX:XX:XX:XX" MAC 문자열로.

  • [4] IPv4 주소를 점-사분 문자열로.

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 펌웨어가 기대하는 레이아웃과 일치해야 합니다(일반적으로 WINC SDK와 함께 Atmel / Microchip에서 제공).

이 호출은 플래시가 프로그래밍되고 검증되는 동안 몇 초간 차단됩니다. 호출이 반환된 후 OpenMV Cam의 전원을 다시 켜서 WINC1500이 새 이미지로 시작하도록 하십시오.

모듈이 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()에 필요합니다.