network — הגדרת רשת¶
מודול זה מספק מנהלי התקן לרשת והגדרת ניתוב. כדי להשתמש במודול זה, יש להתקין וריאנט/בנייה של MicroPython עם יכולות רשת. מנהלי התקן לרשת עבור חומרה ספציפית זמינים בתוך מודול זה ומשמשים להגדרת ממשק(י) רשת חומרתיים. שירותי הרשת המסופקים על ידי הממשקים המוגדרים זמינים אז לשימוש דרך המודול socket.
לדוגמה:
import network
import socket
import time
nic = network.WLAN(network.WLAN.IF_STA)
nic.active(True)
nic.connect("your-ssid", "your-key")
print("Waiting for connection...")
while not nic.isconnected():
time.sleep(1)
print(nic.ipconfig("addr4"))
# Open a TCP socket as usual.
addr = socket.getaddrinfo("micropython.org", 80)[0][-1]
s = socket.socket()
s.connect(addr)
s.send(b"GET / HTTP/1.1\r\nHost: micropython.org\r\n\r\n")
data = s.recv(1000)
s.close()
החלף את WLAN ב-WINC (מגן WiFi ישן) או ב-LAN (Ethernet מובנה) כמתאים למצלמה. התבנית ברמה הגבוהה של בנייה -> הפעלה -> חיבור -> שימוש בשקעים (sockets) זהה בכל שלושת המקרים.
ממשק מתאם רשת משותף¶
סעיף זה מתאר מחלקת בסיס מופשטת (מרומזת) עבור כל מחלקות ממשק הרשת המיושמות על ידי MicroPython ports עבור חומרה שונה. משמעות הדבר היא ש-MicroPython אינו מספק בפועל מחלקת AbstractNIC, אך כל מחלקת NIC ממשית, כמתואר בסעיפים הבאים, מממשת מתודות כמתואר כאן.
- class network.AbstractNIC(id: int | None = None, *args: Any, **kwargs: Any) None¶
יצירת מופע של אובייקט ממשק רשת. הפרמטרים תלויים בממשק הרשת. אם קיים יותר מממשק אחד מאותו סוג, הפרמטר הראשון צריך להיות
id.- active(is_active: bool | None = None, /) bool¶
הפעלת או כיבוי ממשק הרשת.
ללא ארגומנט, מוחזר המצב הנוכחי –
Trueכאשר הממשק פעיל,Falseאחרת.העבר
Trueכדי להפעיל את הממשק: הפעל / אפס את בקר הרשת הבסיסי, טען קושחה במקום בו ישים, והפעל את מחסנית ה-IP בממשק זה. קריאות עוקבות המתקשרות עם הרשת (connect(),scan(),ipconfig(), …) דורשות שהממשק יהיה פעיל.העבר
Falseכדי להשבית את הממשק: פרק את מחסנית ה-IP ושחרר את משאבי מנהל ההתקן. בממשקים אלחוטיים פעולה זו גם מבטלת את השיוך מכל רשת המצורפת כעת.ההתנהגות של קריאה למתודות אחרות בממשק לא פעיל אינה מוגדרת.
- connect(service_id: str | None = None, key: str | None = None, *, bssid: bytes | None = None, **kwargs: Any) None¶
חיבור הממשק לרשת. מתודה זו אופציונלית, וזמינה רק עבור ממשקים שאינם ”מחוברים תמיד“. אם לא ניתנים פרמטרים, התחבר לשירות ברירת המחדל (או היחיד). אם ניתן פרמטר יחיד, הוא המזהה הראשי של שירות להתחבר אליו. הוא עשוי להיות מלווה במפתח (סיסמה) הנדרש לגישה לאותו שירות. ייתכנו פרמטרים נוספים שרירותיים מסוג מילת מפתח בלבד, בהתאם לסוג מדיום הרשת ו/או למכשיר מסוים. ניתן להשתמש בפרמטרים כדי: א) לציין סוגי מזהי שירות חלופיים; ב) לספק פרמטרי חיבור נוספים. עבור סוגי מדיום שונים, קיימות קבוצות שונות של פרמטרים מוגדרים מראש/מומלצים, ובהן:
WiFi: מילת המפתח bssid כדי להתחבר ל-BSSID ספציפי (כתובת MAC)
- scan(**kwargs: Any) List[Tuple]¶
סריקה לאיתור שירותי/חיבורי הרשת הזמינים. מוחזרת רשימה של רביעיות עם פרמטרי השירות שהתגלו. עבור מדיות רשת שונות, קיימות וריאציות שונות של פורמטי רביעיות מוגדרים מראש/מומלצים, ובהן:
WiFi: (ssid, bssid, channel, RSSI, security, hidden). ייתכנו שדות נוספים, ספציפיים למכשיר מסוים.
הפונקציה עשויה לקבל ארגומנטי מילות מפתח נוספים כדי לסנן את תוצאות הסריקה (למשל סריקה עבור שירות מסוים, בערוץ מסוים, עבור שירותים של קבוצה מסוימת וכו«), וכדי להשפיע על משך הסריקה ועל פרמטרים אחרים. במקום שבו אפשר, שמות הפרמטרים צריכים להתאים לאלה שב-connect().
- status(param: str | None = None) Any¶
שאילתת מידע סטטוס דינמי של הממשק. כאשר נקראת ללא ארגומנט הערך המוחזר מתאר את סטטוס קישור הרשת. אחרת param צריך להיות מחרוזת המציינת את פרמטר הסטטוס המסוים שיש לאחזר.
סוגי הערכים המוחזרים והערכים תלויים במדיום/בטכנולוגיה של הרשת. חלק מהפרמטרים שעשויים להיתמך הם:
WiFi STA: השתמש ב-
'rssi'כדי לאחזר את ה-RSSI של אות ה-APWiFi AP: השתמש ב-
'stations'כדי לאחזר רשימה של כל ה-STA-ים המחוברים ל-AP. הרשימה מכילה רביעיות מהצורה (MAC, RSSI).
- ipconfig(param: str) Any¶
- ipconfig(**kwargs: Any) None
קבלה או הגדרה של פרמטרי הגדרת IP ספציפיים לממשק. הפרמטרים הנתמכים הם הבאים (זמינות פרמטר מסוים תלויה ב-port ובממשק הרשת הספציפי):
dhcp4(True/False) השג כתובת IPv4, שער ושרת dns דרך DHCP. מתודה זו אינה חוסמת ואינה ממתינה להשגת כתובת. כדי לבדוק אם הושגה כתובת, השתמש במאפיין לקריאה בלבדhas_dhcp4.gw4קבלה/הגדרה של שער ברירת המחדל של IPv4.dhcp6(True/False) השג שרת DNS דרך DHCPv6 חסר מצב. השגת כתובות IP דרך DHCPv6 אינה ממומשת כעת.autoconf6(True/False) השג כתובת IPv6 חסרת מצב דרך תחילית הרשת המשותפת בהכרזות הנתב. כדי לבדוק אם הושגה כתובת חסרת מצב, השתמש במאפיין לקריאה בלבדhas_autoconf6.addr4(למשל192.168.0.4/24) השג את כתובת ה-IPv4 הנוכחית ואת מסיכת הרשת כרביעייה(ip, subnet), ללא קשר לאופן השגת כתובת זו. ניתן להשתמש במתודה זו כדי להגדיר כתובת IPv4 סטטית, או כרביעייה(ip, subnet)או בסימון CIDR.addr6(למשלfe80::1234:5678) השג רשימה של כתובות IPv6 נוכחיות כרביעייה(ip, state, preferred_lifetime, valid_lifetime). זה כולל כתובות link-local, slaac וסטטיות.preferred_lifetimeו-valid_lifetimeמייצגים את משך החיים התקף והמועדף הנותר של כל כתובת IPv6, בשניות.stateמציין את המצב הנוכחי של הכתובת:0x08-0x0fמציין שהכתובת ניסיונית, ומונה את מספר הבדיקות שנשלחו.0x10הכתובת הוצאה משימוש (אך עדיין תקפה)0x30הכתובת מועדפת (ותקפה)0x40הכתובת כפולה ולא ניתן להשתמש בה.
ניתן להשתמש במתודה זו כדי להגדיר כתובת IPv6 סטטית, על ידי הגדרת פרמטר זה לכתובת, כמו
fe80::1234:5678.
- ifconfig(config: Tuple[str, str, str, str] | None = None) Tuple[str, str, str, str] | None¶
הערה
פונקציה זו הוצאה משימוש, השתמש ב-
ipconfig()במקום.קבלה/הגדרה של פרמטרי ממשק רשת ברמת ה-IP: כתובת IP, מסיכת רשת, שער ושרת DNS. כאשר נקראת ללא ארגומנטים, מתודה זו מחזירה רביעייה עם המידע הנ“ל. כדי להגדיר את הערכים הנ“ל, העבר רביעייה עם המידע הנדרש. לדוגמה:
nic.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8'))
- config(param: str) Any¶
- config(**kwargs: Any) None
קבלה או הגדרה של פרמטרי ממשק רשת כלליים. מתודות אלה מאפשרות לעבוד עם פרמטרים נוספים מעבר להגדרת ה-IP הסטנדרטית (כפי שמטופלת על ידי
ipconfig()). אלה כוללים פרמטרים ספציפיים לרשת וספציפיים לחומרה. להגדרת פרמטרים, יש להשתמש בתחביר ארגומנט מילת מפתח, וניתן להגדיר מספר פרמטרים בבת אחת. לשם שאילתה, יש לצטט שם פרמטר כמחרוזת, וניתן לבצע שאילתה על פרמטר אחד בלבד בכל פעם:# Set WiFi access point name (formally known as SSID) and WiFi channel ap.config(ssid='My AP', channel=11) # Query params one by one print(ap.config('ssid')) print(ap.config('channel'))
מימושי מחלקות רשת ספציפיים¶
המחלקות הקונקרטיות הבאות מממשות את ממשק AbstractNIC ומספקות דרך לשלוט בממשקי רשת מסוגים שונים.
פונקציות רשת¶
להלן הפונקציות הזמינות במודול network.
- network.country(code: str | None = None) str | None¶
קבלה או הגדרה של קוד המדינה ISO 3166-1 Alpha-2 בן שתי האותיות שישמש לתאימות רדיו.
אם הפרמטר code מסופק, המדינה תוגדר לערך זה. אם הפונקציה נקראת ללא פרמטרים, מוחזרת המדינה הנוכחית.
קוד ברירת המחדל
"XX"מייצג את האזור ”העולמי“.
- network.hostname(name: str | None = None) str | None¶
קבלה או הגדרה של שם המארח שיזהה מכשיר זה ברשת. הוא ישמש את כל הממשקים.
- שם מארח זה משמש עבור:
שליחה לשרת ה-DHCP בבקשת הלקוח. (אם משתמשים ב-DHCP)
שידור דרך mDNS. (אם מופעל)
אם הפרמטר name מסופק, שם המארח יוגדר לערך זה. אם הפונקציה נקראת ללא פרמטרים, מוחזר שם המארח הנוכחי.
שינוי בשם המארח מיושם בדרך כלל רק במהלך החיבור. עבור DHCP זאת משום ששם המארח הוא חלק מבקשת לקוח ה-DHCP, ומימוש ה-mDNS ברוב ה-ports מאתחל את שם המארח רק פעם אחת במהלך החיבור. מסיבה זו, עליך להגדיר את שם המארח לפני הפעלת/חיבור ממשקי הרשת שלך.
אורך שם המארח מוגבל ל-32 תווים. MicroPython ports עשויים לבחור להגדיר מגבלה נמוכה יותר מטעמי זיכרון. אם השם הנתון אינו מתאים, מועלית שגיאת
ValueError.שם המארח של ברירת המחדל הוא בדרך כלל שם הלוח.
- network.ipconfig(param: str) Any¶
- network.ipconfig(**kwargs: Any) None
קבלה או הגדרה של פרמטרי הגדרת IP גלובליים. הפרמטרים הנתמכים הם הבאים (זמינות פרמטר מסוים תלויה ב-port ובממשק הרשת הספציפי):
dnsקבלה/הגדרה של שרת DNS. מתודה זו יכולה לתמוך בשתיהן, כתובות IPv4 ו-IPv6.prefer(4/6) ציין איזה סוג כתובת להחזיר, אם לשם מתחם יש גם רשומות A וגם AAAA. שים לב, שזה אינו מנקה את מטמון ה-DNS המקומי, כך שכתובות שהושגו קודם לכן עשויות שלא להשתנות.