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 المدمج) حسبما يناسب الكاميرا. النمط عالي المستوى المتمثل في الإنشاء -> التفعيل -> الاتصال -> استخدام المقابس هو نفسه في الحالات الثلاث جميعها.
واجهة محول الشبكة المشتركة¶
يصف هذا القسم فئة أساس مجرّدة (ضمنية) لجميع فئات واجهة الشبكة المُنفّذة من قِبل منافذ MicroPython لمختلف العتاد. وهذا يعني أن 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 لإشارة نقطة الوصولWiFi AP: استخدم
'stations'لاسترجاع قائمة بجميع محطات STA المتصلة بنقطة الوصول. تحتوي القائمة على مجموعات من الصيغة (MAC, RSSI).
- ipconfig(param: str) Any¶
- ipconfig(**kwargs: Any) None
الحصول على معاملات تهيئة IP الخاصة بالواجهة أو تعيينها. المعاملات المدعومة هي التالية (يعتمد توفر معامل معيّن على المنفذ وواجهة الشبكة المحددة):
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). وهذا يشمل العناوين المحلية للرابط و 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 في معظم المنافذ لا يهيّئ اسم المضيف إلا مرة واحدة أثناء الاتصال. ولهذا السبب، يجب عليك تعيين اسم المضيف قبل تفعيل/توصيل واجهات شبكتك.
طول اسم المضيف محدود بـ 32 حرفاً. وقد تختار منافذ MicroPython تعيين حد أدنى لأسباب تتعلق بالذاكرة. وإذا لم يتسع الاسم المُعطى، يُثار
ValueError.عادةً ما يكون اسم المضيف الافتراضي هو اسم اللوحة.
- network.ipconfig(param: str) Any¶
- network.ipconfig(**kwargs: Any) None
الحصول على معاملات تهيئة IP العامة أو تعيينها. المعاملات المدعومة هي التالية (يعتمد توفر معامل معيّن على المنفذ وواجهة الشبكة المحددة):
dnsالحصول على/تعيين خادم DNS. يمكن أن تدعم هذه الطريقة كلاً من عناوين IPv4 و IPv6.prefer(4/6) تحديد نوع العنوان المراد إعادته، إذا كان اسم نطاق ما يملك سجلي A و AAAA معاً. لاحظ أن هذا لا يمسح ذاكرة التخزين المؤقت المحلية لـ DNS، بحيث قد لا تتغير أي عناوين تم الحصول عليها مسبقاً.