class WINC -- ไดรเวอร์ WiFi shield

คลาส WINC ขับเคลื่อนโมดูล WiFi แบบ Atmel WINC1500 802.11 b/g/n บน OpenMV WiFi Shield รองรับบน OpenMV Cam M4, M7, H7, H7 Plus และ Pure Thermal (บอร์ด STM32 ที่ WiFi shield ออกแบบมาสำหรับ) สำหรับบอร์ดที่มี WiFi ในตัว (OpenMV Cam N6, OpenMV Cam RT1062, Arduino Giga) ให้ใช้ WLAN แทน

ตัวอย่าง -- เชื่อมต่อกับ access point และพิมพ์ที่อยู่:

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

ตัวอย่าง -- สร้าง access point แบบเปิดและรอ client:

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 shield

mode เลือกโหมดการทำงานที่โมดูลเริ่มต้น:

  • WINC.MODE_STA -- station / client เชื่อมต่อกับ access point ด้วย connect() นี่คือโหมดเริ่มต้น

  • WINC.MODE_AP -- access point กำหนดค่า AP ด้วย start_ap() แล้วรับการเชื่อมต่อจาก client

  • WINC.MODE_P2P -- WiFi Direct

  • WINC.MODE_BSP -- เปิดใช้งานเฉพาะ BSP (ไม่มีวิทยุ)

  • WINC.MODE_FIRMWARE -- โหมดอัปเดตเฟิร์มแวร์ ต้องใช้สำหรับ fw_dump() และ fw_update()

Note

ในโหมด AP WINC1500 มีข้อจำกัดด้านฮาร์ดแวร์:

  • รองรับ client เพียงหนึ่งตัวในเวลาเดียวกัน

  • รองรับเฉพาะความปลอดภัยแบบ OPEN หรือ WEP เท่านั้น

  • บั๊กในเฟิร์มแวร์ของโมดูล WiFi ทำให้ซ็อกเก็ตที่ผูกไว้หยุดทำงานเมื่อ client ตัดการเชื่อมต่อ ให้ตั้ง timeout บน server socket เพื่อให้เกิด exception ที่ใช้เปิดซ็อกเก็ตใหม่ได้

เมธอด

active(is_active: bool | None = None) bool

เปิดหรือปิด WiFi shield

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

active(True) ทำการ handshake เฟิร์มแวร์ WINC1500 ผ่าน SPI และเปิดวิทยุในโหมด mode ที่กำหนดไว้ ถ้าอินเทอร์เฟซทำงานอยู่แล้วจะไม่ทำอะไร connect() จะเรียกนี้โดยอัตโนมัติหากยังไม่ได้เรียก สำหรับเมธอดอื่น (scan(), rssi(), netinfo(), ...) ต้องเรียก active(True) ก่อน

active(False) ปิดวิทยุ (WINC เปลี่ยนกลับเป็นโหมด BSP-only) และปล่อย SPI pins

connect(ssid: str, key: str | None = None, *, security: int = WINC.WPA_PSK, channel: int = 1) None

เชื่อมต่อกับเครือข่าย WiFi ssid โดยใช้รหัสผ่าน key โหมดความปลอดภัย security (หนึ่งใน OPEN, WPA_PSK หรือค่าคงที่ 802.1X) บนช่อง channel security และ channel เป็นแบบ keyword-only

หลังเชื่อมต่อแล้ว ใช้โมดูล socket เพื่อเปิดพอร์ต TCP/UDP

เมธอดนี้บล็อกจนกว่าการเชื่อมต่อสำเร็จหรือล้มเหลว

config(ssid: str, key: str | None = None, *, security: int = WINC.WPA_PSK, channel: int = 1) None

นามแฝงของ connect() มีให้เพื่อความเข้ากันได้กับโค้ดที่เรียก config บนอินเทอร์เฟซ network อื่น

start_ap(ssid: str, key: str | None = None, *, security: int = WINC.OPEN, channel: int = 1) None

นามแฝงของ connect() ที่ใช้หลังสร้างออบเจ็กต์ด้วย mode=MODE_AP เพื่อกำหนดค่าและเริ่ม access point AP รองรับเฉพาะความปลอดภัยแบบ OPEN หรือ WEP หากใช้ WEP ต้องระบุ key

disconnect() None

ในโหมด STA ยกเลิกการเชื่อมต่อจาก access point ที่เชื่อมต่ออยู่ในปัจจุบัน shield ยังคงทำงานต่อ เรียก connect() เพื่อเชื่อมต่อใหม่ ไม่ทำอะไรหากไม่ได้เชื่อมต่ออยู่

isconnected() bool

ในโหมด STA คืนค่า True เมื่อเชื่อมต่อกับ access point และ ได้รับที่อยู่ IPv4 แล้ว (ผ่าน DHCP หรือ ifconfig()) คืนค่า False ขณะยังอยู่ในขั้นตอนการยืนยันตัวตน / เชื่อมต่อ / DHCP

connected_sta() List[str]

ในโหมด AP คืนค่ารายการที่มีที่อยู่ IP ของ client ที่เชื่อมต่ออยู่ในปัจจุบัน (หรือรายการว่างหากไม่มี client เชื่อมต่อ)

wait_for_sta(timeout: int | None) List[str]

ในโหมด AP บล็อกจนกว่า client จะเชื่อมต่อและคืนค่ารายการที่มีที่อยู่ IP ของ client timeout คือเวลารอสูงสุดในมิลลิวินาที ส่ง None เพื่อรอโดยไม่มีขีดจำกัด

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

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

เรียกโดยไม่มีอาร์กิวเมนต์: คืนค่าการกำหนดค่าปัจจุบัน

เรียกด้วย 4-tuple: ตั้งค่า IP แบบคงที่แทนค่าที่ได้จาก DHCP

ตัวอย่าง -- กำหนด 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)

Note

WINC ไม่ รองรับ API AbstractNIC.ipconfig() แบบใหม่ ให้ใช้ ifconfig() แทน

netinfo() Tuple[int, int, str, str, str]

คืนค่า 5-tuple ที่อธิบายการเชื่อมต่อปัจจุบัน:

  • [0] RSSI เป็นจำนวนเต็ม (dBm)

  • [1] โหมดความปลอดภัย -- หนึ่งในค่าคงที่ความปลอดภัย

  • [2] สตริง SSID

  • [3] BSSID เป็นสตริง MAC รูปแบบ "XX:XX:XX:XX:XX:XX"

  • [4] ที่อยู่ IPv4 เป็นสตริง dotted-quad

scan() List[Tuple[str, str, int, int, int, int]]

สแกนหา access point ที่อยู่ใกล้เคียง คืนค่ารายการ 6-tuple:

  • [0] สตริง SSID

  • [1] BSSID เป็นสตริง MAC รูปแบบ "XX:XX:XX:XX:XX:XX"

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

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

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

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

สามารถเรียกได้โดยไม่ต้องเชื่อมต่อกับเครือข่ายก่อน

rssi() int

คืนค่า RSSI ในหน่วย dBm ของ access point ที่เชื่อมต่ออยู่ในปัจจุบัน โดยคร่าว: -30 ดีเยี่ยม -67 ใช้ได้สำหรับการสตรีม -80 อ่อนแอ -90 และต่ำกว่านั้นใช้ไม่ได้ มีความหมายเฉพาะในโหมด STA ขณะที่ isconnected() คืนค่า True

fw_version() Tuple[int, int, int, int, int, int, int]

คืนค่า 7-tuple ที่อธิบายเวอร์ชันเฟิร์มแวร์และไดรเวอร์ WINC1500:

  • [0] Firmware major

  • [1] Firmware minor

  • [2] Firmware patch

  • [3] Driver major

  • [4] Driver minor

  • [5] Driver patch

  • [6] การแก้ไขฮาร์ดแวร์ชิป

fw_dump(path: str) None

อ่านแฟลชภายในของ WINC1500 และเขียนภาพเฟิร์มแวร์ที่ได้ไปยังไฟล์ที่ path บนระบบไฟล์ OpenMV ใช้สิ่งนี้เพื่อสำรองข้อมูลภาพที่ติดตั้งอยู่ปัจจุบันก่อนเรียก fw_update()

ต้องสร้างโมดูลด้วย mode=MODE_FIRMWARE

fw_update(path: str) None

ลบแฟลชภายในของ WINC1500 และเขียนโปรแกรมด้วยภาพไบนารีที่ path ภาพต้องตรงกับ layout ที่เฟิร์มแวร์ OpenMV ต้องการ (มักจัดหาโดย Atmel / Microchip พร้อม WINC SDK)

การเรียกนี้บล็อกเป็นเวลาหลายวินาทีขณะที่กำลังเขียนและตรวจสอบแฟลช หลังจากการเรียกส่งคืน ให้ตัดและเปิดไฟ OpenMV Cam เพื่อให้ WINC1500 เริ่มต้นจากภาพใหม่

ต้องสร้างโมดูลด้วย mode=MODE_FIRMWARE

ค่าคงที่

OPEN: int

ค่าความปลอดภัยสำหรับเครือข่ายที่ไม่มีการเข้ารหัส ส่งให้อาร์กิวเมนต์ security ของ connect() / start_ap()

WPA_PSK: int

ค่าความปลอดภัยสำหรับ WPA/WPA2 พร้อม pre-shared key ค่าเริ่มต้นสำหรับ connect()

Note

ยังมีค่าความปลอดภัยแบบ WPA/WPA2 Enterprise (802.1X) เฟิร์มแวร์แสดงภายใต้ชื่อ 802_1X ซึ่งไม่ใช่ตัวระบุ Python ที่ถูกต้อง -- เข้าถึงผ่าน getattr(network.WINC, "802_1X")

MODE_STA: int

โหมด Station -- เชื่อมต่อกับ access point ในฐานะ client โหมดคอนสตรัคเตอร์เริ่มต้น

MODE_AP: int

โหมด Access-point -- WINC กลายเป็น AP ที่ client เชื่อมต่อ

MODE_P2P: int

โหมด WiFi-Direct (peer-to-peer)

MODE_BSP: int

เริ่มต้นเฉพาะ board-support package ของ WINC -- วิทยุไม่ถูกเปิดใช้งาน ใช้ในกระบวนการอัปเดตเฟิร์มแวร์

MODE_FIRMWARE: int

โหมดอัปเดตเฟิร์มแวร์ ต้องใช้สำหรับ fw_dump() และ fw_update()