본문 바로가기
라즈베리파이(Raspberry Pi)

(3) 라즈베리파이 GPIO control

by kingyejin 2023. 12. 3.

GPIO(general-purpose input/output)

: 마이크로프로세서가 주변기기와 통신하기 위해 범용적으로 사용하는 포트


- Raspberry Pi 3/4 model B에는 40개의 핀이 있고 각 핀마다 고유의 기능이 정해져있음.

-기본적으로 모든 핀은 디지털 신호(데이터)를 입출력할 수 있는 기능을 가짐.


브레드 보드

: 일명 빵판이라 불리는 전기 전자 소자를 실습할 때 주로 사용되는 기판


-IC 영역은 세로로 전체가 연결되어 있고, 버스 영역은 가로로 5칸씩 연결되어 있음. (빨:+, 파:-)


1. GPIO LED 연결

LED

 

*(-) 단자는 GND 와 연결 / (+) 단자는 GPIO와 연결 / (S) 단자는 DC 5V와 연결

1) GPIO17와 빨간색 LED 연결 ( GPIO17-RLED(+) / GND-RLED(-) )

 

2) GPIO17, GPIO27을 적색,녹색 LED에 연결 ( GPIO17-RLED(+) / GPIO27-GLED(+)/ GND-RLED(-)&GLED(-) )

 

3) '2)'에서 온습도 센서 추가 연결

DC 5V -DHT11(S)/ GPIO4-DHT11(+) / GPIO17-RLED(+) / GPIO27-GLED(+)/ GND-RLED(-)&GLED(-)&DHT11(-))


2. GPIO 패키지 설치

sudo pip install RPi.GPIO

3. 파이썬 파일 만들기

mkdir DLETSGO #DLETSGO 폴더 생성
cd DLETSGO
nano test_LED.py #파이썬 파일 생성

 

1) 라즈베리 파이의 GPIO를 2초 간격으로 on/off하는 파이썬 코드 생성 및 실행 [적색 LED와 연결하여 확인하기]

import RPi.GPIO as GPIO 
import time 
GPIO.setmode(GPIO.BCM) # BCM
GPIO.setup(17,GPIO.OUT)
while(True):
    GPIO.output(17,False) #off
    print("LED off")
    time.sleep(2)
    GPIO.output(17,True) #on
    print("LED on")
    time.sleep(2)

 

2) GPIO17, GPIO27을 적색, 녹색 LED에 연결하여 2초 간격으로 적색/녹색을 번갈아 가면서 출력하는 코드 생성 및 실행

import RPi.GPIO as GPIO 
import time 
GPIO.setmode(GPIO.BCM) 
GPIO.setup(17,GPIO.OUT)
GPIO.setup(27,GPIO.OUT)
while(True):
    GPIO.output(17,True)
    GPIO.output(27,False) 
    print("Red LED on")
    time.sleep(2)
    
    GPIO.output(17,False) 
    GPIO.output(27,True)
    print("Green LED on")
    time.sleep(2)

 

3) DHT11 온습도 센서를 통해 2초 간격으로 목표 온도 25도 이하일 경우 적색 LED 켜고, 상대습도 60% 이하일 경우 녹색 LED 켜기

import time
import Adafruit_DHT
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)  # 적색 LED
GPIO.setup(27, GPIO.OUT)  # 녹색 LED

sensor = Adafruit_DHT.DHT11
pin = 4

try:
    while True:
        humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

        if humidity is not None and temperature is not None:
            print(f"Temperature: {temperature}°C, Humidity: {humidity}%")

            # 온도가 25도 이하일 경우 적색 LED 켜기
            if temperature <= 25:
                GPIO.output(17, True)
                print("Red LED on")
            else:
                GPIO.output(17, False)

            # 습도가 60% 이하일 경우 녹색 LED 켜기
            if humidity <= 60:
                GPIO.output(27, True)
                print("Green LED on")
            else:
                GPIO.output(27, False)
        else:
            print("Read error")

        time.sleep(2)  # 2초 대기

except KeyboardInterrupt:
    print("Terminated by Keyboard")

finally:
    GPIO.cleanup()
    print("End of program")