라즈베리 파이 피코 버튼 디바운스
라즈베리 파이 파이코로 버튼이 눌렸을 때 이를 감지하는 프로그램을 작성하면, 한 번의 버튼 누름이 여러 번 읽히는 것을 볼 수 있습니다. 이는 버튼의 설계로 인해 ON과 OFF 상태가 빠르게 번갈아 나타날 수 있기 때문인데, 이런 번쩍임 현상을 "채터링"이라고 합니다. 채터링은 버튼이 여러 번 눌린 것처럼 보이게 만들어, 일부 프로그램에서는 오류를 발생시킬 수 있습니다. 이 안내서는 버튼의 채터링 문제를 해결하는 방법, 즉 디바운싱 기법에 대해 설명합니다.

아래 다섯 가지 예시를 살펴보고, 그 차이점을 설명할 것입니다.
- 디바운싱 처리 없이 버튼을 사용하는 Raspberry Pi Pico.
- Raspberry Pi Pico는 버튼 디바운싱을 위해 utime.sleep_ms() 함수를 사용합니다.
- Raspberry Pi Pico는 버튼 디바운싱에 비차단(non-blocking) 방식을 사용합니다.
- Raspberry Pi Pico는 버튼 디바운싱을 위해 DIYables-MicroPython-Button 라이브러리를 사용합니다.
- Raspberry Pi Pico는 세 개의 버튼 디바운싱을 위해 DIYables-MicroPython-Button 라이브러리를 사용합니다.
준비물
| 1 | × | 라즈베리 파이 피코 W | 쿠팡 | 아마존 | |
| 1 | × | 라즈베리 파이 피코 (또는) | 쿠팡 | 아마존 | |
| 1 | × | 마이크로 USB 케이블 | 아마존 | |
| 1 | × | 캡이 있는 버튼 | 쿠팡 | 아마존 | |
| 1 | × | 버튼 키트 | 쿠팡 | 아마존 | |
| 1 | × | 패널 장착 푸시 버튼 | 아마존 | |
| 1 | × | 푸시 버튼 모듈 | 아마존 | |
| 1 | × | 브레드보드 | 쿠팡 | 아마존 | |
| 1 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 라즈베리 파이 피코용 스크루 터미널 확장 보드 | 아마존 |
선연결

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
아래 그림은 브레드보드 없이 같은 연결을 보여줍니다:

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
라즈베리 파이 피코 코드를 디바운스 없이와 디바운스 적용 후로 살펴보고 비교해보자, 그리고 이들이 어떻게 동작하는지 확인해보자.
라즈베리 파이 피코 - 디바운스 없는 버튼
먼저, 디바운싱 없이 코드를 살펴보고 그것이 어떻게 작동하는지 이해해 봅시다.
자세한 사용 방법
다음 지침을 단계별로 따르십시오:
- 컴퓨터에 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 키를 사용합니다.
- 저장 대화상자에 '이 컴퓨터'와 'Raspberry Pi Pico' 두 섹션이 표시되면 Raspberry Pi Pico를 선택하세요.
- 파일명을 main.py로 저장하세요.
- 녹색 Run 버튼을 클릭하거나 F5 키를 눌러 스크립트를 실행하세요. 스크립트가 실행될 것입니다.
- 버튼을 몇 초간 누른 후 놓으세요.
- Thonny 하단의 Shell에 표시되는 메시지를 확인하세요.
버튼을 단 한 번 누르고 떼었지만, Raspberry Pi Pico는 그것이 여러 번 수행된 것으로 인식합니다.
Raspberry Pi Pico - 디바운스 기능이 있는 버튼
자세한 사용 방법
- 위의 MicroPython 코드를 복사하여 Thonny의 에디터에 붙여넣습니다.
- 코드를 Raspberry Pi Pico에 저장합니다.
- 녹색 Run 버튼을 클릭하거나 F5 키를 눌러 스크립트를 실행합니다.
- 버튼을 몇 초간 누른 후 놓습니다.
- Thonny 하단의 Shell에서 출력을 확인합니다.
버튼을 한 번 클릭했고, Raspberry Pi Pico는 추가 잡음 없이 정확하게 한 번 누르고 뗀 것으로 인식했습니다.
※ 주의:
애플리케이션마다 서로 다른 DEBOUNCE_TIME 값을 사용합니다. 각 애플리케이션은 특정 값을 가질 수 있습니다.
위 코드에서는 utime.sleep_ms()를 사용하여 버튼의 디바운스를 처리합니다. 이 함수는 슬립 시간 동안 Raspberry Pico가 다른 작업을 수행하지 못하게 합니다. 다음에는 다른 작업들을 중단하지 않고 디바운스를 처리하는 방법을 보여주는 또 다른 예제를 살펴보겠습니다.
라즈베리 파이 피코 - 논블로킹 디바운스 버튼
라즈베리 파이 피코 - 라이브러리를 사용한 디바운스
디바운싱 코드는 복잡해 보일 수 있으며, 특히 여러 버튼을 사용할 때 더욱 그렇습니다. 다행히도 여러 버튼을 관리해야 하는 초보자들을 위한 더 쉬운 방법이 있습니다. 이 방법은 DIYables_MicroPython_Button이라는 라이브러리를 사용합니다. DIYables_MicroPython_Button 라이브러리에 대해 여기에서 자세히 알아볼 수 있습니다.
몇 가지 예제 코드를 살펴보자.
Raspberry Pi Pico 단일 버튼을 위한 버튼 디바운스 코드
빠른 단계
- Thonny IDE에서 Thonny IDE의 도구 패키지 관리로 이동합니다.
- “DIYables-MicroPython-Button”을 검색한 후, DIYables에서 만든 Button 라이브러리를 찾습니다.
- DIYables-MicroPython-Button을 클릭하고, Button 라이브러리를 설치하려면 Install 버튼을 클릭합니다.

- 위 코드를 복사하여 Thonny IDE의 편집기에 붙여넣습니다.
- 스크립트를 Raspberry Pi Pico에 저장합니다.
- 녹색 Run 버튼을 클릭하거나 (또는 F5 키를 눌러) 스크립트를 실행합니다. 스크립트가 실행될 것입니다.
- 버튼을 누릅니다.
- Thonny 하단에 있는 Shell에서 메시지를 확인합니다.
라즈베리 파이 피코 버튼 디바운스 코드 (다중 버튼용)
3개의 버튼에 대해 디바운싱해 봅시다. 아래는 Raspberry Pi Pico와 3개의 버튼 간의 배선도입니다:

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
브레드보드를 사용하지 않는다면 이렇게 연결하세요:

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