라즈베리파이를 스트레스 해소용 장난감으로 사용하다보니 이것 저것 잡다한 지식만 늘어가는 단점이 있네요^^ 뭐 아무튼 오늘은 그렇게 이것저것 뒤지다가 라즈베리파이에서 Python으로 코드를 다룬다면 유용할 GPIO 인터럽트 Interrupt 사용하는 방법을 잘 정리해 준 블로그[바로가기]가 있길래, 제가 언제나 그렇듯 고대로~~ 따라해보기를 했습니다.^^
요즘 라즈베리파이랑 놀면서 친숙해진 fritzing으로 결선을 그립니다. 푸시버튼 두 개를 라즈베리파이에 살짝 물려 주었습니다.
사진은 다른 용도로 데리고 놀려고 3개를 달았지만 20번 21번 GPIO에 연결한 두 개만 오늘 사용할 생각입니다.^^
아무리 생각해도 저 확장 보드는 잘 잘 쓰고 있습니다^^
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(20, GPIO.IN, pull_up_down=GPIO.PUD_UP) def my_callback(channel): print("Key(20) Pressed") GPIO.add_event_detect(20, GPIO.FALLING, callback=my_callback) try: print("Waiting f or falling edge on port 21") GPIO.wait_for_edge(21, GPIO.RISING) print("Falling edge detected. Here endeth the second lesson.") except KeyboardInterrupt: GPIO.cleanup() # clean up GPIO on CTRL+C exit GPIO.cleanup() # clean up GPIO on normal exit
일단 위 코드에서 21번과 20번을 풀업으로 세팅하는 과정을 두고, 20번에 연결한 버튼이 눌러질때 인터럽트가 실행됨을 확인하기 위해 Key Pressed
라는 메세지를 뿌리도록 합니다. 그리고 다른 버튼인 21번 버튼이 눌러질 때까지 대기하다가 GPIO.wait_for_edge
눌러지면 프로그램이 종료하는 거죠^^. 뭐 키보드로 CTRL+C
를 눌러도 프로그램이 종료를 하도록 되어 있습니다. 인터럽트를 thread방식으로 구현하도록 하는 코드는 GPIO.add_event_detect
라는 것인데 callback 함수를 지정해 주면 됩니다.^^
처음에는 저렇게 대기 상태에 있다가...
20번에 연결된 버튼을 누르면 인터럽트가 발생하고 지정된 함수(my_callback)이 실행됩니다.
그리고 21번에 연결된 버튼을 눌러주면 종료~~^^ 왜냐면 21번에 연결된 버튼이 눌러질 때까지는 기다리라고(GPIO.wait_for_edge
) 했는데 눌러졌으니 프로그램이 종료하는 거죠. 이렇게 오늘도 장나감가지고 기능 하나를 학습해 보았습니다.^^
'Hardware > SBC (rasp, jetson, latte panda)' 카테고리의 다른 글
라즈베리파이에서 화면 녹화하기 - record my desktop (4) | 2020.12.07 |
---|---|
초보자용 라즈베리파이 3 B+에 라즈비안 설치 (8) | 2019.05.02 |
라즈베리파이에서 초간편 카메라 Python으로 구현하기 (10) | 2016.05.06 |
Python을 이용하여 라즈베리파이 카메라 영상에 오버레이(Overlay) 테스트해보기 (16) | 2016.03.16 |
푸시 버튼으로 라즈베리파이의 카메라 촬영하기 기능을 Python으로 구현하기 (20) | 2016.03.04 |
라즈베리파이에서 Python을 이용하여 GPIO 테스트 -버튼과 LED- (25) | 2016.02.26 |
라즈베리파이에서 Python으로 PiCamera 카메라 심플하게 시작하기 (15) | 2016.02.24 |