class WINC -- مشغّل درع WiFi

يشغّل الصنف WINC وحدة WiFi من نوع Atmel WINC1500 802.11 b/g/n على درع OpenMV WiFi Shield. وهو متوفر على 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 وضع التشغيل الذي تبدأ به الوحدة:

ملاحظة

في وضع نقطة الوصول، تكون لدى WINC1500 حدود عتادية:

  • يمكن لعميل واحد فقط الاتصال في كل مرة.

  • يُدعَم أمان OPEN أو WEP فقط.

  • يتسبب خطأ برمجي في البرنامج الثابت لوحدة WiFi في توقف أي مقابس مربوطة عن العمل عند قطع اتصال العميل. اضبط مهلة على مقبس الخادم بحيث يثير استثناءً يمكنك استخدامه لإعادة فتحه.

الطرق

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 لتهيئة نقطة الوصول وتشغيلها. تدعم نقطة الوصول أمان OPEN أو WEP فقط؛ وإذا استُخدم WEP فإن key مطلوب.

disconnect() None

في وضع المحطة، افصل الارتباط عن نقطة الوصول المرتبط بها حالياً. يبقى الدرع نشطاً؛ استدعِ connect() لإعادة الارتباط. لا تأثير لها عند عدم وجود ارتباط حالي.

isconnected() bool

في وضع المحطة تُرجِع True عند الارتباط بنقطة وصول و الحصول على عنوان IPv4 (عبر DHCP أو ifconfig()). وتُرجِع False أثناء وجودها في مرحلة المصادقة / الارتباط / DHCP.

connected_sta() List[str]

في وضع نقطة الوصول، تُرجِع قائمة تحتوي على عنوان IP للعميل المتصل حالياً (أو قائمة فارغة إذا لم يكن هناك عميل متصل).

wait_for_sta(timeout: int | None) List[str]

في وضع نقطة الوصول، تحجب حتى يتصل عميل وتُرجِع قائمة تحتوي على عنوان IP الخاص بالعميل. timeout هو أقصى مدة انتظار بالميلي ثانية؛ مرّر None للانتظار إلى أجل غير مسمى.

ifconfig(config: Tuple[str, str, str, str] | None = None) Tuple[str, str, str, str]

اقرأ أو اضبط معاملات واجهة IPv4. يحتوي الصف الرباعي على (ip, subnet, gateway, dns) كسلاسل نصية رباعية النقاط.

عند الاستدعاء بدون وسيطة: تُرجِع التهيئة الحالية.

عند الاستدعاء بصف رباعي: تضبط تهيئة 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 لا تطبّق واجهة AbstractNIC.ipconfig() الحديثة؛ استخدم ifconfig() هنا.

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

تُرجِع صفاً خماسياً يصف الارتباط الحالي:

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

ابحث عن نقاط الوصول القريبة. تُرجِع قائمة من صفوف سداسية:

  • [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 فما دون غير قابل للاستخدام. لا معنى له إلا في وضع المحطة بينما isconnected() تساوي True.

fw_version() Tuple[int, int, int, int, int, int, int]

تُرجِع صفاً سباعياً يصف إصدارات البرنامج الثابت والمشغّل لـ WINC1500:

  • [0] الإصدار الرئيسي للبرنامج الثابت.

  • [1] الإصدار الفرعي للبرنامج الثابت.

  • [2] رقعة (patch) البرنامج الثابت.

  • [3] الإصدار الرئيسي للمشغّل.

  • [4] الإصدار الفرعي للمشغّل.

  • [5] رقعة (patch) المشغّل.

  • [6] مراجعة عتاد الشريحة.

fw_dump(path: str) None

اقرأ ذاكرة الفلاش الداخلية لـ WINC1500 واكتب صورة البرنامج الثابت الناتجة إلى الملف في path على نظام ملفات OpenMV. استخدم هذا للنسخ الاحتياطي للصورة المثبّتة حالياً قبل استدعاء fw_update().

يتطلب أن تكون الوحدة قد أُنشئت بـ mode=MODE_FIRMWARE.

fw_update(path: str) None

امسح ذاكرة الفلاش الداخلية لـ WINC1500 وبرمجها بالصورة الثنائية في path. يجب أن تطابق الصورة التخطيط الذي يتوقعه البرنامج الثابت لـ OpenMV (تُورَّد عادةً من Atmel / Microchip مع WINC SDK).

يحجب الاستدعاء لعدة ثوانٍ أثناء برمجة الفلاش والتحقق منها. أعِد تدوير الطاقة لـ 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 نقطة الوصول التي يرتبط بها العملاء.

MODE_P2P: int

وضع WiFi-Direct (الند للند).

MODE_BSP: int

تهيئة حزمة دعم اللوحة لـ WINC فقط -- لا يُرفع الراديو. يُستخدم في مسار تحديث البرنامج الثابت.

MODE_FIRMWARE: int

وضع تحديث البرنامج الثابت. مطلوب لـ fw_dump() و fw_update().