class WLAN -- التحكم في واجهات WiFi المدمجة¶
تتحكم الفئة WLAN في وحدات WiFi الراديوية المدمجة في كاميرات OpenMV Cam الحديثة. وتغلّف الفئة نفسها مشغّلين أساسيين مختلفين تبعاً لوحدة MCU الخاصة بـ WiFi على اللوحة:
CYW43 (وحدة WiFi من Infineon CYW43xxx مصنّعة من قِبل Murata). تستخدمها OpenMV Cam N6 و OpenMV Cam RT1062 و Arduino Portenta H7 و Arduino Nicla Vision و Arduino Giga R1 WiFi.
NINA W10 (u-blox NINA-W10 / ESP32-WROOM). تستخدمها Arduino Nano RP2040 Connect.
يكشف المشغّلان عن أسماء الطرق نفسها لكنهما يختلفان في بضع وسائط وفي مجموعة مفاتيح config() المقبولة. ويُشار إلى الاختلافات أدناه.
تستخدم كاميرات OpenMV المزوّدة بدرع WiFi قديم من نوع WINC1500 (M4 / M7 / H7 / H7 Plus / Pure Thermal) الفئة WINC بدلاً من ذلك.
مثال على الاستخدام:
import network
# Enable the station interface and connect to a WiFi AP.
nic = network.WLAN(network.WLAN.IF_STA)
nic.active(True)
nic.connect("your-ssid", "your-key")
while not nic.isconnected():
pass
print(nic.ipconfig("addr4"))
المُنشئات¶
- class network.WLAN(interface_id: int = WLAN.IF_STA) None¶
إنشاء كائن واجهة
WLAN.تحدد
interface_idالواجهة التي سيتم العمل عليها:WLAN.IF_STA-- وضع المحطة / العميل. الاتصال بنقطة وصول أعلى المنبع عبرconnect(). هذا هو الوضع الافتراضي.WLAN.IF_AP-- وضع نقطة الوصول. تهيئة نقطة الوصول عبرconfig()وقبول اتصالات العملاء.
تدعم وحدة الراديو الفيزيائية نفسها كلتا الواجهتين؛ وإنشاء إحداهما لا يمنع الأخرى.
الطرق¶
- active(is_active: bool | None = None) bool¶
تشغيل وحدة WiFi الراديوية أو إيقافها.
بدون وسيطة، تُعيد الحالة الحالية --
Trueبينما الراديو قيد التشغيل، وFalseخلاف ذلك.تشغّل
active(True)وحدة MCU الخاصة بـ WiFi، وتحمّل برنامجها الثابت (تجلب CYW43 كتلة البرنامج الثابت من ذاكرة الفلاش؛ بينما تتحقق NINA من إصدار البرنامج الثابت المُثبّت حالياً)، وتشغّل واجهة netif الخاصة بـ lwIP لهذه الواجهة. وتتطلب جميع الطرق الأخرى --connect()وscan()وipconfig()وما يشبهها -- أن تكون الواجهة نشطة.تعيد
active(False)إيقاف تشغيل الراديو. وعلى واجهة STA يؤدي هذا أيضاً إلى فصل الارتباط بنقطة الوصول الحالية وتحرير netif.
- connect(ssid: str, key: str | None = None, *, security: int = -1, bssid: bytes | None = None, channel: int = -1) None¶
ربط واجهة STA بنقطة الوصول المحددة.
ssid-- معرّف الشبكة SSID (سلسلة نصية أو bytes).key-- كلمة المرور / المفتاح المشترك مسبقاً. مرّرNoneلشبكة مفتوحة.security(كلمة مفتاحية فقط) -- واحد من ثوابتSEC_*. القيمة-1(الافتراضية) تختار تلقائياً:SEC_OPENعندما يكونkeyفارغاً، وSEC_WPA_WPA2خلاف ذلك.bssid(كلمة مفتاحية فقط، خاص بـ CYW43) -- قصر الارتباط على نقطة الوصول ذات عنوان MAC هذا المكوّن من 6 بايت. يتجاهله مشغّل NINA.channel(كلمة مفتاحية فقط) -- القناة الراديوية المفضّلة. الافتراضي هو "دع المشغّل يختار".
- disconnect() None¶
في وضع STA، فصل الارتباط بنقطة الوصول المرتبطة حالياً. تبقى الواجهة نشطة؛ استدعِ
connect()مرة أخرى لإعادة الارتباط، أوactive()(False)لإيقاف تشغيل الراديو تماماً. لا يُجرى أي إجراء عند عدم وجود ارتباط حالياً.
- isconnected() bool¶
في وضع STA تُعيد
Trueعند الارتباط بنقطة وصول و الحصول على عنوان IPv4 من DHCP (أو تعيينه ثابتاً عبرipconfig()). وتُعيدFalseبينما لا يزال الاتصال في مرحلة المصادقة/الارتباط/DHCP.في وضع نقطة الوصول تُعيد
Trueعند انضمام محطة واحدة على الأقل.
- scan(*, passive: bool = False, ssid: bytes | None = None, bssid: bytes | None = None) List[Tuple[bytes, bytes, int, int, int, int]]¶
مسح نقاط الوصول القريبة وإعادة قائمة من مجموعات سداسية:
[0]معرّف SSID (bytes؛ فارغ للشبكات المخفية).[1]معرّف BSSID (عنوان MAC من 6 بايت،bytes). حوّله باستخدامbinascii.hexlify().[2]رقم القناة.[3]قوة الإشارة RSSI بوحدة dBm.[4]وضع الأمان (واحد من ثوابتSEC_*).[5]محجوز (دائماً1).
جميع الوسائط المفتاحية خاصة بـ CYW43 فقط:
passive-- إذا كانTrue، يُستخدم مسح سلبي بدلاً من مسح طلب الاستكشاف النشط الافتراضي.ssid-- قصر المسح على معرّف SSID واحد.bssid-- قصر المسح على معرّف BSSID واحد.
المسح ذو معنى فقط على واجهة STA.
- status() int¶
- status(param: str) Any
الاستعلام عن حالة الاتصال.
بدون وسيطة، تُعيد حالة الاتصال كعدد صحيح صغير (ترميز خاص بالمشغّل -- القيمة الصادقة تعني "مرتبط").
مع وسيطة سلسلة نصية:
"rssi"-- في وضع STA، تُعيد قوة الإشارة RSSI الحالية بوحدة dBm."stations"-- في وضع نقطة الوصول، تُعيد قائمة بالمحطات المتصلة. تُعيد CYW43 القيمة[(mac_bytes,), ...]؛ وتُعيد NINA القيمة[ip_string, ...].
- ifconfig(config: Tuple[str, str, str, str] | None = None) Tuple[str, str, str, str] | None¶
الحصول على معاملات واجهة IPv4 أو تعيينها كمجموعة رباعية من سلاسل
(ip, subnet, gateway, dns)بصيغة الأرباع المنقّطة.ملاحظة
يُفضَّل استخدام
ipconfig()في التعليمات البرمجية الجديدة:nic.ipconfig(addr4="192.168.0.4/24", gw4="192.168.0.1") network.ipconfig(dns="8.8.8.8")
- ipconfig(param: str) Any¶
- ipconfig(**kwargs: Any) None
الحصول على معاملات واجهة IPv4 / IPv6 أو تعيينها. يفوّض مشغّل CYW43 العملية إلى تطبيق lwIP القياسي ويدعم المجموعة الكاملة من المفاتيح الموثّقة في
AbstractNIC.ipconfig(). أما مشغّل NINA فينفّذ مجموعة فرعية أصغر لكل واجهة --dhcp4وhas_dhcp4(للقراءة فقط)، بالإضافة إلىaddr4وgw4للحصول / التعيين.
- config(param: str) Any¶
- config(**kwargs: Any) None
الحصول على معاملات الواجهة الخاصة بـ WiFi أو تعيينها.
مع وسيطة سلسلة نصية موضعية واحدة، تُعيد قيمة ذلك المعامل. ومع الوسائط المفتاحية، تعيّن معاملاً واحداً أو أكثر دفعة واحدة -- التغييرات التي تؤثر على نقطة وصول قيد التشغيل تتسبب في إيقاف نقطة الوصول وإعادة تشغيلها تلقائياً.
مثال:
# Set up the access-point name and channel. ap.config(ssid="My AP", channel=11) # Query params one at a time. print(ap.config("ssid")) print(ap.config("mac"))
مشغّل CYW43 -- المعاملات القابلة للقراءة:
"antenna"-- محدّد الهوائي (int)."channel"-- القناة الحالية."ssid"/"essid"-- معرّف SSID الحالي (سلسلة نصية)."security"-- وضع المصادقة الخاص بنقطة الوصول (واحد منSEC_*)."mac"-- عنوان MAC للواجهة (6bytes)."pm"-- قيمة إدارة الطاقة."txpower"-- قدرة الإرسال بوحدة dBm."hostname"-- اسم مضيف DHCP/mDNS. مهمل؛ استخدمnetwork.hostname()بدلاً منه.
مشغّل CYW43 -- المعاملات القابلة للتعيين:
antenna=<int>-- محدّد الهوائي.channel=<int>-- قناة نقطة الوصول.ssid=<str>/essid=<str>-- معرّف SSID لنقطة الوصول.key=<str>/password=<str>-- المفتاح المشترك مسبقاً لنقطة الوصول.security=<int>-- وضع مصادقة نقطة الوصول (واحد منSEC_*).pm=<int>-- وضع إدارة الطاقة (واحد منPM_NONEأوPM_PERFORMANCEأوPM_POWERSAVE).monitor=<int>-- تمكين وضع المراقبة / كل البث المتعدد.txpower=<int>-- قدرة الإرسال بوحدة dBm.trace=<int>-- قناع بِتّي لتتبّع المشغّل الداخلي.hostname=<str>-- اسم مضيف DHCP/mDNS. مهمل؛ استخدمnetwork.hostname()بدلاً منه.
مشغّل NINA -- المعاملات القابلة للقراءة:
"ssid"-- معرّف SSID الحالي (سلسلة نصية)."security"-- وضع المصادقة الخاص بنقطة الوصول."mac"/"bssid"-- عنوان MAC للواجهة (6bytes)."fw_version"-- مجموعة ثلاثية(major, minor, patch).
مشغّل NINA -- المعاملات القابلة للتعيين: يُحيل الاستدعاء إلى
connect()ويقبل الوسائط المفتاحية نفسها (ssidوkeyوsecurityوchannel). صالح فقط على واجهة نقطة الوصول.
- deinit() None¶
إعادة تدوير طاقة وحدة MCU الخاصة بـ WiFi وتحرير كل مورد يحتفظ به المشغّل (مخازن البرنامج الثابت، و netif الخاص بـ lwIP، وناقل SPI/SDIO). بعد استدعاء هذا يجب إعادة إنشاء كائن
WLANقبل استخدامه. استخدم هذا بدلاً منactive()(False)عندما تحتاج إلى إعادة ضبط كاملة (على سبيل المثال، قبل إعادة تثبيت البرنامج الثابت للراديو أو للتعافي من حالة مشغّل معلّقة). خاص بـ CYW43 فقط.
- send_ethernet(buf: bytes) None¶
حقن إطار Ethernet الخام
bufمباشرة في مسار الإرسال الخاص بالمشغّل، متجاوزاً حزمة IP. مخصص للمستهلكين على المستوى L2 فقط -- التجسير، وبروتوكولات EtherType المخصصة، وما شابهها. يجب أن يتضمن الإطار عنوان MAC للوجهة/المصدر و EtherType (بدون FCS -- يلحقه العتاد). خاص بـ CYW43 فقط.
- ioctl(cmd: int, buf: bytearray) None¶
إصدار أمر تحكم خاص بالمشغّل.
cmdهو رمز ioctl العددي المعرّف من قِبل البرنامج الثابت للراديو الأساسي، وbufهو مخزن مؤقت قابل للتعديل يُستخدم لكل من حمولة الأمر والاستجابة. مجموعة قيمcmdالصالحة خاصة بالمشغّل وغير قابلة للنقل بين CYW43 و NINA. تُستخدم في الغالب من قِبل برامج الاختبار منخفضة المستوى وأكواد تشغيل الرقاقة الأولي.
الثوابت¶
- SEC_WPA_WPA2: int¶
قيمة الأمان لـ WPA / WPA2 بمفتاح مشترك مسبقاً. الافتراضية عند تزويد مفتاح إلى
connect(). متوفرة على كلا المشغّلين.
- SEC_WEP: int¶
قيمة الأمان لـ WEP (الخصوصية المكافئة للشبكة السلكية). مُتاحة للتوافق مع نقاط الوصول القديمة -- WEP مكسور تشفيرياً ولا ينبغي استخدامه في عمليات النشر الجديدة. خاص بـ NINA فقط.
- OPEN: int¶
اسم مستعار للتوافق الخلفي مع
SEC_OPEN. ينبغي للتعليمات البرمجية الجديدة استخدامSEC_OPEN. خاص بـ NINA فقط.
- WEP: int¶
اسم مستعار للتوافق الخلفي مع
SEC_WEP. ينبغي للتعليمات البرمجية الجديدة استخدامSEC_WEP. خاص بـ NINA فقط.
- WPA_PSK: int¶
اسم مستعار للتوافق الخلفي مع
SEC_WPA_WPA2. ينبغي للتعليمات البرمجية الجديدة استخدامSEC_WPA_WPA2. خاص بـ NINA فقط.