본문 바로가기

Hardware/SBC (rasp, jetson, latte panda)

푸시 버튼으로 라즈베리파이의 카메라 촬영하기 기능을 Python으로 구현하기

라즈베리파이의 카메라를 심플하게 설치한 이야기[바로가기]와 그 카메라를 Python으로 정말 초~ 심플하게 구동해본 이야기[바로가기]를 했구요... 그 후에 푸시 버튼과 LED를 GPIO In/Out에 연결해서 Python으로 심플하게 테스트하는 이야기[바로가기]를 했습니다. 이번에는 그 버튼을 이용해서 버튼을 누르면 카메라의 영상을 캡쳐하는 기능을 구현할까 합니다. 사실 이 기능은 Raspberry Pi Python Camera 요 단어들만 가지고 구글링을 하면 수두룩~~~하게 뜨는 예제입니다. 쉽게 말하면 언제나 그렇듯 별거 아닌 예제라는 뜻이지요^^

일단 구성은 위 그림과 같이 했습니다. 그냥 버튼의 한쪽은 GND에.. 다른쪽은 GPIO.21번에 연결했습니다.

흠.. 저는 확장보드를 사용하고 있으니 구성은 저렇게 되겠네요^^

저 GPIO 확장보드랑 연결선(점프선)은 참 잘 산것 같아요 ㅎㅎㅎ....

from picamera import PiCamera
from time import sleep
from gpiozero import Button

button = Button(21)

with PiCamera() as camera:
    camera.rotation = 180
    camera.start_preview(fullscreen=False, window=(100,20,640,480))
    button.wait_for_press()
    camera.capture('image.jpg')
    camera.stop_preview()

코드는 저렇게 심플합니다.^^. 먼저 지난번 GPIO 테스트와 달리 이번에는 gpiozero를 import했습니다. 지난번 코드에서 있던 각 종 설정없이 Button / LED 등으로 선언하면 되도록 편하게 되어 있습니다^^. 그리고, 또 지난번과 달리 이번에는 camera.rotation 으로 화면 각도를 조절해서 카메라를 뒤집지 않도록 했습니다.(^^) 그리고, button.wait_for_press()명령으로 푸시버튼이 눌러질때까지 기다렸다가 capture하도록 해 두었습니다. 지금이야 심플한 코드니까요.. 나중에는 인터럽트 방식을 써야하지 않을까합니다만^^... 아무튼 그렇게 해서 위 코드를 실행하면 라즈베리파이 화면에는..

흠... picamera의 preview화면은 라즈비안에서 화면 캡쳐를 해도 나타나지 않는다.. 그래서 이렇게 폰으로 찍어야한다.. 뭔가 방법이 없을까???

위 그림처럼 나타납니다. 저상태에서 버튼을 누르면...

얻은 사진입니다. 생각보다 괜찮죠?^^...

반응형