клас Pin – керування виводами введення/виведення

Об’єкт виводу використовується для керування виводами введення/виведення (також відомими як GPIO – виводи загального призначення). Об’єкти виводу зазвичай пов’язані з фізичним виводом, який може подавати вихідну напругу та зчитувати вхідні напруги. Клас виводу має методи для встановлення режиму виводу (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))

Конструктори

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 (пара [порт, вивід]).

  • 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 є викликовними. Метод виклику забезпечує (швидкий) ярлик для встановлення та отримання значення виводу. Він еквівалентний 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, використовується апаратне переривання. Це зменшує затримку між зміною виводу та викликом обробника. Обробники апаратних переривань не можуть виділяти пам’ять; дивіться Написання обробників переривань. Не всі порти підтримують цей аргумент.

Цей метод повертає об’єкт зворотного виклику.

Наступні методи є розширеннями базового 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.

Константи

Наведені нижче константи використовуються для налаштування об’єктів Pin через конструктор, init() та irq(). Вони згруповані за доступністю на порту.

Константи, доступні на всіх портах OpenMV

IN: int

Режим виводу: цифровий вхід з високим імпедансом.

OUT: int

Режим виводу: двотактний цифровий вихід. Псевдонім 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

Режим виводу: альтернативна функція (двотактний вихід). Використовується з alt= для вибору, до якої функції периферійного пристрою спрямовано вивід. Псевдонім AF_PP.

ALT_OPEN_DRAIN: int

Режим виводу: альтернативна функція (відкритий стік). Псевдонім AF_OD.

ANALOG: int

Режим виводу: аналоговий вхід – буфер цифрового введення/виведення відключено, тому вивід може керуватися каналом ADC.

AF_PP: int

Режим двотактного виходу з альтернативною функцією (те саме значення, що ALT).

AF_OD: int

Режим виходу з відкритим стоком з альтернативною функцією (те саме значення, що ALT_OPEN_DRAIN).

OUT_PP: int

Режим двотактного виходу (те саме значення, що OUT).

OUT_OD: int

Режим виходу з відкритим стоком (те саме значення, що OPEN_DRAIN).

PULL_NONE: int

Вимкнути внутрішній підтягуючий/притягуючий резистор на виводі.

лише mimxrt

PULL_UP_47K: int

Увімкнути внутрішній підтягуючий резистор ~47 кОм.

PULL_UP_22K: int

Увімкнути внутрішній підтягуючий резистор ~22 кОм.

PULL_HOLD: int

Увімкнути функцію утримання/збереження шини на виводі – вивід фіксує свій поточний логічний рівень замість переходу у стан плаваючого виводу.

DRIVE_OFF: int

Вимкнути вихідний драйвер виводу.

DRIVE_0: int

Найнижче налаштування потужності привода (найвищий послідовний імпеданс) – еталонний резистор R0 (~150 Ом при 3,3 В / 260 Ом при 1,8 В).

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

Найвище налаштування потужності привода.