class Signal – בקרה וחישה של התקני I/O חיצוניים¶
המחלקה Signal היא הרחבה פשוטה של המחלקה Pin. בניגוד ל-Pin, שיכול להיות רק במצבים ”מוחלטים“ 0 ו-1, Signal יכול להיות במצב ”מאושש“ (on) או ”מבוטל“ (off), תוך שהוא הפוך (פעיל-נמוך) או לא. במילים אחרות, היא מוסיפה תמיכה בהיפוך לוגי לפונקציונליות של Pin. אף שזה עשוי להיראות כתוספת פשוטה, זה בדיוק מה שדרוש כדי לתמוך במגוון רחב של התקנים דיגיטליים פשוטים באופן נייד בין לוחות שונים, שזו אחת ממטרות העל של MicroPython. ללא קשר לשאלה אם למשתמשים שונים יש LED פעיל-גבוה או פעיל-נמוך, ממסר פתוח-רגיל או סגור-רגיל – אתה יכול לפתח יישום יחיד ונאה שעובד עם כל אחד מהם, וללכוד את ההבדלים בתצורת החומרה במספר שורות בקובץ התצורה של היישום שלך.
דוגמה:
from machine import Pin, Signal
# Suppose you have an active-high LED on pin 0
led1_pin = Pin(0, Pin.OUT)
# ... and active-low LED on pin 1
led2_pin = Pin(1, Pin.OUT)
# Now to light up both of them using Pin class, you'll need to set
# them to different values
led1_pin.value(1)
led2_pin.value(0)
# Signal class allows to abstract away active-high/active-low
# difference
led1 = Signal(led1_pin, invert=False)
led2 = Signal(led2_pin, invert=True)
# Now lighting up them looks the same
led1.value(1)
led2.value(1)
# Even better:
led1.on()
led2.on()
להלן ההנחיה מתי כדאי להשתמש ב-Signal לעומת Pin:
השתמש ב-Signal: אם אתה רוצה לשלוט בהתקנים פשוטים של הדלקה/כיבוי (כולל PWM תוכנתי!) כמו נוריות LED, מחווני רב-מקטעים, ממסרים, זמזמים, או לקרוא חיישנים בינאריים פשוטים, כמו לחצנים פתוחים-רגיל או סגורים-רגיל, מחוברים לגבוה או לנמוך, מתגי Reed, גלאי לחות/להבה וכו« וכו«. לסיכום, אם יש לך התקן/חיישן פיזי אמיתי הדורש גישת GPIO, סביר שכדאי לך להשתמש ב-Signal.
השתמש ב-Pin: אם אתה מממש פרוטוקול או אפיק ברמה גבוהה יותר כדי לתקשר עם התקנים מורכבים יותר.
החלוקה בין Pin ל-Signal נובעת ממקרי השימוש שלעיל ומהארכיטקטורה של MicroPython: Pin מציע את התקורה הנמוכה ביותר, שעשויה להיות חשובה כאשר מבצעים bit-banging של פרוטוקולים. אך Signal מוסיף גמישות נוספת מעל Pin, במחיר של תקורה מינורית (הרבה יותר קטנה מאשר אם היית מממש את ההבדלים בין התקן פעיל-גבוה לפעיל-נמוך ב-Python ידנית!). כמו כן, Pin הוא אובייקט ברמה נמוכה שצריך לממש עבור כל לוח נתמך, בעוד Signal הוא אובייקט ברמה גבוהה שמתקבל בחינם ברגע ש-Pin ממומש.
אם יש ספק, נסה את Signal! שוב, הוא מוצע כדי לחסוך מהמפתחים את הצורך לטפל בהבדלים לא מרגשים כמו אותות פעיל-נמוך לעומת פעיל-גבוה, ולאפשר למשתמשים אחרים לשתף וליהנות מהיישום שלך, במקום להתוסכל מהעובדה שהוא אינו עובד עבורם פשוט משום שנוריות ה-LED או הממסרים שלהם מחווטים בצורה מעט שונה.
בנאים¶
- class machine.Signal(pin_obj: Pin, *, invert: bool = False)¶
- class machine.Signal(*pin_args: Any, invert: bool = False, **pin_kwargs: Any)
יוצר אובייקט Signal. ישנן שתי דרכים לבנות אותו:
עטיפת אובייקט Pin קיים – אוניברסלי, עובד בכל לוח.
העברת ארגומנטים של בנאי Pin ישירות – אותם ארגומנטים מיקומיים ומילות מפתח המתקבלים על ידי
Pinמועברים אל Pin שנוצר באופן פנימי. זמין בלוחות רבים, אך לא בכולם.
ארגומנטים:
pin_obj– מופעPinקיים לעטיפה.pin_args/pin_kwargs– הארגומנטים להעברה אל בנאי ה-Pinבעת בניית הפין הבסיסי בתוך השורה.invert– אםTrueהאות הפוך (פעיל נמוך).
מתודות¶
- value(x: Any = None, /) int | None¶
מתודה זו מאפשרת להגדיר ולקבל את ערך האות, בהתאם לשאלה אם הארגומנט
xסופק או לא.אם הארגומנט מושמט אז מתודה זו מקבלת את רמת האות, כאשר 1 מציין שהאות מאושש (פעיל) ו-0 שהאות אינו פעיל.
אם הארגומנט סופק אז מתודה זו מגדירה את רמת האות. הארגומנט
xיכול להיות כל דבר שמומר לערך בוליאני. אם הוא מומר ל-True, האות פעיל, אחרת הוא אינו פעיל.ההתאמה בין אות פעיל לבין רמת הלוגיקה בפועל בפין הבסיסי תלויה בשאלה אם האות הפוך (פעיל-נמוך) או לא. עבור אות לא-הפוך, מצב פעיל מתאים ללוגי 1, ולא-פעיל – ללוגי 0. עבור אות הפוך/פעיל-נמוך, מצב פעיל מתאים ללוגי 0, בעוד לא-פעיל – ללוגי 1.