본문 바로가기

Hardware/SBC (rasp, jetson, latte panda)

라즈베리파이에서 Python을 이용하여 GPIO 테스트 -버튼과 LED-

오늘은 푸시버튼을 누르면 LED가 켜지는 겁~~나게 간단한 예제를 라즈베리파이에서 Python을 이용해서 테스트해 보도록 하겠습니다. 뭐 언제나 그렇듯 항상~~ 기초적인 거지요.. 푸쉬버튼과 LED를 살짝 구해야하고, 또 연결선등등을 구해야합니다만... 저는 이걸 엘레파츠의 라즈베리파이2 입출력 키트로 해결했습니다. 요즘은 엘레파츠가 마음에 들더군요^^ 배송도 빠르고~~ 대응도 괜찮고^^... 뭐 아무튼 그렇게 키트를 구했으니 이제 시작해볼까요... 

일단 LED에 대해 아셔야합니다. 뭐냐구요?? +-를 알아야죠^^. 위 그림처럼 구분하면 됩니다. 내부를 보고 짧은쪽이 +, 혹은 다리가 긴 쪽이 +, 위에서 보았을때 동그스름한 부분이 +... 이렇습니다.^^

출처 : DIY Hacking http://diyhacking.com/raspberry-pi-robot/

그리고 라즈베리파이의 GPIO 핀맵을 알아야죠.. 저는 라즈베리파이 B+라서 위 그림 왼쪽의 40핀짜리를 읽으면 됩니다.^^ 그리고 [바로가기]에서 소개한 Fritzing이라는 툴로 그린 브레드보드 그림은

이렇습니다. 회로도로는 

이렇구요... 푸쉬버튼은 GND로 한쪽을 연결하고, 다른쪽은 풀업저항을 이용해서 GPIO 21번에 연결했습니다. 그리고, LED는 330옴 저항으로 GPIO 6번에 연결했습니다. 위 그림으로 나머지는 다 설명되겠지요.. 원체 간결한 예제니까요^^

아까 이야기한 키트를 사면 케이스가 따라옵니다. 그러나 한가지 에러가 있는게 뚜껑을 닫으면 저 케이블이 연결되지 않더군요ㅠㅠ.

저렇게 케이블을 연장하고... GPIO를 확장하는

GPIO 확장 보드를 미니 브레드보드에 연결해서 사용했습니다. Fritzing에는 확장보드까지는 그리지 않았습니다.^^

그리고.. 저렇게 푸쉬버튼과 LED가 배치되었네요^^

이제 버튼을 누르면 LED가 켜져야죠^^

이렇게 말이죠.. ㅎㅎ 이제 가장 중요한 Python 코드를 보도록 하겠습니다.

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

GPIO.setup(6, GPIO.OUT)
GPIO.setup(21, GPIO.IN)

try:
    while True:
        inputIO = GPIO.input(21)

        if inputIO == False:
            GPIO.output(6, GPIO.HIGH)
            #time.sleep(1)

        else:
            GPIO.output(6, GPIO.LOW)
            #time.sleep(1)

except KeyboardInterrupt:
    GPIO.cleanup()

먼저 라즈베리파이의 GPIO를 import하고 GPIO.setmode로 BCM을 설정해둡니다. 그리고, GPIO.setup으로 6번과 21번을 각각 GPIO.out과 in으로 설정해서 푸쉬버튼 값을 받고(in) LED를 켜기 위해 출력(out)하도록 설정합니다. 여기서 try/except 구문으로 구분한것은 키보드로 CTRL+C로 멈출때, GPIO 출력 설정을 지우기(GPIO.cleanup)위해서 입니다. 그렇지 않으면 다시 실행하면 GPIO가 열려있다는 에러 메세지를 받을 수도 있습니다. 그리고, 주석처리된 time.sleep(1)은 버튼을 누르거나 땔때, 1초를 기다리는 것으로 구미에 맞게 사용하시면 됩니다.^^ 코드야 원체 간단하니.. 이정도면 되죠^^ 오늘은 아가 미바뤼의 겨울방학으로 저는 하루 쉬면서 이렇게 포스팅을 할 수 있네요~^^....

반응형