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 shieldmodeเลือกโหมดการทำงานที่โมดูลเริ่มต้น:WINC.MODE_STA-- station / client เชื่อมต่อกับ access point ด้วยconnect()นี่คือโหมดเริ่มต้นWINC.MODE_AP-- access point กำหนดค่า AP ด้วยstart_ap()แล้วรับการเชื่อมต่อจาก clientWINC.MODE_P2P-- WiFi DirectWINC.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) บนช่องchannelsecurityและ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ไม่ รองรับ APIAbstractNIC.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()
Note
ยังมีค่าความปลอดภัยแบบ WPA/WPA2 Enterprise (802.1X) เฟิร์มแวร์แสดงภายใต้ชื่อ
802_1Xซึ่งไม่ใช่ตัวระบุ Python ที่ถูกต้อง -- เข้าถึงผ่านgetattr(network.WINC, "802_1X")- MODE_BSP: int¶
เริ่มต้นเฉพาะ board-support package ของ WINC -- วิทยุไม่ถูกเปิดใช้งาน ใช้ในกระบวนการอัปเดตเฟิร์มแวร์
- MODE_FIRMWARE: int¶
โหมดอัปเดตเฟิร์มแวร์ ต้องใช้สำหรับ
fw_dump()และfw_update()