본문 바로가기

[라즈베리파이 3B+] RPi.GPIO 입/출력 사용하기(Python)

by rudals.kim 2020. 12. 26. 댓글 개
반응형
아래 테스트는 Raspbian GNU/Linux 10 (buster)에서 테스트되었습니다.

 

## 출력테스트

라즈베리파이 3B+에서 RPi.GPIO 모듈의 사용법을 살펴보았습니다.

 

[라즈베리파이 3B+] RPi.GPIO 살펴보기(Python)

라즈베리파이 OS(구. 라즈비안)에서 기본적으로 제공되는 파이썬 모듈인 RPi.GPIO를 사용하여 GPIO를 컨트롤 할 수 있습니다. 모듈을 사용하기 위해서 먼저 불러와야 하는데 아래와 같은 import문으로

rudalskim.tistory.com

라즈베리파이의 파이썬 모듈인 RPi.GPIO를 사용하여 GPIO 출력 테스트를 해 보려고 합니다.

8개의 LED를 사용하여 순차적으로 LED ON/OFF를 반복하는 동작을 하는 소스코드입니다.

import RPi.GPIO as GPIO  
import time

led_array = [12,13,15,19,21,24,35,37]
blink_delay = 0.1

try:  
    GPIO.setmode(GPIO.BOARD)  
    for i in range(0,8):  
        GPIO.setup(led_array[i], GPIO.OUT)  
        GPIO.output(led_array[i], False)  
    # Infinite Loop  
    while (True):  
        for i in range(0, 8):  
            GPIO.output(led_array[i], True)  
            #print(led_array[i], 'pin On')
            time.sleep(blink_delay)  
            GPIO.output(led_array[i], False)  
            #print(led_array[i], 'pin Off')  
            time.sleep(blink_delay)  
except KeyboardInterrupt:  
    print("Exiting Program")
except:  
    print("Error Occurs, Exiting Program")
finally:  
    GPIO.cleanup()  

 

GPIO를 제어하는 다른 방법으로 shell script를 작성하여 컨트롤 할 수 있습니다.

아래는 위와 동일한 동작을 하는 코드로써 쉘스크립트로 작성되었습니다.

주의하실점은 쉘스크립트에서 사용되는 핀 번호는 BCM핀 번호를 사용합니다.

#!/bin/bash

leds=(18 27 22 10 25 8 19 26) #BCM scheme

while :
do    
    for pin in ${leds[@]}; do	
        echo $pin > /sys/class/gpio/export
        echo "out" > /sys/class/gpio/gpio${pin}/direction

        echo "1" > /sys/class/gpio/gpio${pin}/value
        sleep 0.1
        echo "0" > /sys/class/gpio/gpio${pin}/value
        sleep 0.1

        echo $pin > /sys/class/gpio/unexport
    done
done

 

파이썬 소스로 테스트 해 본 출력 테스트 영상입니다.

 

## 입력테스트

간단히 LED 1개와 스위치 1개를 연결하여 LED는 풀업된 상태로 계속 켜져 있으며, 스위치를 누르면 LED가 꺼지는 간단한 동작을 합니다.

import RPi.GPIO as GPIO
import time

led_pin = 17
sw_pin = 18

GPIO.setmode(GPIO.BCM)
GPIO.setup(led_pin, GPIO.OUT)
GPIO.setup(sw_pin, GPIO.IN, GPIO.PUD_UP)

try:
    while True:
        if(GPIO.input(sw_pin)):            
            GPIO.output(led_pin, GPIO.HIGH)
        else:
            GPIO.output(led_pin, GPIO.LOW)
except KeyboardInterrupt:
    print("Keyboard interrupt")
except:
    print("some error") 
finally:
    print("clean up") 
    GPIO.cleanup() 

 

파이썬 소스로 테스트 해 본 입력 테스트 영상입니다.

 

반응형

댓글