라즈베리 파이 피코 버튼

버튼은 Raspberry Pi Pico 프로젝트에서 사용되는 기본적이지만 필수적인 부품입니다. 기계적이고 물리적인 특성 때문에 초보자에게는 복잡하게 느껴질 수 있습니다. 이 가이드는 초보자도 쉽게 이해할 수 있도록 작성되었습니다. 시작해 봅시다!

라즈베리 파이 피코 버튼

※ 주의:

Raspberry Pi Pico와 버튼을 사용하기 전에 초보자들이 자주 겪는 두 가지 일반적인 문제를 알아두시기 바랍니다:

  1. 부동 입력 문제:
    • 증상: Raspberry Pi Pico에 연결된 버튼의 입력 핀 상태가 불안정하여 버튼의 상태를 정확하게 반영하지 못합니다.
    • 원인: 버튼의 핀이 풀다운 또는 풀업 저항과 연결되어 있지 않기 때문입니다.
    • 해결방법: 입력 핀에 풀다운 또는 풀업 저항을 연결하세요. 이 내용은 이후 가이드에서 자세히 설명할 예정입니다.
  • 챠터링 현상:
    • 증상: Raspberry Pi Pico의 코드가 HIGH에서 LOW 또는 그 반대로 상태 변화로 버튼 눌림을 감지하지만, 실제 한 번의 버튼 눌림으로 여러 번의 눌림으로 인식될 수 있습니다.
    • 원인: 버튼의 기계적 특성 때문에 한 번의 눌림에서도 입력 핀의 상태가 여러 번 빠르게 전환될 수 있습니다.
    • 해결방법: 디바운스(debounce)라는 방법을 사용하세요. 디바운싱에 관한 자세한 내용은 이후 튜토리얼에서 제공할 예정입니다.

    참고로, 챠터링은 버튼 눌림을 정확하게 세야 하는 상황에서 주로 영향을 미치며, 다른 경우에서는 큰 문제가 되지 않을 수 있습니다.

    준비물

    1×라즈베리 파이 피코 W 아마존
    1×라즈베리 파이 피코 (또는) 아마존
    1×마이크로 USB 케이블 아마존
    1×캡이 있는 버튼 쿠팡 | 아마존
    1×버튼 키트 쿠팡 | 아마존
    1×Panel-mount Button 아마존
    1×푸시 버튼 모듈 아마존
    1×브레드보드 쿠팡 | 아마존
    1×점퍼케이블 쿠팡 | 아마존
    1×(추천) 라즈베리 파이 피코용 스크루 터미널 확장 보드 아마존
    공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

    버튼 소개

    푸시 버튼은 때때로 촉각 버튼 또는 순간 스위치라고도 불리며, 누르고 있는 동안 연결되고 손을 떼면 연결이 끊어지는 종류의 스위치입니다. 푸시 버튼에는 여러 종류가 있으며, 주로 두 그룹으로 분류됩니다:

    • Push buttons suitable for PCB or breadboard installation
    • Push buttons designed for panel installation
    라즈베리 파이 피코 푸시 버튼

    핀아웃

    PCB 장착 버튼은 보통 네 개의 핀을 가지고 있습니다.

    버튼 핀 배치

    이 핀들은 내부에서 짝지어져 있으므로, 내부에서 연결되지 않은 네 개의 핀 중 두 개만 사용하면 됩니다.

    이미지에 표시된 것처럼 버튼을 연결하는 네 가지 방법이 있지만, 실제로는 비슷하기 때문에 두 가지만 사용됩니다.

    버튼 사용 방법

    버튼에는 네 개의 핀이 있지만 보통 두 개만 사용합니다. 이렇게 하면 보드 위에서 안정적으로 고정되고 압력을 잘 견딥니다.

    패널 마운트 버튼은 보통 두 개의 핀이 있습니다.

    2핀 푸시 버튼 핀아웃
    image source: diyables.io

    푸시 버튼 모듈에는 내장 풀다운 저항기가 포함되어 있어 버튼이 눌리지 않았을 때 출력이 LOW로 유지됩니다. 핀이 세 개 있습니다:

    • GND: 이 핀을 접지에 연결합니다.
    • VCC: 이 핀을 3.3V 전원에 연결합니다.
    • OUT: 이 핀을 Raspberry Pi Pico Push의 디지털 입력에 연결합니다.

    이 구성에서는 버튼이 눌리지 않았을 때 모듈이 LOW를 출력하고, 버튼이 눌렸을 때 모듈이 HIGH를 출력합니다.

    작동 원리

    • 버튼이 눌리지 않으면 핀 A와 핀 B가 분리됩니다.
    • 버튼이 눌리면 핀 A와 핀 B가 연결됩니다.
    버튼 작동 원리

    Raspberry Pi Pico - 버튼

    하나의 버튼 핀은 VCC 또는 GND에 연결되고, 다른 핀은 Raspberry Pi Pico의 핀에 연결됩니다.

    버튼이 눌렸는지 여부를 Raspberry Pi Pico의 입력 핀 상태를 확인함으로써 알 수 있다.

    버튼 상태 및 누름 상태

    버튼의 상태와 버튼이 눌렸을 때의 연결 관계는 버튼을 Raspberry Pi Pico에 어떻게 연결하는지와 Raspberry Pi Pico 핀의 구성에 따라 결정됩니다.

    라즈베리 파이 피코와 함께 버튼을 사용하는 방법은 두 가지가 있습니다:

    • I. 버튼의 한 핀을 VCC에 연결하고 다른 핀을 Raspberry Pi Pico 핀에 연결합니다. 이 연결에 풀다운 저항을 포함시킵니다.
    • 버튼을 누르면 Raspberry Pi Pico 핀이 HIGH 상태가 됩니다. 누르지 않으면 LOW 상태가 됩니다.
    • 직접 추가한 별도의 저항을 사용해야 합니다.
    • I. 버튼의 한 핀을 GNRD에 연결하고 다른 핀을 Raspberry Pi Pico 핀에 연결합니다. 이 연결에 풀업 저항을 포함시킵니다.
    • 버튼을 누르면 Raspberry Pi Pico 핀이 LOW 상태가 됩니다. 누르지 않으면 HIGH 상태가 됩니다.
    • 내장 저항(내부)을 사용하거나 직접 추가한 저항(외부)을 사용할 수 있습니다. 내장 저항을 사용하려면 Raspberry Pi Pico의 코드를 통해 설정하세요.

    ※ 주의:

    당기기 저항이나 끌어올리기 저항이 없으면 버튼이 눌리지 않았을 때 입력 핀이 "부동" 상태가 되어, 핀의 상태가 예측할 수 없이 HIGH LOW로 전환되어 부정확한 판독값을 초래합니다.

    • 잘못된 방법: Raspberry Pi Pico 핀을 당기기 저항이나 끌어올리기 저항 없이 입력으로 설정합니다 (예: button = Pin(BUTTON_PIN, Pin.IN)).
    • 올바른 방법: Raspberry Pi Pico 핀을 내부 끌어올리기 저항을 사용하여 설정합니다 (예: button = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP)). 이 방식은 외부 저항이 필요하지 않습니다.

    이 가이드는 시작하는 가장 쉬운 방법을 보여줍니다: 내부 풀업 입력이 있는 Raspberry Pi Pico 핀을 설정하는 간단한 방법을 사용합니다. 이렇게 하면 외부 저항기가 필요하지 않습니다. 초보자는 제공하는 Raspberry Pi Pico 코드를 사용하면 됩니다.

    선연결

    • Raspberry Pi Pico와 PCB에 장착된 버튼에 대한 배선 가이드
    라즈베리 파이 피코 버튼 배선도

    이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

    • 이 가이드를 따라 Raspberry Pi Pico를 패널 마운트 버튼에 연결하세요:
    라즈베리 파이 피코 두 핀 푸시 버튼 배선 다이어그램

    이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

    버튼 프로그래밍 방법

    • 라즈베리 파이 피코의 핀을 내부 풀업 저항을 사용하는 입력으로 설정하며, Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP) 함수를 사용합니다.
    button = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP)
    • Raspberry Pi Pico 핀 상태를 확인합니다.
    button_state = button.value()

    ※ 주의:

    일반적으로 두 가지 상황이 있습니다:

    • 첫 번째: 입력이 HIGH일 때 무언가를 하고, 입력이 LOW일 때 반대로 합니다.
    • 두 번째: 입력이 LOW에서 HIGH(또는 HIGH에서 LOW)로 바뀔 때 무언가를 합니다.

    목표에 따라 이 두 옵션 중 하나를 선택합니다. 예를 들어 버튼을 사용하여 불빛(LED)을 제어할 때:

    • 버튼을 누르면 불빛이 켜지고, 누르지 않으면 꺼져야 한다면 첫 번째 상황을 사용해야 합니다.
    • 버튼을 누를 때마다 불빛을 켜고 끄고 싶다면 두 번째 상황을 사용해야 합니다.

    Raspberry Pi Pico 코드 - 버튼 상태 읽기

    from machine import Pin import time BUTTON_PIN = 0 # The Raspberry Pi Pico pin connected to the button (GP0) # Set up the button pin. The Pin.PULL_UP enables the internal pull-up resistor. button = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP) while True: # Read the state of the button button_state = button.value() # Print the button's state print(button_state) # Wait for half a second before reading the button again time.sleep(0.5)

    자세한 사용 방법

    다음 지시사항을 단계별로 따라주세요:

    • 컴퓨터에 Thonny IDE가 설치되어 있는지 확인하십시오.
    • Raspberry Pi Pico에 MicroPython 펌웨어가 설치되어 있는지 확인하십시오.
    • Raspberry Pi Pico를 처음 사용하신다면, 자세한 지침은 라즈베리 파이 피코 - 시작하기 튜토리얼을 참조하십시오.
    • 제공된 다이어그램에 따라 버튼을 Raspberry Pi Pico에 연결하십시오.
    • USB 케이블을 사용하여 Raspberry Pi Pico를 컴퓨터에 연결하십시오.
    • 컴퓨터에서 Thonny IDE를 실행하십시오.
    • Thonny IDE에서 Tools Options로 이동하여 MicroPython (Raspberry Pi Pico) 인터프리터를 선택하십시오.
    • Interpreter 탭에서 드롭다운 메뉴에서 MicroPython (Raspberry Pi Pico)를 선택하십시오.
    • 올바른 포트가 선택되어 있는지 확인하십시오. Thonny IDE가 포트를 자동으로 감지해야 하지만, 필요에 따라 수동으로 선택할 수 있습니다 (예: Windows에서는 COM3, Linux에서는 /dev/ttyACM0).
    • 위 코드를 복사하여 Thonny IDE의 편집기에 붙여넣으십시오.
    • 아래 단계를 따라 스크립트를 Raspberry Pi Pico에 저장하십시오:
      • 저장 버튼을 클릭하거나 Ctrl+S 키를 사용합니다.
      • 저장 대화상자에서 두 섹션, 즉 This computer와 Raspberry Pi Pico가 표시됩니다. Raspberry Pi Pico를 선택하십시오.
      • 파일 이름을 main.py로 지정하여 저장합니다.
    • 녹색 Run 버튼을 클릭하거나 F5 키를 눌러 스크립트를 실행합니다. 스크립트가 실행될 것입니다.
    • Thonny 하단의 Shell에서 메시지를 확인하십시오.
    Shell x
    >>> %Run -c $EDITOR_CONTENT
    MPY: soft reboot 1 1 1 0 0 0 0 0 0 1 1 1
    MicroPython (Raspberry Pi Pico) • Board CDC @ COM29 ≡

    1은 눌리지 않음을 의미하고, 0은 눌림을 의미합니다.

    스크립트 이름을 main.py으로 지정하고 Raspberry Pi Pico의 루트 디렉토리에 저장하면, Pico의 전원이 켜지거나 리셋될 때마다 자동으로 실행됩니다. 이는 전원을 켠 즉시 실행되어야 하는 독립 실행형 애플리케이션에 유용합니다. 만약 스크립트 이름을 main.py 이외의 다른 이름으로 지정하면, Thonnys의 Shell에서 수동으로 실행해야 합니다.

    코드 설명

    이전에 제공된 Raspberry Pi Pico 코드의 주석 섹션에서 설명을 찾을 수 있습니다.

    Raspberry Pi Pico 코드 - 버튼의 눌림 및 해제 이벤트 감지

    버튼이 눌렸을 때와 떼어졌을 때를 감지할 수 있도록 코드를 수정해봅시다.

    /* * 이 라즈베리 파이 피코 코드는 newbiely.kr 에서 개발되었습니다 * 이 라즈베리 파이 피코 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/raspberry-pico/raspberry-pi-pico-button */ from machine import Pin import time BUTTON_PIN = 0 # The Raspberry Pi Pico pin connected to the button (GP0) # Setup the button pin. The Pin.PULL_UP enables the internal pull-up resistor. button = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP) # Initialize the previous state of the button prev_button_state = 1 # Assuming the button is unpressed initially while True: # Read the current state of the button button_state = button.value() # Check if button was released if prev_button_state == 0 and button_state == 1: print("The button is released") # Check if button was pressed if prev_button_state == 1 and button_state == 0: print("The button is pressed") # Save the current state as the previous state for the next loop iteration prev_button_state = button_state

    자세한 사용 방법

    • 위의 코드를 복사하여 Thonny IDE에 붙여넣으세요.
    • 초록색 실행 버튼을 클릭하거나 F5 키를 눌러 스크립트를 실행하세요. 스크립트가 실행됩니다.
    • 버튼을 누른 후 손을 떼세요.
    • Thonny 하단의 Shell에서 메시지를 확인하세요.
    Shell x
    >>> %Run -c $EDITOR_CONTENT
    MPY: soft reboot The button is pressed The button is released
    MicroPython (Raspberry Pi Pico) • Board CDC @ COM29 ≡

    ※ 주의:

    • 가끔 버튼을 한 번 눌렀다가 떼면 Thonny의 Shell에 여러 번 눌린 것으로 표시될 수 있습니다. 이러한 흔한 문제는 “챠터링 현상”이라고 합니다. 자세한 정보와 해결 방법은 라즈베리 파이 피코 - 버튼 - 디바운스에서 확인할 수 있습니다.
    • 버튼 모듈을 사용하는 경우, 핀을 입력으로 설정하여 button = Pin(BUTTON_PIN, Pin.IN)으로 지정합니다. 이 구성에서는 버튼이 눌리지 않았을 때 LOW, 눌렸을 때 HIGH를 출력합니다.

    동영상

    비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.