คลาส WLAN -- ควบคุมอินเทอร์เฟซ WiFi ในตัว

คลาส WLAN ขับเคลื่อนวิทยุ WiFi บนบอร์ดสำหรับ OpenMV Cam รุ่นใหม่ คลาสเดียวกันนี้ครอบคลุมไดรเวอร์พื้นฐานสองตัวที่แตกต่างกันขึ้นอยู่กับ WiFi MCU ของบอร์ด:

  • CYW43 (โมดูล WiFi Infineon CYW43xxx Murata) ใช้กับ OpenMV Cam N6, OpenMV Cam RT1062, Arduino Portenta H7, Arduino Nicla Vision และ Arduino Giga R1 WiFi

  • NINA W10 (u-blox NINA-W10 / ESP32-WROOM) ใช้กับ Arduino Nano RP2040 Connect

ไดรเวอร์ทั้งสองเปิดเผยชื่อเมธอดเหมือนกัน แต่แตกต่างกันในบางอาร์กิวเมนต์และชุดคีย์ config() ที่รองรับ ความแตกต่างต่างๆ จะระบุไว้ด้านล่าง

OpenMV Cam รุ่นเก่าที่มี WiFi shield WINC1500 (M4 / M7 / H7 / H7 Plus / Pure Thermal) ใช้ WINC แทน

ตัวอย่างการใช้งาน:

import network

# Enable the station interface and connect to a WiFi AP.
nic = network.WLAN(network.WLAN.IF_STA)
nic.active(True)
nic.connect("your-ssid", "your-key")
while not nic.isconnected():
    pass

print(nic.ipconfig("addr4"))

คอนสตรัคเตอร์

class network.WLAN(interface_id: int = WLAN.IF_STA) None

สร้างออบเจกต์อินเทอร์เฟซ WLAN

interface_id เลือกอินเทอร์เฟซที่จะดำเนินการ:

  • WLAN.IF_STA -- โหมดสถานี / ไคลเอนต์ เชื่อมต่อกับแอ็คเซสพอยต์ต้นทางด้วย connect() ซึ่งเป็นค่าเริ่มต้น

  • WLAN.IF_AP -- โหมดแอ็คเซสพอยต์ กำหนดค่า AP ด้วย config() และรับการเชื่อมต่อจากไคลเอนต์

วิทยุทางกายภาพเดียวกันรองรับทั้งสองอินเทอร์เฟซ การสร้างอินเทอร์เฟซหนึ่งไม่ได้ป้องกันการสร้างอีกอินเทอร์เฟซ

เมธอด

active(is_active: bool | None = None) bool

เปิดหรือปิดวิทยุ WiFi

หากไม่มีอาร์กิวเมนต์ จะคืนค่าสถานะปัจจุบัน -- True ขณะที่วิทยุทำงาน False ในกรณีอื่น

active(True) เปิดใช้งาน WiFi MCU โหลดเฟิร์มแวร์ (CYW43 ดึงบล็อบเฟิร์มแวร์จากแฟลช; NINA ตรวจสอบเวอร์ชันเฟิร์มแวร์ที่แฟลชอยู่ในปัจจุบัน) และเปิดใช้งาน lwIP netif สำหรับอินเทอร์เฟซนี้ เมธอดอื่นๆ ทั้งหมด -- connect(), scan(), ipconfig() และอื่นๆ -- ต้องการให้อินเทอร์เฟซทำงานอยู่

active(False) ปิดวิทยุกลับลง บน STA อินเทอร์เฟซ จะยกเลิกการเชื่อมต่อจาก AP ปัจจุบันและปล่อย netif ด้วย

connect(ssid: str, key: str | None = None, *, security: int = -1, bssid: bytes | None = None, channel: int = -1) None

เชื่อมต่อ STA อินเทอร์เฟซกับแอ็คเซสพอยต์ที่กำหนด

ssid -- SSID ของเครือข่าย (string หรือ bytes)

key -- รหัสผ่าน / คีย์แบบแบ่งปันล่วงหน้า ส่ง None สำหรับเครือข่ายแบบเปิด

security (keyword-only) -- หนึ่งในค่าคงที่ SEC_* ค่า -1 (ค่าเริ่มต้น) จะเลือกอัตโนมัติ: SEC_OPEN เมื่อ key ว่าง หรือ SEC_WPA_WPA2 ในกรณีอื่น

bssid (keyword-only, CYW43 เท่านั้น) -- จำกัดการเชื่อมต่อกับ AP ที่มีที่อยู่ MAC ขนาด 6 ไบต์นี้ ไดรเวอร์ NINA จะไม่สนใจค่านี้

channel (keyword-only) -- ช่องวิทยุที่ต้องการ ค่าเริ่มต้นคือ "ให้ไดรเวอร์เลือก"

disconnect() None

ในโหมด STA ยกเลิกการเชื่อมต่อจากแอ็คเซสพอยต์ที่เชื่อมต่ออยู่ในปัจจุบัน อินเทอร์เฟซยังคงทำงานอยู่ เรียก connect() อีกครั้งเพื่อเชื่อมต่อใหม่ หรือ active() (False) เพื่อปิดวิทยุโดยสมบูรณ์ ไม่มีผลเมื่อไม่ได้เชื่อมต่ออยู่

isconnected() bool

ในโหมด STA คืนค่า True เมื่อเชื่อมต่อกับแอ็คเซสพอยต์ และ ได้รับที่อยู่ IPv4 จาก DHCP (หรือกำหนดแบบ static ผ่าน ipconfig()) คืนค่า False ขณะที่ลิงก์ยังอยู่ในขั้นตอนการรับรองตัวตน/การเชื่อมต่อ/DHCP

ในโหมด AP คืนค่า True เมื่อมีสถานีอย่างน้อยหนึ่งสถานีเข้าร่วมแล้ว

scan(*, passive: bool = False, ssid: bytes | None = None, bssid: bytes | None = None) List[Tuple[bytes, bytes, int, int, int, int]]

สแกนหาแอ็คเซสพอยต์ในบริเวณใกล้เคียงและคืนค่ารายการ 6-tuple:

  • [0] SSID (bytes; ว่างเปล่าสำหรับเครือข่ายที่ซ่อน)

  • [1] BSSID (MAC ขนาด 6 ไบต์, bytes) แปลงด้วย binascii.hexlify()

  • [2] หมายเลขช่อง

  • [3] RSSI ในหน่วย dBm

  • [4] โหมดความปลอดภัย (หนึ่งในค่าคงที่ SEC_*)

  • [5] สงวนไว้ (เสมอ 1)

อาร์กิวเมนต์คีย์เวิร์ดทั้งหมดใช้ได้กับ CYW43 เท่านั้น:

  • passive -- ถ้าเป็น True ใช้การสแกนแบบ passive แทนการสแกนแบบ active probe-request ตามค่าเริ่มต้น

  • ssid -- จำกัดการสแกนไปยัง SSID เดียว

  • bssid -- จำกัดการสแกนไปยัง BSSID เดียว

การสแกนมีความหมายเฉพาะบน STA อินเทอร์เฟซเท่านั้น

status() int
status(param: str) Any

ตรวจสอบสถานะการเชื่อมต่อ

หากไม่มีอาร์กิวเมนต์ คืนค่าสถานะลิงก์เป็นจำนวนเต็มขนาดเล็ก (การเข้ารหัสเฉพาะไดรเวอร์ -- ค่าที่เป็น truthy หมายความว่า "เชื่อมต่อแล้ว")

เมื่อมีอาร์กิวเมนต์ string:

  • "rssi" -- ในโหมด STA คืนค่า RSSI ปัจจุบันในหน่วย dBm

  • "stations" -- ในโหมด AP คืนค่ารายการสถานีที่เชื่อมต่ออยู่ CYW43 คืนค่า [(mac_bytes,), ...]; NINA คืนค่า [ip_string, ...]

ifconfig(config: Tuple[str, str, str, str] | None = None) Tuple[str, str, str, str] | None

รับหรือตั้งค่าพารามิเตอร์อินเทอร์เฟซ IPv4 เป็น 4-tuple ของ string แบบ dotted-quad (ip, subnet, gateway, dns)

Note

ใช้ ipconfig() สำหรับโค้ดใหม่:

nic.ipconfig(addr4="192.168.0.4/24", gw4="192.168.0.1")
network.ipconfig(dns="8.8.8.8")
ipconfig(param: str) Any
ipconfig(**kwargs: Any) None

รับหรือตั้งค่าพารามิเตอร์อินเทอร์เฟซ IPv4 / IPv6 ไดรเวอร์ CYW43 มอบหมายไปยังการใช้งาน lwIP มาตรฐานและรองรับชุดคีย์เต็มรูปแบบที่บันทึกไว้ใน AbstractNIC.ipconfig() ไดรเวอร์ NINA ใช้งานชุดย่อยต่ออินเทอร์เฟซที่เล็กกว่า -- dhcp4 และ has_dhcp4 (อ่านได้อย่างเดียว) รวมถึง addr4 และ gw4 สำหรับการรับ / ตั้งค่า

config(param: str) Any
config(**kwargs: Any) None

รับหรือตั้งค่าพารามิเตอร์อินเทอร์เฟซเฉพาะ WiFi

เมื่อมีอาร์กิวเมนต์ string เดียวในตำแหน่ง จะคืนค่าของพารามิเตอร์นั้น เมื่อใช้อาร์กิวเมนต์คีย์เวิร์ด จะตั้งค่าพารามิเตอร์หนึ่งตัวหรือมากกว่า -- การเปลี่ยนแปลงที่ส่งผลต่อ AP ที่กำลังทำงานจะทำให้ AP ถูกหยุดและเริ่มใหม่โดยอัตโนมัติ

ตัวอย่าง:

# Set up the access-point name and channel.
ap.config(ssid="My AP", channel=11)
# Query params one at a time.
print(ap.config("ssid"))
print(ap.config("mac"))

ไดรเวอร์ CYW43 -- พารามิเตอร์ที่อ่านได้:

  • "antenna" -- ตัวเลือกเสาอากาศ (int)

  • "channel" -- ช่องปัจจุบัน

  • "ssid" / "essid" -- SSID ปัจจุบัน (string)

  • "security" -- โหมดการรับรองตัวตนของ AP (หนึ่งในค่า SEC_*)

  • "mac" -- ที่อยู่ MAC ของอินเทอร์เฟซ (6 bytes)

  • "pm" -- ค่าการจัดการพลังงาน

  • "txpower" -- กำลังส่งในหน่วย dBm

  • "hostname" -- ชื่อโฮสต์ DHCP/mDNS เลิกใช้แล้ว; ใช้ network.hostname() แทน

ไดรเวอร์ CYW43 -- พารามิเตอร์ที่ตั้งค่าได้:

  • antenna=<int> -- ตัวเลือกเสาอากาศ

  • channel=<int> -- ช่อง AP

  • ssid=<str> / essid=<str> -- SSID ของ AP

  • key=<str> / password=<str> -- คีย์แบบแบ่งปันล่วงหน้าของ AP

  • security=<int> -- โหมดการรับรองตัวตนของ AP (หนึ่งในค่า SEC_*)

  • pm=<int> -- โหมดการจัดการพลังงาน (หนึ่งในค่า PM_NONE, PM_PERFORMANCE, PM_POWERSAVE)

  • monitor=<int> -- เปิดใช้โหมด monitor / all-multicast

  • txpower=<int> -- กำลังส่งในหน่วย dBm

  • trace=<int> -- บิตมาสก์การติดตามภายในไดรเวอร์

  • hostname=<str> -- ชื่อโฮสต์ DHCP/mDNS เลิกใช้แล้ว; ใช้ network.hostname() แทน

ไดรเวอร์ NINA -- พารามิเตอร์ที่อ่านได้:

  • "ssid" -- SSID ปัจจุบัน (string)

  • "security" -- โหมดการรับรองตัวตนของ AP

  • "mac" / "bssid" -- ที่อยู่ MAC ของอินเทอร์เฟซ (6 bytes)

  • "fw_version" -- 3-tuple (major, minor, patch)

ไดรเวอร์ NINA -- พารามิเตอร์ที่ตั้งค่าได้: การเรียกจะส่งต่อไปยัง connect() และรับอาร์กิวเมนต์คีย์เวิร์ดเดียวกัน (ssid, key, security, channel) ใช้ได้เฉพาะบน AP อินเทอร์เฟซ

deinit() None

ปิดและเปิดใช้งาน WiFi MCU ใหม่และปล่อยทรัพยากรทุกอย่างที่ไดรเวอร์ถือครอง (บัฟเฟอร์เฟิร์มแวร์, lwIP netif, SPI/SDIO bus) หลังจากเรียกเมธอดนี้ ออบเจกต์ WLAN ต้องถูกสร้างใหม่ก่อนใช้งาน ใช้เมธอดนี้แทน active() (False) เมื่อต้องการรีเซ็ตโดยสมบูรณ์ (เช่น ก่อนแฟลชเฟิร์มแวร์ของวิทยุใหม่ หรือเพื่อกู้คืนจากสถานะไดรเวอร์ที่ค้างอยู่) CYW43 เท่านั้น

send_ethernet(buf: bytes) None

ใส่เฟรม Ethernet ดิบ buf เข้าไปในเส้นทางการส่งของไดรเวอร์โดยตรง โดยข้ามสแต็ก IP ออกแบบมาสำหรับผู้ใช้ที่ทำงานในระดับ L2 เท่านั้น -- การเชื่อมต่อสะพาน, โปรโตคอล EtherType แบบกำหนดเอง และอื่นๆ ที่คล้ายกัน เฟรมต้องรวม MAC ปลายทาง/ต้นทางและ EtherType (ไม่มี FCS -- ฮาร์ดแวร์จะเติมให้) CYW43 เท่านั้น

ioctl(cmd: int, buf: bytearray) None

ออกคำสั่งควบคุมเฉพาะไดรเวอร์ cmd คือรหัส ioctl ตัวเลขที่กำหนดโดยเฟิร์มแวร์วิทยุพื้นฐาน และ buf คือบัฟเฟอร์ที่แก้ไขได้ที่ใช้สำหรับทั้ง payload คำสั่งและการตอบกลับ ชุดของค่า cmd ที่ถูกต้องนั้นเฉพาะเจาะจงกับไดรเวอร์และไม่สามารถใช้ร่วมกันได้ระหว่าง CYW43 และ NINA ใช้ส่วนใหญ่โดยสคริปต์ทดสอบระดับต่ำและโค้ดสำหรับนำชิปขึ้นใช้งาน

ค่าคงที่

IF_STA: int

ตัวระบุอินเทอร์เฟซสถานี / ไคลเอนต์ ส่งไปยังคอนสตรัคเตอร์เพื่อเลือกโหมด STA

IF_AP: int

ตัวระบุอินเทอร์เฟซแอ็คเซสพอยต์ ส่งไปยังคอนสตรัคเตอร์เพื่อเลือกโหมด AP

SEC_OPEN: int

ค่าความปลอดภัยสำหรับเครือข่ายที่ไม่เข้ารหัส ใช้ได้กับทั้งสองไดรเวอร์

SEC_WPA_WPA2: int

ค่าความปลอดภัยสำหรับ WPA / WPA2 ด้วยคีย์แบบแบ่งปันล่วงหน้า เป็นค่าเริ่มต้นเมื่อมีการระบุ key ไปยัง connect() ใช้ได้กับทั้งสองไดรเวอร์

SEC_WPA3: int

ค่าความปลอดภัยสำหรับ WPA3 (SAE) ด้วยคีย์แบบแบ่งปันล่วงหน้า CYW43 เท่านั้น

SEC_WPA2_WPA3: int

ค่าความปลอดภัยสำหรับโหมดการเปลี่ยนผ่าน WPA2 / WPA3 CYW43 เท่านั้น

SEC_WEP: int

ค่าความปลอดภัยสำหรับ WEP (Wired Equivalent Privacy) มีไว้เพื่อความเข้ากันได้กับแอ็คเซสพอยต์รุ่นเก่า -- WEP มีความล้มเหลวด้านการเข้ารหัสและไม่ควรใช้ในการติดตั้งใหม่ NINA เท่านั้น

OPEN: int

นามแฝงที่เข้ากันได้กับเวอร์ชันก่อนหน้าสำหรับ SEC_OPEN โค้ดใหม่ควรใช้ SEC_OPEN NINA เท่านั้น

WEP: int

นามแฝงที่เข้ากันได้กับเวอร์ชันก่อนหน้าสำหรับ SEC_WEP โค้ดใหม่ควรใช้ SEC_WEP NINA เท่านั้น

WPA_PSK: int

นามแฝงที่เข้ากันได้กับเวอร์ชันก่อนหน้าสำหรับ SEC_WPA_WPA2 โค้ดใหม่ควรใช้ SEC_WPA_WPA2 NINA เท่านั้น

PM_NONE: int

ส่งไปยัง config(pm=...) เพื่อปิดใช้งานการจัดการพลังงาน WiFi CYW43 เท่านั้น

PM_PERFORMANCE: int

ส่งไปยัง config(pm=...) เพื่อเปิดใช้งานการจัดการพลังงาน WiFi ที่ปรับแต่งเพื่อประสิทธิภาพ CYW43 เท่านั้น

PM_POWERSAVE: int

ส่งไปยัง config(pm=...) เพื่อเปิดใช้งานการจัดการพลังงาน WiFi ที่ปรับแต่งเพื่อการประหยัดพลังงานสูงสุด CYW43 เท่านั้น