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().
- 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¶
только mimxrt + alif¶
только STM32¶
Константы¶
Приведённые ниже константы используются для настройки объектов
Pinчерез конструктор,init()иirq(). Они сгруппированы по доступности на портах.Константы, доступные на всех портах OpenMV¶
только STM32¶
- ALT: int¶
Режим вывода: альтернативная функция (двухтактная). Используйте с
alt=для выбора периферийной функции, на которую направляется вывод. ПсевдонимAF_PP.
- ANALOG: int¶
Режим вывода: аналоговый ввод – буфер цифрового ввода/вывода отключается, чтобы выводом мог управлять канал
ADC.
- AF_OD: int¶
Режим альтернативной функции с открытым стоком (то же значение, что и
ALT_OPEN_DRAIN).
- OUT_OD: int¶
Режим выхода с открытым стоком (то же значение, что и
OPEN_DRAIN).
только mimxrt¶
- PULL_HOLD: int¶
Включить функцию удержания шины (bus-keeper) контактной площадки – вывод фиксирует свой текущий логический уровень вместо того, чтобы находиться в плавающем состоянии.