뭉지(moonz)
작은 발자국들의 위대한 여정
뭉지(moonz)
  • All (202)
    • Test Code (4)
    • 백엔드 개발하며 작성한 (27)
      • Spring (17)
      • 데이터베이스 (7)
      • 기억할 내용 (3)
    • 언어 (53)
      • Java (25)
      • node.js (7)
      • Python (21)
    • 클라우드 (6)
    • Algorithm & Data Structure (51)
      • 개념 (15)
      • 문제 풀이 (36)
    • 유용한 모든 것 (16)
    • monologue (7)
      • 업무 노트 (1)
      • 관리 로그 (0)
      • 내 이야기 공책 (6)
    • Project (2)
    • TroubleShooting (8)
    • 지식 (18)
      • Machine Learning (6)
      • Review (7)
      • Web (5)
    • Computer Science (5)

블로그 메뉴

  • 홈
  • 태그

인기 글

최근 글

최근 댓글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
뭉지(moonz)

작은 발자국들의 위대한 여정

라즈베리파이의 GPIO
언어/Python

라즈베리파이의 GPIO

2020. 11. 6. 15:40
반응형

라즈베리 파이 구성과 환경 세팅 등은 건너뛰고 내가 라즈베이파이로 실습한 내용들을 기록할 예정이다.

라즈베리 파이 실습에는 파이썬 문법과 간단한 리눅스 명령어를 알고 있으면 된다. 

 

그 전에 라즈베리파이의 40개의 GPIO 핀을 짚고 가면 좋을 것 같다.

GPIO는 General Purpose Input/Ouput의 약자이다. 즉 임베디드 하드웨어에서 입력, 출력이 가능하도록 한다. 

https://wikidocs.net/3172

내가 이번 라즈베리파이 실습동안 사용한 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
    '언어/Python' 카테고리의 다른 글
    • 파이썬 기초 문법2 (함수와 람다 표현식, 라이브러리)
    • 파이썬 기초 문법2 (기본 입출력과 반복문&조건문)
    • Beautiful Soup 사용하여 html 분석하기
    • 기상청 날씨 데이터 cmd창에서 직접 불러오기
    뭉지(moonz)
    뭉지(moonz)
    제가 깨달은 것을 정리하는 공간입니다. 🧡

    티스토리툴바