class WINC – מנהל התקן של מגן WiFi

המחלקה WINC מפעילה את מודול ה-WiFi‏ Atmel WINC1500‏ 802.11 b/g/n שעל מגן ה-WiFi של OpenMV. זמין ב-OpenMV Cam M4, M7, H7, H7 Plus ו-Pure Thermal (לוחות ה-STM32 שעבורם תוכנן מגן ה-WiFi). עבור לוחות עם 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 גורם לכל ה-socket-ים המקושרים להפסיק לעבוד כאשר הלקוח מתנתק. הגדר פסק זמן ב-socket של השרת כך שהוא יזרוק חריגה שתוכל להשתמש בה כדי לפתוח אותו מחדש.

מתודות

active(is_active: bool | None = None) bool

מעלה או מוריד את מגן ה-WiFi.

ללא ארגומנט, מחזיר את המצב הנוכחי – True כאשר המגן מאותחל והרדיו פעיל, False אחרת.

active(True) מבצע את לחיצת היד של קושחת WINC1500 דרך SPI ומעלה את הרדיו במצב ה-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

מתחבר לרשת ה-WiFi‏ ssid באמצעות הסיסמה key, מצב אבטחה security (אחד מ-OPEN, WPA_PSK או הקבוע של 802.1X) בערוץ הרדיו channel. security ו-channel הם מילות מפתח בלבד.

לאחר ההתחברות השתמש במודול 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 כדי להגדיר ולהפעיל את נקודת הגישה. ה-AP תומך רק באבטחת OPEN או WEP; אם נעשה שימוש ב-WEP, key נדרש.

disconnect() None

במצב STA, מנתק את ההתחברות מנקודת הגישה המשויכת כעת. המגן נשאר פעיל; קרא ל-connect() כדי להתחבר מחדש. פעולה ריקה כאשר לא משויך כעת.

isconnected() bool

במצב STA מחזיר True כאשר משויך לנקודת גישה וגם התקבלה כתובת IPv4 (דרך DHCP או ifconfig()). מחזיר False בעוד נמצא בשלב האימות / השיוך / DHCP.

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 איברים: מגדיר תצורת 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)

הערה

WINC אינו מממש את ה-API המודרני AbstractNIC.ipconfig(); השתמש כאן ב-ifconfig().

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

מחזיר טופל בן 5 איברים המתאר את השיוך הנוכחי:

  • [0] RSSI כמספר שלם (dBm).

  • [1] מצב אבטחה – אחד מקבועי האבטחה.

  • [2] מחרוזת SSID.

  • [3] BSSID כמחרוזת MAC בפורמט "XX:XX:XX:XX:XX:XX".

  • [4] כתובת IPv4 כמחרוזת נקודה-רביעייה.

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

סורק נקודות גישה סמוכות. מחזיר רשימה של טופלים בני 6 איברים:

  • [0] מחרוזת SSID.

  • [1] BSSID כמחרוזת MAC בפורמט "XX:XX:XX:XX:XX:XX".

  • [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]

מחזיר טופל בן 7 איברים המתאר את גרסאות הקושחה ומנהל ההתקן של WINC1500:

  • [0] קושחה ראשי (major).

  • [1] קושחה משני (minor).

  • [2] תיקון (patch) קושחה.

  • [3] מנהל התקן ראשי (major).

  • [4] מנהל התקן משני (minor).

  • [5] תיקון (patch) מנהל התקן.

  • [6] גרסת חומרת השבב.

fw_dump(path: str) None

קורא את זיכרון הפלאש (flash) הפנימי של WINC1500 וכותב את תמונת הקושחה המתקבלת לקובץ ב-path במערכת הקבצים של OpenMV. השתמש בכך כדי לגבות את התמונה המותקנת כעת לפני קריאה ל-fw_update().

דורש שהמודול ייבנה עם mode=MODE_FIRMWARE.

fw_update(path: str) None

מוחק את זיכרון הפלאש (flash) הפנימי של WINC1500 ומתכנת אותו עם תמונת הקובץ הבינארי ב-path. התמונה חייבת להתאים לפריסה שקושחת OpenMV מצפה לה (מסופקת בדרך כלל על ידי Atmel / Microchip עם ה-WINC SDK).

הקריאה חוסמת למשך מספר שניות בזמן שזיכרון הפלאש מתוכנת ומאומת. בצע מחזור הפעלה (power-cycle) ל-OpenMV Cam לאחר שהקריאה חוזרת כדי שה-WINC1500 יתחיל מהתמונה החדשה.

דורש שהמודול ייבנה עם mode=MODE_FIRMWARE.

קבועים

OPEN: int

ערך אבטחה עבור רשת לא מוצפנת. העבר לארגומנט security של connect() / start_ap().

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

מאתחל את חבילת תמיכת הלוח (BSP) של ה-WINC בלבד – הרדיו אינו מועלה. משמש בתהליך עדכון הקושחה.

MODE_FIRMWARE: int

מצב עדכון קושחה. נדרש על ידי fw_dump() ו-fw_update().