3.7. GPIO 출력

machine.LED는 카메라 내장 표시등의 배선을 추상화합니다. 모든 외부 하드웨어를 구동하는 것은 출력 모드의 machine.Pin에서 시작합니다 – 이는 다른 모든 GPIO 상호작용의 기반이 되는 원시 주변장치입니다.

3.7.1. 핀 구동하기

핀을 출력으로 만들려면 Pin.OUT로 핀을 생성한 다음 그 값을 설정합니다:

from machine import Pin

led = Pin("P0", Pin.OUT)
led.on()           # drive high (about 3.3 V)
led.off()          # drive low (about 0 V)

상태를 설정하는 세 가지 동등한 방법으로, 모두 machine.Pin에서 사용합니다:

value()를 인수 없이 호출하면 핀의 현재 상태를 다시 읽어옵니다 – 이는 입력과 출력 모두에 대해 동작합니다.

3.7.2. 외부 LED 구동하기

3.3 V에서 10 mA로 동작하는 빨간색 LED에는 직렬로 약 130 Ω이 필요합니다(전자공학 페이지에서 계산을 다룹니다). 핀 P0을 그 저항기를 거쳐 LED의 애노드에 연결하고, LED의 캐소드는 접지에 연결합니다. 깜박이 예제:

import time
from machine import Pin

led = Pin("P0", Pin.OUT)

while True:
    led.on()
    time.sleep_ms(500)
    led.off()
    time.sleep_ms(500)

LED는 초당 한 번씩 켜졌다 꺼집니다. LED를 통과하는 전류(따라서 그 밝기)는 저항기에 의해 설정되며, 켜짐/꺼짐 듀티는 켜져 있을 때 얼마나 밝게 보이는지가 아니라 얼마나 자주 켜지는지만 제어합니다.

생성자는 초기 값을 키워드 인수로 받습니다: Pin("P0", Pin.OUT, value=0)은 핀을 로우(low)로 시작하는 출력으로 구성합니다. 이것이 없으면 핀은 첫 번째 value() 호출 이전까지 잠시 기본 상태가 무엇이었든 그 상태를 취합니다.

3.7.3. 오픈 드레인 모드

기본 Pin.OUT 모드는 푸시풀입니다: 핀이 하이(공급원으로)와 로우(접지로) 양쪽을 능동적으로 구동합니다. 때로는 이것이 적절하지 않습니다. 핀이 라인을 로우로 끌어내리거나 해제(플로팅)해야 할 때는 Pin.OPEN_DRAIN를 사용하세요:

pin = Pin("P0", Pin.OPEN_DRAIN)
pin.off()       # actively drive low
pin.on()        # release; an external pull-up brings the line high

주된 용도는 전선을 공유하는 것입니다. 여러 오픈 드레인 출력은 그중 어느 것도 능동적으로 하이로 구동하지 않기 때문에 하나의 라인을 공유할 수 있습니다. 그중 어느 하나라도 라인을 로우로 끌어내릴 수 있으며, 모두 해제하면 외부 풀업이 라인을 하이로 만듭니다. 이것이 공유 통신 버스 뒤에 있는 배선 관례입니다.

경고

오픈 드레인은 더 높은 전압의 장치를 구동하기 위한 일반적인 해결책이 아닙니다. 오픈 드레인 핀을 5 V 풀업에 연결하는 것은 5 V 허용 핀에서는 안전하지만, 허용하지 않는 핀에서는 핀이 해제되어 라인이 5 V로 떠오르는 순간 온칩 보호 다이오드를 통해 핀을 손상시킵니다. 전압 차이가 있는 신호 전달에는 적절한 레벨 시프터가 필요합니다. 회로는 레벨 시프팅을 참고하세요.