class Pin -- التحكم في دبابيس الإدخال/الإخراج

يُستخدم كائن الدبوس للتحكم في دبابيس الإدخال/الإخراج (المعروفة أيضاً باسم GPIO - الإدخال/الإخراج للأغراض العامة). ترتبط كائنات الدبوس عادةً بدبوس فعلي يمكنه توليد جهد خرج وقراءة جهود الدخل. تحتوي الفئة Pin على دوال لضبط وضع الدبوس (IN، OUT، إلخ) ودوال للحصول على المستوى المنطقي الرقمي وضبطه. للتحكم التماثلي في الدبوس، راجع الفئة ADC.

يُنشأ كائن الدبوس باستخدام معرّف يحدّد دبوس إدخال/إخراج معيناً بشكل لا لبس فيه. الأشكال المسموح بها للمعرّف والدبوس الفعلي الذي يقابله المعرّف خاصة بالمنفذ. الاحتمالات الممكنة للمعرّف هي عدد صحيح، أو سلسلة نصية، أو صف يضم المنفذ ورقم الدبوس.

نموذج الاستخدام:

from machine import Pin

# create an output pin on header pin P0
p0 = Pin("P0", Pin.OUT)

# set the value low then high
p0.value(0)
p0.value(1)

# create an input pin on header pin P2, with a pull-up resistor
p2 = Pin("P2", Pin.IN, Pin.PULL_UP)

# read and print the pin value
print(p2.value())

# reconfigure P0 in input mode with a pull-down resistor
p0.init(p0.IN, p0.PULL_DOWN)

# install an IRQ callback
p0.irq(lambda p: print(p))

البانيات (Constructors)

class machine.Pin(id: int | str, mode: int = -1, pull: int = -1, *, value: Any = None, drive: int = 0, alt: int = -1)

الوصول إلى طرفية الدبوس (دبوس GPIO) المرتبطة بـ id المعطى. إذا قُدّمت وسائط إضافية في الباني فإنها تُستخدم لتهيئة الدبوس. أي إعدادات غير محددة ستبقى في حالتها السابقة.

الوسائط هي:

  • id إلزامي ويمكن أن يكون كائناً عشوائياً. من بين أنواع القيم الممكنة: int (معرّف دبوس داخلي)، وstr (اسم دبوس)، وtuple (زوج من [port, pin]).

  • mode يحدد وضع الدبوس، الذي يمكن أن يكون أحد الأوضاع التالية:

    • Pin.IN - الدبوس مهيأ للإدخال. إذا نُظر إليه كخرج فإن الدبوس يكون في حالة معاوقة عالية.

    • Pin.OUT - الدبوس مهيأ للخرج (العادي).

    • Pin.OPEN_DRAIN - الدبوس مهيأ لخرج المصرف المفتوح. يعمل خرج المصرف المفتوح بالطريقة التالية: إذا ضُبطت قيمة الخرج على 0 يكون الدبوس نشطاً عند مستوى منخفض؛ وإذا كانت قيمة الخرج 1 يكون الدبوس في حالة معاوقة عالية. لا تطبّق جميع المنافذ هذا الوضع، وقد تطبّقه بعضها فقط على دبابيس معينة.

    • Pin.ALT - الدبوس مهيأ لأداء وظيفة بديلة، وهي خاصة بالمنفذ. بالنسبة لدبوس مهيأ بهذه الطريقة، لا تنطبق أي دوال أخرى من Pin (باستثناء Pin.init()) (سيؤدي استدعاؤها إلى نتيجة غير محددة أو خاصة بالعتاد). لا تطبّق جميع المنافذ هذا الوضع.

    • Pin.ALT_OPEN_DRAIN - نفس Pin.ALT لكن الدبوس مهيأ كمصرف مفتوح. لا تطبّق جميع المنافذ هذا الوضع.

    • Pin.ANALOG - الدبوس مهيأ للإدخال التماثلي، راجع الفئة ADC.

  • pull يحدد ما إذا كان للدبوس مقاومة سحب (ضعيفة) متصلة، ويمكن أن يكون أحد القيم التالية:

    • None - لا توجد مقاومة سحب للأعلى أو للأسفل.

    • Pin.PULL_UP - مقاومة السحب للأعلى مفعّلة.

    • Pin.PULL_DOWN - مقاومة السحب للأسفل مفعّلة.

  • value صالح فقط لوضعي Pin.OUT وPin.OPEN_DRAIN ويحدد قيمة خرج الدبوس الأولية إذا أُعطيت، وإلا تبقى حالة طرفية الدبوس دون تغيير.

  • drive يحدد طاقة خرج الدبوس ويمكن أن يكون أحد القيم: Pin.DRIVE_0، Pin.DRIVE_1، إلخ، بقوة دفع متزايدة. قدرات دفع التيار الفعلية تعتمد على المنفذ. لا تطبّق جميع المنافذ هذه الوسيطة.

  • alt يحدد وظيفة بديلة للدبوس والقيم التي يمكن أن يأخذها تعتمد على المنفذ. هذه الوسيطة صالحة فقط لوضعي Pin.ALT وPin.ALT_OPEN_DRAIN. يمكن استخدامها عندما يدعم الدبوس أكثر من وظيفة بديلة. إذا كانت وظيفة بديلة واحدة فقط مدعومة فإن هذه الوسيطة غير مطلوبة. لا تطبّق جميع المنافذ هذه الوسيطة.

كما هو محدد أعلاه، تتيح الفئة Pin ضبط وظيفة بديلة لدبوس معين، لكنها لا تحدد أي عمليات أخرى على هذا الدبوس. الدبابيس المهيأة في وضع الوظيفة البديلة لا تُستخدم عادةً كـ GPIO بل تُدار بدلاً من ذلك بواسطة طرفيات عتادية أخرى. العملية الوحيدة المدعومة على هذا الدبوس هي إعادة التهيئة، عن طريق استدعاء الباني أو الدالة Pin.init(). إذا أُعيدت تهيئة دبوس مهيأ في وضع الوظيفة البديلة بـ Pin.IN أو Pin.OUT أو Pin.OPEN_DRAIN، فستُزال الوظيفة البديلة من الدبوس.

الدوال

init(mode: int = -1, pull: int = -1, *, value: Any = None, drive: int = 0, alt: int = -1) None

إعادة تهيئة الدبوس باستخدام المعاملات المعطاة. تُضبط فقط الوسائط المحددة. تبقى بقية حالة طرفية الدبوس دون تغيير. راجع توثيق الباني لمعرفة تفاصيل الوسائط.

تُرجع None.

value(x: Any = None, /) int | None

تتيح هذه الدالة ضبط قيمة الدبوس والحصول عليها، تبعاً لما إذا كانت الوسيطة x مقدّمة أم لا.

إذا حُذفت الوسيطة فإن هذه الدالة تحصل على المستوى المنطقي الرقمي للدبوس، وتُرجع 0 أو 1 المقابلين لإشارات الجهد المنخفض والعالي على التوالي. يعتمد سلوك هذه الدالة على وضع الدبوس:

  • Pin.IN - تُرجع الدالة قيمة الدخل الفعلية الموجودة حالياً على الدبوس.

  • Pin.OUT - سلوك الدالة والقيمة التي تُرجعها غير محددين.

  • Pin.OPEN_DRAIN - إذا كان الدبوس في الحالة '0' فإن سلوك الدالة والقيمة التي تُرجعها غير محددين. وإلا، إذا كان الدبوس في الحالة '1'، تُرجع الدالة قيمة الدخل الفعلية الموجودة حالياً على الدبوس.

إذا قُدّمت الوسيطة فإن هذه الدالة تضبط المستوى المنطقي الرقمي للدبوس. يمكن أن تكون الوسيطة x أي شيء يمكن تحويله إلى قيمة منطقية. إذا تحوّلت إلى True، يُضبط الدبوس على الحالة '1'، وإلا يُضبط على الحالة '0'. يعتمد سلوك هذه الدالة على وضع الدبوس:

  • Pin.IN - تُخزّن القيمة في مخزن الخرج المؤقت للدبوس. لا تتغير حالة الدبوس، فهو يبقى في حالة المعاوقة العالية. ستصبح القيمة المخزنة نشطة على الدبوس بمجرد تغييره إلى وضع Pin.OUT أو Pin.OPEN_DRAIN.

  • Pin.OUT - يُضبط مخزن الخرج المؤقت على القيمة المعطاة فوراً.

  • Pin.OPEN_DRAIN - إذا كانت القيمة '0' يُضبط الدبوس على حالة جهد منخفض. وإلا يُضبط الدبوس على حالة معاوقة عالية.

عند ضبط القيمة تُرجع هذه الدالة None.

__call__(x: Any = None, /) int | None

كائنات الدبوس قابلة للاستدعاء. توفر دالة الاستدعاء اختصاراً (سريعاً) لضبط قيمة الدبوس والحصول عليها. وهي مكافئة لـ Pin.value([x]). راجع Pin.value() لمزيد من التفاصيل.

on() None

ضبط الدبوس على مستوى الخرج "1".

off() None

ضبط الدبوس على مستوى الخرج "0".

irq(handler: Callable[[Pin], None] | None = None, trigger: int = Pin.IRQ_FALLING | Pin.IRQ_RISING, *, priority: int = 1, wake: int | None = None, hard: bool = False) None

تهيئة معالج مقاطعة ليُستدعى عندما يكون مصدر تشغيل الدبوس نشطاً. إذا كان وضع الدبوس Pin.IN فإن مصدر التشغيل هو القيمة الخارجية على الدبوس. إذا كان وضع الدبوس Pin.OUT فإن مصدر التشغيل هو مخزن الخرج المؤقت للدبوس. وإلا، إذا كان وضع الدبوس Pin.OPEN_DRAIN فإن مصدر التشغيل هو مخزن الخرج المؤقت للحالة '0' والقيمة الخارجية للدبوس للحالة '1'.

الوسائط هي:

  • handler دالة اختيارية تُستدعى عند انطلاق المقاطعة. يجب أن يأخذ المعالج وسيطة واحدة بالضبط هي نسخة Pin.

  • trigger يهيئ الحدث الذي يمكن أن يولّد مقاطعة. القيم الممكنة هي:

    • Pin.IRQ_FALLING مقاطعة عند الحافة الهابطة.

    • Pin.IRQ_RISING مقاطعة عند الحافة الصاعدة.

    يمكن دمج هذه القيم معاً بعملية OR للتشغيل عند أحداث متعددة.

  • priority يضبط مستوى أولوية المقاطعة. القيم التي يمكن أن يأخذها خاصة بالمنفذ، لكن القيم الأعلى تمثل دائماً أولويات أعلى.

  • wake يختار وضع الطاقة الذي يمكن أن توقظ فيه هذه المقاطعة النظام. غير مدعوم في أي منفذ OpenMV؛ اتركه على القيمة الافتراضية.

  • hard إذا كان صحيحاً تُستخدم مقاطعة عتادية. يقلل هذا من التأخير بين تغيّر الدبوس واستدعاء المعالج. قد لا تخصص معالجات المقاطعة العتادية ذاكرة؛ راجع كتابة معالجات المقاطعات. لا تدعم جميع المنافذ هذه الوسيطة.

تُرجع هذه الدالة كائن دالة رد النداء.

الدوال التالية امتدادات لواجهة Pin الأساسية. وهي مجمّعة حسب توفرها في المنافذ.

الدوال المتوفرة في جميع منافذ OpenMV

low() None

ضبط الدبوس على مستوى الخرج "0". اسم بديل لـ off().

high() None

ضبط الدبوس على مستوى الخرج "1". اسم بديل لـ on().

mimxrt + alif فقط

toggle() None

تبديل دبوس الخرج -- قلب "0" إلى "1" أو العكس. غير متاح على STM32 (استخدم value(not value()) إذا احتجت إلى هذا على STM32).

STM32 فقط

mode(mode: int | None = None, /) int
mode(mode: int, /) None

الحصول على وضع الدبوس أو ضبطه. راجع توثيق الباني لمعرفة تفاصيل الوسيطة mode.

pull(pull: int | None = None, /) int
pull(pull: int, /) None

الحصول على حالة سحب الدبوس أو ضبطها. راجع توثيق الباني لمعرفة تفاصيل الوسيطة pull.

الثوابت

تُستخدم الثوابت أدناه لتهيئة كائنات Pin عبر الباني وinit() وirq(). وهي مجمّعة حسب توفرها في المنافذ.

الثوابت المتوفرة في جميع منافذ OpenMV

IN: int

وضع الدبوس: إدخال رقمي بمعاوقة عالية.

OUT: int

وضع الدبوس: خرج رقمي من نوع push-pull. اسم بديل لـ OUT_PP على STM32.

OPEN_DRAIN: int

وضع الدبوس: خرج مصرف مفتوح. دفع 0 يسحب الخط للأسفل؛ دفع 1 يحرره إلى المعاوقة العالية.

PULL_UP: int

تفعيل مقاومة السحب للأعلى الداخلية على الدبوس.

PULL_DOWN: int

تفعيل مقاومة السحب للأسفل الداخلية على الدبوس.

IRQ_FALLING: int

مرّر إلى irq() للتشغيل عند الحافة الهابطة.

IRQ_RISING: int

مرّر إلى irq() للتشغيل عند الحافة الصاعدة.

STM32 فقط

ALT: int

وضع الدبوس: وظيفة بديلة (push-pull). استخدمه مع alt= لاختيار الوظيفة الطرفية التي يُوجّه إليها الدبوس. اسم بديل لـ AF_PP.

ALT_OPEN_DRAIN: int

وضع الدبوس: وظيفة بديلة (مصرف مفتوح). اسم بديل لـ AF_OD.

ANALOG: int

وضع الدبوس: إدخال تماثلي -- يُفصل مخزن الإدخال/الإخراج الرقمي المؤقت بحيث يمكن دفع الدبوس بواسطة قناة ADC.

AF_PP: int

وضع الوظيفة البديلة push-pull (نفس قيمة ALT).

AF_OD: int

وضع الوظيفة البديلة بمصرف مفتوح (نفس قيمة ALT_OPEN_DRAIN).

OUT_PP: int

وضع الخرج push-pull (نفس قيمة OUT).

OUT_OD: int

وضع خرج المصرف المفتوح (نفس قيمة OPEN_DRAIN).

PULL_NONE: int

تعطيل مقاومة السحب للأعلى / للأسفل الداخلية على الدبوس.

mimxrt فقط

PULL_UP_47K: int

تفعيل مقاومة سحب للأعلى داخلية بقيمة ~47 kΩ.

PULL_UP_22K: int

تفعيل مقاومة سحب للأعلى داخلية بقيمة ~22 kΩ.

PULL_HOLD: int

تفعيل وظيفة حافظ الناقل / التثبيت للوسادة -- يثبّت الدبوس مستواه المنطقي الحالي بدلاً من أن يكون عائماً.

DRIVE_OFF: int

تعطيل مشغّل خرج الدبوس.

DRIVE_0: int

أدنى إعداد لقوة الدفع (أعلى معاوقة تسلسلية) -- المرجع R0 (~150 Ω عند 3.3 V / 260 Ω عند 1.8 V).

DRIVE_1: int

قوة دفع أعلى بخطوة واحدة من DRIVE_0.

DRIVE_2: int

قوة دفع أعلى بخطوتين من DRIVE_0.

DRIVE_3: int

قوة دفع أعلى بثلاث خطوات من DRIVE_0 (الافتراضي لدبابيس الخرج).

DRIVE_4: int

قوة دفع أعلى بأربع خطوات من DRIVE_0.

DRIVE_5: int

قوة دفع أعلى بخمس خطوات من DRIVE_0.

DRIVE_6: int

أقوى إعداد لقوة الدفع.