class Pin – управление вводами/выводами

Объект Pin используется для управления выводами ввода/вывода (также известными как GPIO - вводы/выводы общего назначения). Объекты Pin обычно связаны с физическим выводом, который может выдавать выходное напряжение и считывать входное напряжение. Класс Pin имеет методы для установки режима вывода (IN, OUT и т. д.) и методы для получения и установки цифрового логического уровня. Для аналогового управления выводом см. класс ADC.

Объект Pin создаётся с помощью идентификатора, который однозначно задаёт определённый вывод ввода/вывода. Допустимые формы идентификатора и физический вывод, на который отображается идентификатор, зависят от конкретного порта. Возможные значения идентификатора - целое число, строка или кортеж с номером порта и вывода.

Модель использования:

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 - вывод настроен на выход с открытым стоком. Выход с открытым стоком работает следующим образом: если выходное значение установлено в 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 если истинно, используется аппаратное прерывание. Это уменьшает задержку между изменением вывода и вызовом обработчика. Обработчики аппаратных прерываний не могут выделять память; см. Написание обработчиков прерываний. Не все порты поддерживают этот аргумент.

Этот метод возвращает объект функции обратного вызова.

Следующие методы являются расширениями основного 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

Включить функцию удержания шины (bus-keeper) контактной площадки – вывод фиксирует свой текущий логический уровень вместо того, чтобы находиться в плавающем состоянии.

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

Настройка наибольшей силы тока.