คลาส 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¶
สร้างออบเจกต์อินเทอร์เฟซ
WLANinterface_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 ของอินเทอร์เฟซ (6bytes)"pm"-- ค่าการจัดการพลังงาน"txpower"-- กำลังส่งในหน่วย dBm"hostname"-- ชื่อโฮสต์ DHCP/mDNS เลิกใช้แล้ว; ใช้network.hostname()แทน
ไดรเวอร์ CYW43 -- พารามิเตอร์ที่ตั้งค่าได้:
antenna=<int>-- ตัวเลือกเสาอากาศchannel=<int>-- ช่อง APssid=<str>/essid=<str>-- SSID ของ APkey=<str>/password=<str>-- คีย์แบบแบ่งปันล่วงหน้าของ APsecurity=<int>-- โหมดการรับรองตัวตนของ AP (หนึ่งในค่าSEC_*)pm=<int>-- โหมดการจัดการพลังงาน (หนึ่งในค่าPM_NONE,PM_PERFORMANCE,PM_POWERSAVE)monitor=<int>-- เปิดใช้โหมด monitor / all-multicasttxpower=<int>-- กำลังส่งในหน่วย dBmtrace=<int>-- บิตมาสก์การติดตามภายในไดรเวอร์hostname=<str>-- ชื่อโฮสต์ DHCP/mDNS เลิกใช้แล้ว; ใช้network.hostname()แทน
ไดรเวอร์ NINA -- พารามิเตอร์ที่อ่านได้:
"ssid"-- SSID ปัจจุบัน (string)"security"-- โหมดการรับรองตัวตนของ AP"mac"/"bssid"-- ที่อยู่ MAC ของอินเทอร์เฟซ (6bytes)"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 ใช้ส่วนใหญ่โดยสคริปต์ทดสอบระดับต่ำและโค้ดสำหรับนำชิปขึ้นใช้งาน
ค่าคงที่¶
- SEC_WPA_WPA2: int¶
ค่าความปลอดภัยสำหรับ WPA / WPA2 ด้วยคีย์แบบแบ่งปันล่วงหน้า เป็นค่าเริ่มต้นเมื่อมีการระบุ key ไปยัง
connect()ใช้ได้กับทั้งสองไดรเวอร์
- SEC_WEP: int¶
ค่าความปลอดภัยสำหรับ WEP (Wired Equivalent Privacy) มีไว้เพื่อความเข้ากันได้กับแอ็คเซสพอยต์รุ่นเก่า -- WEP มีความล้มเหลวด้านการเข้ารหัสและไม่ควรใช้ในการติดตั้งใหม่ NINA เท่านั้น
- OPEN: int¶
นามแฝงที่เข้ากันได้กับเวอร์ชันก่อนหน้าสำหรับ
SEC_OPENโค้ดใหม่ควรใช้SEC_OPENNINA เท่านั้น
- WPA_PSK: int¶
นามแฝงที่เข้ากันได้กับเวอร์ชันก่อนหน้าสำหรับ
SEC_WPA_WPA2โค้ดใหม่ควรใช้SEC_WPA_WPA2NINA เท่านั้น