ESP32 마이크로파이썬 버튼 디바운스

때때로 ESP32에 버튼을 연결하면 버튼을 한 번만 눌러도 여러 번 눌린 것처럼 보일 수 있습니다. 이는 버튼이 눌린 상태와 눌리지 않은 상태를 빠르게 전환할 수 있기 때문입니다. 이것을 바운싱이라고 하며, 채터링으로도 알려져 있습니다. 바운싱은 프로그램에 문제를 일으킬 수 있습니다.

이 가이드는 MicroPython을 사용한 디바운싱이라는 기법을 통해 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×패널 장착 푸시 버튼 아마존
1×푸시 버튼 모듈 아마존
1×브레드보드 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) ESP32용 스크루 터미널 확장 보드 쿠팡 | 아마존
1×(추천) ESP32용 전원 분배기 쿠팡 | 아마존
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

버튼 정보

버튼에 대해 아직 익숙하지 않다면 (핀 구성, 작동 원리, ESP32와의 인터페이싱, 그리고 ESP32와 상호작용하기 위한 MicroPython 코드 작성 방법 포함), 관련 내용을 더 알아보실 수 있습니다:

선연결

  • breadboard를 사용하여 ESP32와 버튼을 연결하는 방법
ESP32 마이크로파이썬 버튼 배선 다이어그램

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

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

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

디바운스 처리가 없는 ESP32 MicroPython 코드와 디바운스 처리가 적용된 코드를 비교하여, 디바운스 처리가 동작에 어떤 영향을 미치는지 살펴보자.

ESP32 - 디바운스 없는 버튼

먼저, 동작을 이해하기 위해 디바운싱 없이 ESP32용 MicroPython 코드를 살펴보겠습니다.

/* * 이 ESP32 마이크로파이썬 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 마이크로파이썬 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-micropython/esp32-micropython-button-debounce */ 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

자세한 사용 방법

ESP32에서 Thonny IDE를 사용하여 MicroPython 코드를 설정하고 실행하는 방법에 대한 지침은 다음과 같습니다:

  • 컴퓨터에 Thonny IDE가 설치되어 있는지 확인하세요.
  • ESP32 보드에 MicroPython 펌웨어가 로드되어 있는지 확인하세요.
  • MicroPython과 함께 ESP32를 처음 사용하신다면, 단계별 지침은 ESP32 마이크로파이썬 - 시작하기 가이드를 확인하세요.
  • 다이어그램과 같이 버튼을 ESP32에 연결하세요.
  • USB 케이블을 이용해 ESP32 보드를 컴퓨터에 연결하세요.
  • 컴퓨터에서 Thonny IDE를 실행하세요.
  • Thonny IDE에서 도구 옵션을 선택하세요.
  • 인터프리터 탭에서 드롭다운 메뉴를 이용해 MicroPython (ESP32)를 선택하세요.
  • 정확한 포트가 선택되었는지 확인하세요. Thonny IDE는 보통 이를 자동으로 감지하지만, Windows의 경우 COM12, Linux의 경우 /dev/ttyACM0와 같이 수동으로 선택해야 할 수도 있습니다.
  • 제공된 MicroPython 코드를 복사하여 Thonny의 편집기에 붙여넣으세요.
  • 다음 방법으로 ESP32에 코드를 저장하세요:
    • 저장 버튼을 클릭하거나 Ctrl+S를 누르세요.
    • 저장 대화상자에서 MicroPython 장치를 선택하세요.
    • 파일 이름을 main.py로 지정하세요.
  • 녹색 실행 버튼을 클릭하거나 F5를 눌러 스크립트를 실행하세요.
  • 버튼을 몇 초간 누르고 있다가 놓으세요.
  • Thonny IDE 하단의 Shell에서 메시지를 확인하세요.
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot The button is pressed The button is pressed The button is pressed The button is released The button is released
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡

로그에서 볼 수 있듯이, 버튼을 단 한 번만 누르셨지만 ESP32는 여러 번 누른 것으로 감지되었습니다.

버튼에 대한 ESP32 디바운스

/* * 이 ESP32 마이크로파이썬 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 마이크로파이썬 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-micropython/esp32-micropython-button-debounce */ from DIYables_MicroPython_Button import Button import time # Initialize buttons connected to GPIO pins GPIO21 button = Button(21) button.set_debounce_time(100) # Set debounce time to 100 milliseconds while True: button.loop() if button.is_pressed(): print("The button is pressed") if button.is_released(): print("The button is released")
빠른 단계
  • Thonny IDE에서 Thonny IDE의 도구 패키지 관리로 이동합니다.
  • “DIYables-MicroPython-Button”을 검색한 후, DIYables에서 만든 Button 라이브러리를 찾습니다.
  • DIYables-MicroPython-Button을 클릭한 후, Button 라이브러리를 설치하기 위해 Install 버튼을 클릭합니다.
ESP32 마이크로파이썬 버튼 라이브러리
  • 주어진 코드를 복사하여 Thonny IDE의 편집기에 붙여넣습니다.
  • ESP32 보드에 스크립트를 저장합니다.
  • 초록색 실행 버튼(또는 F5 키)을 클릭하여 스크립트를 시작합니다. 스크립트가 실행됩니다.
  • 버튼을 누릅니다.
  • Thonny IDE 하단 Shell의 메시지를 확인합니다.
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 ≡

버튼을 한 번 눌렀고, ESP32는 추가적인 간섭 없이 이를 단일 누름 및 놓음으로 올바르게 인식했습니다.

※ 주의:

다른 앱은 서로 다른 DEBOUNCE_TIME 설정을 사용합니다. 각 앱마다 고유한 값이 있을 수 있습니다.

ESP32: 여러 버튼을 위한 디바운스

MicroPython을 사용하는 ESP32로 네 개의 버튼에 디바운싱을 추가해봅시다. ESP32에 버튼들을 연결하는 방법은 다음과 같습니다:

ESP32 마이크로파이썬 4 버튼 배선 다이어그램

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

/* * 이 ESP32 마이크로파이썬 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 마이크로파이썬 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-micropython/esp32-micropython-button-debounce */ from DIYables_MicroPython_Button import Button import time button_1 = Button(25) # Initialize buttons connected to ESP32 pin GPIO25 button_2 = Button(26) # Initialize buttons connected to ESP32 pin GPIO26 button_3 = Button(27) # Initialize buttons connected to ESP32 pin GPIO27 button_4 = Button(14) # Initialize buttons connected to ESP32 pin GPIO14 button_1.set_debounce_time(100) # Set debounce time to 100 milliseconds button_2.set_debounce_time(100) # Set debounce time to 100 milliseconds button_3.set_debounce_time(100) # Set debounce time to 100 milliseconds button_4.set_debounce_time(100) # Set debounce time to 100 milliseconds while True: button_1.loop() button_2.loop() button_3.loop() button_4.loop() if button_1.is_pressed(): print("The button 1 is pressed") if button_1.is_released(): print("The button 1 is released") if button_2.is_pressed(): print("The button 2 is pressed") if button_2.is_released(): print("The button 2 is released") if button_3.is_pressed(): print("The button 3 is pressed") if button_3.is_released(): print("The button 3 is released") if button_4.is_pressed(): print("The button 4 is pressed") if button_4.is_released(): print("The button 4 is released")

동영상

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