라즈베리 파이 구성과 환경 세팅 등은 건너뛰고 내가 라즈베이파이로 실습한 내용들을 기록할 예정이다.
라즈베리 파이 실습에는 파이썬 문법과 간단한 리눅스 명령어를 알고 있으면 된다.
그 전에 라즈베리파이의 40개의 GPIO 핀을 짚고 가면 좋을 것 같다.
GPIO는 General Purpose Input/Ouput의 약자이다. 즉 임베디드 하드웨어에서 입력, 출력이 가능하도록 한다.
내가 이번 라즈베리파이 실습동안 사용한 PIN number는 다음과 같다.
목적 | 물리적 PIN번호 (GPIO number) |
전원 (5V power) | 2 |
Ground | 6 |
LED1 (R-G-B) | 36-38-40 (GPIO 16-20-21) |
LED2 (R-G-B) | 33-35-37 (GPIO 13-19-26) |
Button | 32 (GPIO 12) |
PIR (모션센서) | 18 (GPIO 24) |
Buzzer | 22 (GPIO 25) |
DHT (온습도센서) | 16 (GPIO 23) |
LCD [SDA,SCL] | [3,5] (GPIO 2,3) |
그리고 내가 생각해봐야 했던 것은 브레드보드이다. 라즈베리 파이에 연결되는 것들에 전원을 주고 동작시키기 위해서는 회로를 잘 알고 연결시켜야한다. 나는 전선에 대한 지식이 없었기때문에 그림으로 정리하고 시작했다.
led, button, lcd, dht 등에서 GND는 (-)에(혹은 Ground에), VCC은 (+)에(혹은 V에), OUT은 GPIO에 연결시켜야 전원이 잘들어오고 데이터를 잘 주고받을 수 있다.
1번째 실습은 LED 제어이다.
먼저 LED를 제어할 파이썬 코드를 짜고, 라즈베리 파이의 터미널에서 그 파일을 실행시키면 작동하게 된다.
나는 LED 2개를 사용했는데, 1개는 GPIO16,20,21을 사용했고, 또 한개는 GPIO13,19,26을 사용하였다.
(순서대로 Red-Green-Blue이다.)
led를 이용한 실습으로는
- led_RGB.py : led의 빨강, 초록, 파랑을 번갈아 키는 실습
- ledblink_button.py : 버튼을 누르면 led1,2가 번갈아 파란불이 켜지는 실습 (한번 더 누르면 꺼진다.)
led_RGB.py
import RPi.GPIO as GPIO # GPIO 모듈 import
import time # sleep을 사용하기 위해 time 모듈 import
GPIO.setmode(GPIO.BCM) # 핀넘버 부르는 방식을 BCM으로 설정
GPIO.setup(13,GPIO.OUT) #Red, 핀모드를 출력용(GPIO.OUT)으로 사용한다는 setup()
GPIO.setup(19,GPIO.OUT) #Green
GPIO.setup(26,GPIO.OUT) #Blue
try:
while True: # 키고 0.5초후에 끄는 것을 차례대로 반복한다.
GPIO.output(13,True)
time.sleep(0.5) #0.5초동안 기다린다.
GPIO.output(13,False)
GPIO.output(19,True)
time.sleep(0.5)
GPIO.output(19,False)
GPIO.output(26,True)
time.sleep(0.5)
GPIO.output(26,False)
except KeyboardInterrupt: #Ctrl+C 혹은 종료된 경우, GPIO모듈을 cleanup()으로 off시킨다.
GPIO.cleanup()
finally:
GPIO.cleanup()
GPIO.setmode(GPIO.BCM)이란?
GPIO.BCM은 (Broadcom chip-specific pin numbers) 로 Broadcom SOC 칩에서 사용하는 핀이름을 사용하겠다는 의미이다. 쉽게 말하면 GPIO 번호로 부르겠다는 의미이다.
만약 GPIO. BOARD로 설정할 경우, 라즈베리파이에 배열된 순서대로 핀 이름을 부르겠다는 의미이다. 즉, 13,19,26을 실질적인 pin number인 33,35,37로 불러야한다.
ledblink_button.py
button을 사용한 실습인데, button은 GPIO 12번을 사용하였다.
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(21,GPIO.OUT) #led1의 Blue
GPIO.setup(26,GPIO.OUT) #led2의 Blue
GPIO.setup(12,GPIO.IN,pull_up_down=GPIO.PUD_UP) #button은 입력용으로 핀모드를 설정
control=False #버튼의 mode를 구별하기 위해
try:
while True:
button_state = GPIO.input(12) #button의 상태를 나타내는 button_state
if button_state == False: #button off일때 (눌렀을 때)
if(control==True): #버튼mode가 on모드이면
control=False #off모드로 변경
else: #버튼mode가 off면
control=True #on모드로 변경.
print('button pressed') #눌렸다고 콘솔에 출력.
if control == True: #on모드 상태면
GPIO.output(21,True) #led 2개를 번갈아 킴.
time.sleep(0.1)
GPIO.output(21,False)
GPIO.output(26,True)
time.sleep(0.1)
GPIO.output(26,False)
else: #off모드 상태면 led를 off.
GPIO.output(21,False)
GPIO.output(26,False)
time.sleep(0.2)
except KeyboardInterrupt:
GPIO.cleanup()
finally:
GPIO.cleanup()
pull_up_down=GPIO.PUD_UP이란?
라즈베리파이 내부에 풀다운/풀업 저항을 만들어 놓은 것으로,
pull_up_down=GPIO.PUD_UP : 스위치 안눌렀을 때 on, 눌렀을 때 off
pull_up_down = GPIO.PUD_DOWN : 스위치 안눌렀을 때 off, 눌렀을 때 on으로 인식하도록한다.
버튼이 눌릴 때마다 콘솔창에 'button pressed'가 출력된다.
'언어 > Python' 카테고리의 다른 글
파이썬 기초 문법2 (함수와 람다 표현식, 라이브러리) (0) | 2021.01.02 |
---|---|
파이썬 기초 문법2 (기본 입출력과 반복문&조건문) (0) | 2021.01.02 |
Beautiful Soup 사용하여 html 분석하기 (0) | 2020.09.07 |
기상청 날씨 데이터 cmd창에서 직접 불러오기 (0) | 2020.09.05 |
기상청 날씨 데이터불러오기 (0) | 2020.09.05 |