라즈베리 파이 키패드 1x4
이 튜토리얼에서는 Raspberry Pi와 1x4 키패드를 사용하는 방법을 배웁니다. 구체적으로, 우리는 다음을 배울 것입니다:
- Raspberry Pi에 1x4 키패드를 연결하는 방법.
- 1x4 키패드에서 눌린 키를 읽기 위해 Raspberry Pi를 프로그래밍하는 방법.
Hardware Preparation
1 | × | Raspberry Pi 4 Model B | Amazon | |
1 | × | Keypad 1x4 | 쿠팡 | Amazon | |
1 | × | Jumper Wires | Amazon | |
1 | × | (추천) Screw Terminal Block Shield for Raspberry Pi | 쿠팡 | Amazon | |
1 | × | (추천) USB-C Power Cable with On/Off Switch for Raspberry Pi 4B | Amazon | |
1 | × | (추천) Plastic Case and Cooling Fan for Raspberry Pi 4B | Amazon | |
1 | × | (추천) HDMI Touch Screen Monitor for Raspberry Pi | Amazon |
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.
키패드 1x4 정보
1x4 키패드는 한 줄로 배열된 네 개의 멤브레인 버튼으로 구성되어 있습니다. 이 키패드는 비밀번호 입력, 메뉴 탐색 또는 제어 인터페이스와 같은 프로젝트에서 사용자 입력을 위해 일반적으로 사용됩니다.
핀아웃
1x4 키패드는 5개의 핀이 있으며, 이는 키 레이블 순서와 직접적으로 대응하지 않습니다. 구체적으로:
- 핀 1: 키 2에 연결
- 핀 2: 키 1에 연결
- 핀 3: 키 4에 연결
- 핀 4: 키 3에 연결
- 핀 5: 모든 키에 연결되는 공통 핀
image source: diyables.io
Wiring Diagram
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
배선 구성을 간단하고 체계적으로 만들기 위해, Raspberry Pi용 스크루 터미널 블록 실드 사용을 권장합니다. 이 실드는 아래와 같이 더욱 안정적이고 관리하기 쉬운 연결을 제공합니다:
라즈베리 파이 코드
1x4 키패드의 각 키는 버튼으로 작동합니다. 이는 digitalRead() 함수를 사용하여 각각의 키 상태를 확인할 수 있음을 의미합니다. 그러나 실제로는 어떤 버튼과 마찬가지로, 단일 누름이 여러 번으로 잘못 감지되는 바운싱 문제를 처리해야 합니다. 이를 피하기 위해 각 키를 디바운스해야 합니다. 이 작업은 다른 코드 부분을 차단하지 않고 네 개의 키를 디바운스하려고 할 때 어려워집니다. 다행히도 ezButton 라이브러리는 이 과정을 간단하게 만들어 줍니다.
Detailed Instructions
- Raspberry Pi에 Raspbian 또는 다른 Raspberry Pi 호환 운영 체제가 설치되어 있는지 확인하세요.
- Raspberry Pi가 PC와 동일한 로컬 네트워크에 연결되어 있는지 확인하세요.
- 일부 라이브러리를 설치해야 하는 경우, Raspberry Pi가 인터넷에 연결되어 있는지 확인하세요.
- Raspberry Pi를 처음 사용하는 경우 Raspberry Pi 설정 방법을 참고하세요.
- Arduino Nano를 1x4 키패드에 연결하세요.
- Linux와 macOS의 내장 SSH 클라이언트 또는 Windows의 PuTTY를 사용하여 SSH를 통해 PC를 Raspberry Pi에 연결하세요. SSH를 통해 PC를 Raspberry Pi에 연결하는 방법을 참고하세요.
- RPi.GPIO 라이브러리가 설치되어 있는지 확인하세요. 설치되지 않은 경우 다음 명령어를 사용하여 설치하세요:
sudo apt-get update
sudo apt-get install python3-rpi.gpio
- Python 스크립트 파일 keypad_1x4.py을 생성하고 다음 코드를 추가하세요:
# 이 Raspberry Pi 코드는 newbiely.kr 에서 개발되었습니다
# 이 Raspberry Pi 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다.
# 상세한 지침 및 연결도에 대해서는 다음을 방문하세요:
# https://newbiely.kr/tutorials/raspberry-pi/raspberry-pi-keypad-1x4
import RPi.GPIO as GPIO
import time
# Define GPIO pins for the keypad buttons
PIN_KEY_1 = 24 # The Raspberry Pi pin GPIO24 connected to the key 1
PIN_KEY_2 = 23 # The Raspberry Pi pin GPIO23 connected to the key 2
PIN_KEY_3 = 8 # The Raspberry Pi pin GPIO8 connected to the key 3
PIN_KEY_4 = 25 # The Raspberry Pi pin GPIO25 connected to the key 4
KEY_PINS = [PIN_KEY_1, PIN_KEY_2, PIN_KEY_3, PIN_KEY_4]
DEBOUNCE_TIME = 0.1 # 100 milliseconds
# Setup GPIO mode
GPIO.setmode(GPIO.BCM)
# Setup GPIO pins as inputs with pull-up resistors
for pin in KEY_PINS:
GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# Initialize previous states for each button
previous_states = [GPIO.input(pin) for pin in KEY_PINS]
# Function to read the state of the keypad buttons with debouncing
def get_key_pressed():
pressed_key = 0
for i, pin in enumerate(KEY_PINS):
current_state = GPIO.input(pin)
if previous_states[i] == GPIO.HIGH and current_state == GPIO.LOW: # Detect state change from HIGH to LOW
time.sleep(DEBOUNCE_TIME) # Wait for debounce time
if GPIO.input(pin) == GPIO.LOW: # Ensure button is still pressed
pressed_key = i + 1
break
return pressed_key
try:
while True:
key = get_key_pressed()
if key:
print(f"The key {key} is pressed")
# Update the previous states
previous_states = [GPIO.input(pin) for pin in KEY_PINS]
time.sleep(0.1) # Delay for a short period to avoid excessive CPU usage
except KeyboardInterrupt:
# Cleanup GPIO settings before exiting
GPIO.cleanup()
print("Program terminated")
- 파일을 저장하고 터미널에서 다음 명령어를 실행하여 Python 스크립트를 실행하세요:
python3 keypad_1x4.py
- 1x4 키패드의 각 키를 하나씩 누르세요.
- 터미널에서 결과를 확인하세요.
PuTTY - Raspberry Pi
The key 1 is pressed
The key 2 is pressed
The key 3 is pressed
The key 4 is pressed