class Pin – בקרת פיני קלט/פלט

אובייקט פין משמש לבקרת פיני קלט/פלט (הידועים גם בשם GPIO - general-purpose input/output). אובייקטי פין משויכים בדרך כלל לפין פיזי שיכול להניע מתח פלט ולקרוא מתחי קלט. למחלקה Pin יש מתודות להגדרת מצב הפין (IN, OUT וכו«) ומתודות לקבלה ולהגדרה של רמת הלוגיקה הדיגיטלית. לבקרה אנלוגית של פין, ראו את המחלקה ADC.

אובייקט פין נבנה באמצעות מזהה שמציין באופן חד-משמעי פין קלט/פלט מסוים. הצורות המותרות של המזהה והפין הפיזי שאליו הוא ממופה תלויות בפורט. אפשרויות אפשריות למזהה הן מספר שלם, מחרוזת, או tuple עם מספר פורט ופין.

מודל שימוש:

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))

בנאים

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 (מזהה Pin פנימי), str (שם Pin), ו-tuple (זוג [port, pin]).

  • mode מציין את מצב הפין, שיכול להיות אחד מהבאים:

    • Pin.IN - הפין מוגדר לקלט. אם נצפה כפלט, הפין נמצא במצב עכבה גבוהה.

    • Pin.OUT - הפין מוגדר לפלט (רגיל).

    • Pin.OPEN_DRAIN - הפין מוגדר לפלט open-drain. פלט open-drain פועל באופן הבא: אם ערך הפלט מוגדר ל-0 הפין פעיל ברמה נמוכה; אם ערך הפלט הוא 1 הפין נמצא במצב עכבה גבוהה. לא כל הפורטים מממשים מצב זה, וחלקם עשויים לממש אותו רק בפינים מסוימים.

    • Pin.ALT - הפין מוגדר לבצע פונקציה חלופית, שתלויה בפורט. עבור פין המוגדר בדרך זו, כל מתודה אחרת של Pin (למעט Pin.init()) אינה ישימה (קריאה להן תוביל לתוצאה לא מוגדרת, או תלוית-חומרה). לא כל הפורטים מממשים מצב זה.

    • Pin.ALT_OPEN_DRAIN - זהה ל-Pin.ALT, אך הפין מוגדר כ-open-drain. לא כל הפורטים מממשים מצב זה.

    • Pin.ANALOG - הפין מוגדר לקלט אנלוגי, ראו את המחלקה ADC.

  • pull מציין אם לפין מחובר נגד pull (חלש), ויכול להיות אחד מהבאים:

    • None - ללא נגד pull up או pull down.

    • Pin.PULL_UP - נגד pull up מאופשר.

    • Pin.PULL_DOWN - נגד 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 אם true נעשה שימוש בפסיקת חומרה. הדבר מקטין את ההשהיה בין שינוי הפין לבין קריאת המטפל. מטפלי פסיקת חומרה אינם רשאים להקצות זיכרון; ראו כתיבת מטפלי פסיקה. לא כל הפורטים תומכים בארגומנט זה.

מתודה זו מחזירה אובייקט callback.

המתודות הבאות הן הרחבות ל-API הליבה של 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 של הפין. ראו את תיעוד הבנאי לפרטים על הארגומנט pull.

קבועים

הקבועים שלהלן משמשים להגדרת אובייקטי Pin באמצעות הבנאי, init() ו-irq(). הם מקובצים לפי זמינות בפורטים.

קבועים הזמינים בכל הפורטים של OpenMV

IN: int

מצב פין: קלט דיגיטלי בעכבה גבוהה.

OUT: int

מצב פין: פלט דיגיטלי push-pull. כינוי של OUT_PP ב-STM32.

OPEN_DRAIN: int

מצב פין: פלט open-drain. הנעת 0 מושכת את הקו למצב נמוך; הנעת 1 משחררת אותו למצב עכבה גבוהה.

PULL_UP: int

מאפשר את נגד ה-pull-up הפנימי על הפין.

PULL_DOWN: int

מאפשר את נגד ה-pull-down הפנימי על הפין.

IRQ_FALLING: int

העבירו ל-irq() כדי להפעיל על קצה יורד.

IRQ_RISING: int

העבירו ל-irq() כדי להפעיל על קצה עולה.

STM32 בלבד

ALT: int

מצב פין: פונקציה חלופית (push-pull). השתמשו עם alt= כדי לבחור לאיזו פונקציית התקן היקפי הפין מנותב. כינוי של AF_PP.

ALT_OPEN_DRAIN: int

מצב פין: פונקציה חלופית (open-drain). כינוי של AF_OD.

ANALOG: int

מצב פין: קלט אנלוגי – חוצץ הקלט/פלט הדיגיטלי מנותק כך שניתן להניע את הפין על ידי ערוץ ADC.

AF_PP: int

מצב פונקציה חלופית push-pull (אותו ערך כמו ALT).

AF_OD: int

מצב פונקציה חלופית open-drain (אותו ערך כמו ALT_OPEN_DRAIN).

OUT_PP: int

מצב פלט push-pull (אותו ערך כמו OUT).

OUT_OD: int

מצב פלט open-drain (אותו ערך כמו OPEN_DRAIN).

PULL_NONE: int

מנטרל את נגד ה-pull-up / pull-down הפנימי על הפין.

mimxrt בלבד

PULL_UP_47K: int

מאפשר נגד pull-up פנימי של ~47 kΩ.

PULL_UP_22K: int

מאפשר נגד pull-up פנימי של ~22 kΩ.

PULL_HOLD: int

מאפשר את פונקציית ה-bus-keeper / hold של הפד – הפין נועל את רמת הלוגיקה הנוכחית שלו במקום לצוף.

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

הגדרת עוצמת ההנעה החזקה ביותר.