class Pin – I/O 핀 제어¶
핀 객체는 I/O 핀(GPIO - general-purpose input/output, 범용 입출력이라고도 함)을 제어하는 데 사용됩니다. 핀 객체는 일반적으로 출력 전압을 구동하고 입력 전압을 읽을 수 있는 물리적 핀과 연결됩니다. Pin 클래스에는 핀의 모드(IN, OUT 등)를 설정하는 메서드와 디지털 논리 레벨을 가져오고 설정하는 메서드가 있습니다. 핀의 아날로그 제어에 대해서는 ADC 클래스를 참조하세요.
핀 객체는 특정 I/O 핀을 명확하게 지정하는 식별자를 사용하여 생성됩니다. 허용되는 식별자 형식과 식별자가 매핑되는 물리적 핀은 포트마다 다릅니다. 식별자로 가능한 값으로는 정수, 문자열, 또는 포트와 핀 번호로 이루어진 튜플이 있습니다.
사용 모델:
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)¶
주어진
id와 연결된 핀 주변장치(GPIO 핀)에 접근합니다. 생성자에 추가 인자가 주어지면 핀을 초기화하는 데 사용됩니다. 지정되지 않은 설정은 이전 상태를 그대로 유지합니다.인자는 다음과 같습니다:
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가 true이면 하드웨어 인터럽트가 사용됩니다. 이는 핀 변경과 핸들러 호출 사이의 지연을 줄입니다. 하드 인터럽트 핸들러는 메모리를 할당할 수 없습니다. 인터럽트 핸들러 작성하기를 참조하세요. 모든 포트가 이 인자를 지원하는 것은 아닙니다.
이 메서드는 콜백 객체를 반환합니다.
다음 메서드는 핵심 Pin API의 확장입니다. 포트 지원 여부에 따라 그룹화되어 있습니다.
모든 OpenMV 포트에서 사용 가능한 메서드¶
mimxrt + alif 전용¶
STM32 전용¶
상수¶
아래 상수들은 생성자,
init()및irq()를 통해Pin객체를 구성하는 데 사용됩니다. 포트 지원 여부에 따라 그룹화되어 있습니다.모든 OpenMV 포트에서 사용 가능한 상수¶
STM32 전용¶
- AF_OD: int¶
대체 기능 오픈 드레인 모드(
ALT_OPEN_DRAIN과 동일한 값).
- OUT_OD: int¶
오픈 드레인 출력 모드(
OPEN_DRAIN과 동일한 값).
mimxrt 전용¶