ESP32 마이크로파이썬 버튼

이 튜토리얼은 MicroPython을 사용하여 ESP32와 함께 버튼을 사용하는 방법을 안내합니다.

ESP32와 함께 사용할 때 버튼은 전자공학에 익숙하지 않은 사람들에게 특히 약간 까다로울 수 있습니다. 기초를 분해하고 몇 가지 일반적인 함정을 피해 봅시다.

해결해야 할 두 가지 주요 문제:

이 두 가지 문제를 이해하고 적절한 해결책을 구현함으로써 ESP32 프로젝트에서 버튼을 효과적으로 사용할 수 있게 될 것입니다.

ESP32 마이크로파이썬 버튼

준비물

1×ESP32 ESP-WROOM-32 개발 모듈 쿠팡 | 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×캡이 있는 버튼 쿠팡 | 아마존
1×버튼 키트 쿠팡 | 아마존
1×Panel-mount Button 아마존
1×푸시 버튼 모듈 아마존
1×브레드보드 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) ESP32용 스크루 터미널 확장 보드 쿠팡 | 아마존
1×(추천) ESP32용 전원 분배기 쿠팡 | 아마존
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

버튼에 대하여

푸시 버튼은 눌렀을 때 닫히고 손에서 놓으면 열리는 스위치입니다. 촉각 버튼 또는 순간 스위치라고도 불립니다. 푸시 버튼에는 크게 두 가지 유형이 있습니다.

  • PCB-mount push buttons: 브레드보드나 인쇄회로 기판에 장착할 수 있도록 설계되었습니다.
  • Panel-mount push buttons: 패널이나 인클로저에 장착할 수 있도록 제작되었습니다.
ESP32 마이크로파이썬 푸시 버튼

핀아웃

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

버튼 핀 배열

버튼에는 네 개의 핀이 있지만 두 개만 사용됩니다. 이는 핀이 내부에서 쌍으로 연결되어 있기 때문입니다. 버튼을 PCB에 연결하는 가능한 방식은 네 가지이지만, 이 중 두 가지 구성은 대칭적입니다.

버튼 사용법

왜 4개의 핀이 있는 버튼에 2개의 핀만 사용되나요?

PCB(인쇄회로기판)에 안전하게 장착되고 누르는 힘을 견딜 수 있도록.

패널 장착 버튼은 보통 두 개의 핀이 있습니다.

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

작동 방식

  • 버튼이 눌리지 않았을 때, 핀 A와 핀 B는 연결되지 않습니다.
  • 버튼이 눌렸을 때, 핀 A와 핀 B가 연결됩니다.
버튼 작동 방식

ESP32 - 버튼

한 버튼 핀은 VCC 또는 GND에 연결되고, 다른 핀은 ESP32의 핀에 연결됩니다. ESP32의 입력 핀 상태를 확인하여 버튼이 눌렸는지 여부를 판단할 수 있습니다.

버튼 상태 및 누름 상태

버튼이 눌리거나 놓일 때 ESP32 핀의 동작은 버튼이 연결된 방식과 핀의 설정에 따라 달라집니다.

두 가지 일반적인 연결 방법:

  • 풀다운 저항:
    • 버튼의 한쪽을 VCC(전원)에 연결하고 다른 쪽을 ESP32 핀에 연결합니다.
    • ESP32 핀에는 내부 풀다운 저항이나 외부 풀다운 저항을 사용합니다.
    • 버튼을 누르면 ESP32 핀은 HIGH로 읽히고, 누르지 않으면 LOW로 읽힙니다.
  • 풀업 저항:
    • 버튼의 한쪽을 GND(접지)에 연결하고 다른 쪽을 ESP32 핀에 연결합니다.
    • ESP32 핀에는 내장 풀업 저항이나 외부 저항을 사용합니다.
    • 버튼을 누르면 ESP32 핀은 LOW로 읽히고, 누르지 않으면 HIGH로 읽힙니다.

    왜 풀업 또는 풀다운 저항을 사용하나요?

    저항이 없으면 버튼이 눌리지 않은 상태에서 ESP32 핀이 불안정한 상태일 수 있습니다. 이는 잘못된 판독으로 이어질 수 있습니다. 풀업 또는 풀다운 저항을 사용하면 안정적인 상태를 보장할 수 있습니다.

    권장 구성:

    초보자에게는 ESP32 핀에 내장 풀업 저항을 사용하는 것을 권장합니다. 이는 배선을 간소화하고 외부 저항의 필요성을 없애줍니다. MicroPython 코드에서 button = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP)를 사용하여 이를 설정할 수 있습니다.

    기억하세요: ESP32에서 신뢰할 수 있는 버튼 판독을 위해서는 풀업 또는 풀다운 저항을 사용하는 것이 필수적입니다.

    ※ 주의:

    ESP32 핀 GPIO34, GPIO35, GPIO36(VP) 및 GPIO39(VN)은 내부 풀업 또는 풀다운 저항을 지원하지 않습니다. 이러한 핀의 경우 외부 풀업 또는 풀다운 저항을 사용해야 합니다.

선연결

ESP32 마이크로파이썬 버튼 배선도

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

ESP32 마이크로파이썬 2핀 푸시 버튼 배선도

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

버튼 프로그래밍 방법

  • Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP) 함수를 사용하여 내장 풀업 저항이 있는 입력 모드로 ESP32 핀을 설정합니다.
button = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP)
  • ESP32 핀 상태 읽기.
button_state = button.value()

※ 주의:

일반적으로 두 가지 경우가 있습니다:

  • 첫 번째: 입력이 HIGH이면 동작하고, 입력이 LOW이면 반대로 행동합니다.
  • 두 번째: 입력이 LOW에서 HIGH(또는 HIGH에서 LOW)로 전환되면 동작합니다.

원하는 동작에 따라 이 방법 중 하나를 선택합니다. 예를 들어, 버튼으로 LED를 제어할 때:

  • 버튼을 누를 때 전등이 켜지고, 버튼을 놓을 때 꺼지기를 원하면 첫 번째 경우를 선택해야 합니다.
  • 버튼을 탭할 때마다 전등이 켜졌다 꺼지기를 원하면 두 번째 경우를 선택하세요.

ESP32 MicroPython 코드 - 버튼 상태 읽기

from machine import Pin import time BUTTON_PIN = 21 # The ESP32 pin GPIO21 connected to the button # 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를 사용하여 ESP32에서 MicroPython 코드를 설정하고 실행하는 방법에 대한 지침입니다:

  • 컴퓨터에 Thonny IDE가 설치되어 있는지 확인하세요.
  • ESP32 보드에 MicroPython 펌웨어가 로드되어 있는지 확인하세요.
  • MicroPython을 사용하는 ESP32가 처음이라면, ESP32 마이크로파이썬 - 시작하기 가이드를 참고하여 단계별 지침을 확인하세요.
  • 제공된 다이어그램에 따라 버튼을 ESP32에 연결하세요.
  • USB 케이블을 사용하여 ESP32 보드를 컴퓨터에 연결하세요.
  • 컴퓨터에서 Thonny IDE를 여세요.
  • Thonny IDE에서 Tools Options로 이동하세요.
  • Interpreter 탭에서 드롭다운 메뉴에서 MicroPython (ESP32)를 선택하세요.
  • 올바른 포트가 선택되었는지 확인하세요. Thonny IDE는 보통 자동으로 감지하지만, 수동으로 선택해야 할 수도 있습니다 (예: Windows에서는 COM12, Linux에서는 /dev/ttyACM0).
  • 제공된 MicroPython 코드를 복사하여 Thonny의 에디터에 붙여넣으세요.
  • ESP32에 코드를 저장하려면:
    • Save 버튼을 클릭하거나 Ctrl+S를 누르세요.
    • 저장 대화 상자에서 MicroPython device를 선택하세요.
    • 파일 이름을 main.py로 지정하세요.
  • 초록색 Run 버튼을 클릭하거나 F5를 눌러 스크립트를 실행하세요.
  • 초록색 Run 버튼 또는 F5를 눌러 스크립트를 실행하세요.
  • Thonny IDE 하단의 Shell에서 메시지를 확인하세요.
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot 1 1 1 0 0 0 0 0 0 1 1 1
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡

1은 눌리지 않음을 나타내며, 0은 눌림을 나타냅니다.

코드 설명

이전에 제공된 ESP32 MicroPython 코드의 주석 부분에서 설명을 확인할 수 있습니다.

ESP32 마이크로파이썬 코드 - 버튼의 눌림과 해제 이벤트 감지

버튼이 눌렸을 때와 해제되었을 때를 인식할 수 있도록 코드를 변경해 보자.

/* * 이 ESP32 마이크로파이썬 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 마이크로파이썬 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-micropython/esp32-micropython-button */ from machine import Pin import time BUTTON_PIN = 21 # The ESP32 pin GPIO21 connected to the button # 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 x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot The button is pressed The button is released
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡

※ 주의:

가끔씩 버튼을 한 번 누르면 Thonny의 Shell에서 여러 번 누른 것으로 표시될 수 있습니다. 이 자주 발생하는 문제는 채터링 현상 또는 바운싱으로 알려져 있습니다. ESP32 마이크로파이썬 - 버튼 - 디바운스을 통해 자세한 내용을 확인하고 해결 방법을 찾아보세요.

동영상

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