라즈베리파이 GPIO, 터치센서로 LED 켜키
안뇽하세요 라이프온룸 입니이다. ㅎㅎ
라즈베리파이의 GPIO, 왠지 써야 뽕을 뽑을 것만 같은 이 느낌 ! 그래서 준비했습니다.
터치센서와 LED를 달아서 LED 켜기 !! ㅋㅋㅋㅋㅋ 뭐 쉬운 예제이지만 앞으로 미세먼지센서, 조도센서, IR 리시버 등등등 을 사용하기 위한 초석적인 포스트로 삼고자 준비했어요 ㅎㅎ
여튼 오늘의 주인공 터치 센서입니다 !!!

이 이 외에도 LED 와 저항이 필요 하겠죠 ? 그럼 준비물 소개는 여기 까지 하고 GPIO를 파헤쳐 봅시다.
1. 라베리파이의 GPIO에 대해 알아보즈아 ~
gpio 는 General purpose input/output 의 약자입니다. 말그대로 자용자에 의해 제어될 수 있는 디지털 신호 핀이지요 라즈베리파이의 GPIO 핀배열은 다음과 같습니다.
다양한 기능을 제공함을 알 수 있죠 여기서 주의 할 점은 라즈베리파이의 경우 아두이노와 다르게 GPIO 입력 3.3V max 입니다. 이 이상의 전압이 들어갈 경우 라즈베리파이가 고장 날 수 있으니 신중하게 작업 하시기 바랄게요 !
그럼으로 터치센서 연결 시에도 VCC에 3.3v 를 넣어야 합니다. 당연하겠지만 GPIO output 도 3.3V 까지만 제한 됩니다. 보통 아두이노용 센서들은 5V 에 맞춰진 경우가 많은데 라즈베리파이에서 사용하시려면 스펙을 잘보고 사용하셔야 합니다.
나중에 코딩 할 때도 설명 드리겠지만 1~40 은 Raspberry pi connector numbering (BOARD) 라고 부르고 GPIOX 의 X에 해당하는 번호는 Broadcom pin number(BCM) 라고 해서 실제 브로드컴 칩의 핀번호 입니다.
2. 회로 연결
연결은 다음과 같이 하면 됩니다. 쉽죠잉 ㅎㅎ 아 그리고 전원을 끄고 연결하시는 것을 추천드립니다. 괜히 핀 잘 못 손데면 쇼트나서 보드가 고장날 지도 몰라요 ㅜㅜ
- 초록색: 3.3V – Touch VCC
- 빨산색: GPIO4 – Touch SIG
- 노란색: GPIO17 – LED +
- 하얀색: GND

LED 연결시 저항을 220옴 사용했는데요! 엄밀히 말하면 LED 의 데이터쉬트를 보고 소비 전압 전류를 알아낸 뒤 계산을 해서 달아야 합니다. 그런데 데이터시트는 보기 귀찮으늬 아래 표를 참고하시면 됩니다.
그럼 계산은 어떻게 하느냐 적색 LED의 경우를 보면 최소 전압 1.8V 일때 20mA 즉 0.02A 가 흐르죠 ? 그럼 회로를 그려보면 아래와 같습니다.
LED 에 1.8V 가 걸리고 직렬임으로 저항에는 3.3 -1.8 = 1.5V 가 걸립니다. 그리고 회로에는 0.02A 가 흐른다고 가정해 보죠

그러면 중학교인가요 ? 때 배운 옴의 법칙(V=IR) 에 따라 1.5V = 0.02A * 저항 입니다. 그럼 계산을 해보면 75Ω 이 나옵니다. ! 그래서 75Ω 이상의 저항을 달아줘야 하지만 저는 그냥 220Ω 을 달았어요 ㅎㅎ 잘 동작합니다.
그리고 저항은 반드시 달아야 합니다. 라즈베리파이의 3.3V 에 빨간색 LED를 직빵으로 연결하면 LED가 타버립니다. ..
자 그럼 사전 지식은 이쯤이면 된 것 같고 저는 연결을 다 했습니다.
여튼 연결을 마쳤으면 코드를 한번 보죠
3. 코드
코드를 짜기전에 설치해줘야 할 라이브러리가 있습니다.
sudo apt-get install RPI.GPIO pip install RPi.GPIO
아마 첫번째는 OS가 라즈베리안 이라면 전부 깔려 있을 거구요(혹시 몰라서요 ㅎㅎ) ! 두번째 명령만 하면 될 것 같네요 ㅎㅎ 참고로 저는 제가 진행하고 있는 프로젝트 에서 사용을 위해 가상환경에서 설치를 진행 했습니다. (python2.7, 가상환경이 아니어도 라이브러리만 깔면 동작합니다.)
https://github.com/hog225/echowemoclient
아래 코드를 입력 후 실행해 보세요 ! 그리고 터치버튼에 손을 대고 손을 때 보세요 손을 댈때 LED가 켜지고 때면 꺼지는걸 확인할 수 있을거에요 ㅎㅎ
# -*- coding: utf-8 -*- import RPi.GPIO as g import time IN_TOUCH = 4 # GPIO 4 OUT_LED = 17 # GPIO 17 # BCM g.setmode(g.BCM) #g.setup(IN_TOUCH, g.IN, pull_up_down = g.PUD_DOWN) g.setup(IN_TOUCH, g.IN) g.setup(OUT_LED, g.OUT, initial=g.LOW) g.add_event_detect(IN_TOUCH, g.BOTH) # 터치버튼을 누르면 LED ON 때면 OFF def sensorCallBack(arg1): # arg1 BCM PinNumber value = g.input(arg1) print "Touch " + "GPIO Value : "+str(value) if value == 1: g.output(OUT_LED, value) else: g.output(OUT_LED, 0) g.add_event_callback(IN_TOUCH, sensorCallBack) print "Start" try: while True: time.sleep(1) except KeyboardInterrupt: print "Keyboard Interrupt" except: print "other error " finally: g.cleanup()
잠깐 설명을 하고 갈게요 ㅎㅎ
g.setmode(g.BCM)
제가 라즈베리파이 핀 번호에 대해 설명했었죠 ?? 위 코드에서 보면 g.setmode(g.BCM) 이라는 코드가 나옵니다. 이는 핀 번호를 GPIOX 의 X를 사용하겠다는 의미에요 ! 그래서 4, 17 번을 이용해 컨트롤을 해줘야 합니다.
g.setup(IN_TOUCH, g.IN, pull_up_down = g.PUD_DOWN)
GPIO를 Input 으로 지정하는 경우 pull_up_down 지정을 옵션으로 줍니다. 옵션을 안주는 경우 PUD_OFF 가 디폴트 입니다. 풀업 혹은 풀 다운 회로를 구성해야 한다는 얘기지요 ! 터치센서 모듈의 경우 모듈 내부에서 이런 회로가 잘 되 있어서 신경 안써도 되겠지만 아날로그 스위치의 경우에는 회로를 연결해 줘야 합니다. 아날로그 스위치 연결 방법에 대해서는 아래 URL 을 참고하세요 ㅎㅎ
https://grantwinney.com/using-pullup-and-pulldown-resistors-on-the-raspberry-pi/
터치센서의 경우는 PUD_OFF, PUD_DOWN, PUD_UP 상황에서도 추가 회로 없이 모두 동일하게 동작합니다. ㅎㅎ
g.add_event_detect(4, g.BOTH)
g.BOTH 는 핀의 전압이 g.RISING, g.FALLING일 경우 동시에 이벤트를 발생 시키겠다는 의미입니다.
g.add_event_callback(IN_TOUCH, sensorCallBack)
이 함수는 sensorCallBack 이라는 함수를 4번 핀에 이벤트가 발생할 때마다 호출 하게합니다. 해당 함수에서 Sensor 입력값에 따라 GPIO를 조작하면 되겠죠 이 코드처럼요 !! ㅎㅎ
넵 오늘 포스팅은 여기까지 입니다.
다음에는 이 터치 센서로 소노프를 제어해 봐야 겠어요 ㅋㅋㅋ
다음시간에 또 만나도록 하죠 요즘 일교차가 큰데 감기 조심하시구요 ㅋㅋ
제 블로그 방문자 수 도 거의 남극에 있어서 추워하니 자주 오셔서 댓글로 응원해 주시면 감사하겠습니다. ㅎㅎ

안녕하세요! sudo apt-get install RPI.GPIO
pip install RPi.GPIO을 설치하고 코드 실행시 import Error: No module named RPI.GPIO라고 뜨는데 어떻게 해야하나요?ㅜㅜ