class Signal – 외부 I/O 장치 제어 및 감지¶
Signal 클래스는 Pin 클래스의 단순한 확장입니다. “절대적인” 0과 1 상태만 가질 수 있는 Pin과 달리, Signal은 반전(액티브 로우)되거나 반전되지 않은 상태에서 “어서트”(켜짐) 또는 “디어서트”(꺼짐) 상태가 될 수 있습니다. 다시 말해, Pin 기능에 논리적 반전 지원을 추가합니다. 단순한 추가처럼 보일 수 있지만, 이는 다양한 보드 간에 이식 가능한 방식으로 광범위한 단순 디지털 장치를 지원하는 데 정확히 필요한 것이며, 이는 MicroPython의 주요 목표 중 하나입니다. 서로 다른 사용자가 액티브 하이 또는 액티브 로우 LED를 가지고 있든, 평상시 열림 또는 평상시 닫힘 릴레이를 가지고 있든 상관없이, 각각에 대해 동작하는 하나의 보기 좋은 애플리케이션을 개발할 수 있으며, 하드웨어 구성 차이는 앱의 설정 파일 몇 줄로 담아낼 수 있습니다.
예시:
from machine import Pin, Signal
# Suppose you have an active-high LED on pin 0
led1_pin = Pin(0, Pin.OUT)
# ... and active-low LED on pin 1
led2_pin = Pin(1, Pin.OUT)
# Now to light up both of them using Pin class, you'll need to set
# them to different values
led1_pin.value(1)
led2_pin.value(0)
# Signal class allows to abstract away active-high/active-low
# difference
led1 = Signal(led1_pin, invert=False)
led2 = Signal(led2_pin, invert=True)
# Now lighting up them looks the same
led1.value(1)
led2.value(1)
# Even better:
led1.on()
led2.on()
Signal과 Pin 중 어느 것을 사용해야 하는지에 대한 안내는 다음과 같습니다:
Signal 사용: LED, 다중 세그먼트 표시기, 릴레이, 부저와 같은 단순한 켜짐/꺼짐(소프트웨어 PWM 포함!) 장치를 제어하거나, 평상시 열림/닫힘 버튼, 풀업/풀다운 버튼, 리드 스위치, 습도/화염 감지기 등과 같은 단순 이진 센서를 읽고 싶을 때. 요약하자면, GPIO 접근이 필요한 실제 물리 장치/센서가 있다면 Signal을 사용하는 것이 좋습니다.
Pin 사용: 더 복잡한 장치와 통신하기 위해 상위 수준의 프로토콜이나 버스를 구현하는 경우.
Pin과 Signal의 분리는 위의 사용 사례와 MicroPython의 아키텍처에서 비롯됩니다: Pin은 가장 낮은 오버헤드를 제공하며, 이는 비트뱅잉 프로토콜에서 중요할 수 있습니다. 그러나 Signal은 Pin 위에 추가적인 유연성을 더하며, 약간의 오버헤드를 대가로 합니다(액티브 하이 대 액티브 로우 장치 차이를 Python에서 수동으로 구현하는 것보다 훨씬 작습니다!). 또한 Pin은 각 지원 보드마다 구현되어야 하는 저수준 객체인 반면, Signal은 Pin이 구현되면 무료로 따라오는 고수준 객체입니다.
확신이 서지 않으면 Signal을 한번 사용해 보십시오! 다시 말하지만, Signal은 개발자가 액티브 로우 대 액티브 하이 신호 같은 흥미롭지 않은 차이를 처리할 필요에서 벗어나도록 제공되며, 다른 사용자들이 단지 LED나 릴레이가 약간 다르게 배선되어 있다는 이유로 동작하지 않는다는 사실에 좌절하는 대신 여러분의 애플리케이션을 공유하고 즐길 수 있게 해줍니다.
생성자¶
- class machine.Signal(pin_obj: Pin, *, invert: bool = False)¶
- class machine.Signal(*pin_args: Any, invert: bool = False, **pin_kwargs: Any)
Signal 객체를 생성합니다. 생성하는 방법은 두 가지가 있습니다:
기존 Pin 객체 래핑 – 범용적이며 어떤 보드에서도 동작합니다.
Pin 생성자 인수를 직접 전달 –
Pin이 받는 것과 동일한 위치 인수와 키워드 인수가 내부적으로 생성되는 Pin으로 전달됩니다. 전부는 아니지만 많은 보드에서 사용할 수 있습니다.
인수:
pin_obj– 래핑할 기존Pin인스턴스.pin_args/pin_kwargs– 기반 핀을 인라인으로 생성할 때Pin생성자로 전달할 인수.invert–True이면 신호가 반전됩니다(액티브 로우).
메서드¶
- value(x: Any = None, /) int | None¶
이 메서드는 인수
x가 제공되는지 여부에 따라 신호의 값을 설정하고 가져올 수 있게 합니다.인수가 생략되면 이 메서드는 신호 레벨을 가져옵니다. 1은 신호가 어서트됨(활성)을 의미하고 0은 신호가 비활성임을 의미합니다.
인수가 제공되면 이 메서드는 신호 레벨을 설정합니다. 인수
x는 불리언으로 변환될 수 있는 어떤 값이든 될 수 있습니다.True로 변환되면 신호가 활성이 되고, 그렇지 않으면 비활성이 됩니다.신호가 활성인 것과 기반 핀의 실제 논리 레벨 간의 대응은 신호가 반전(액티브 로우)되었는지 여부에 따라 달라집니다. 반전되지 않은 신호의 경우 활성 상태는 논리 1에, 비활성은 논리 0에 대응합니다. 반전/액티브 로우 신호의 경우 활성 상태는 논리 0에 대응하고, 비활성은 논리 1에 대응합니다.