'RPi.GPIO'에 해당되는 글 2건

  1. 2016.01.03 라즈베리파이를 이용한 LED 실험
  2. 2016.01.03 라즈베리파이의 RPi.GPIO 모듈 개요 2

여기에서는 LED를 켜고 끄는 실험을 해 보도록 한다. LED는 파이썬 코드가 GPIO를 동작시키는 것을 시각적으로 확인할 수 있는 가장 간단한 도구이다. 다음 그림과 같이 LED를 저항과 직결한 뒤 12번 핀에 연결한다. 저항은 200Ω (혹은 그 이상) 이고 이것은 LED에 과전류가 흐르는 것을 막아주는 역할을 한다. LED는 극성이 있는 소자이다. 다리가 긴 쪽이 anode(+극), 짧은 쪽이 cathod(-극)이므로 연결할 때 방향을 주의해야 한다. 잘못 연결하면 LED가 켜지지 않는다. 짧은 다리는 저항과 직결하여 6번 핀(GND)에 연결하고 긴 쪽은 12번 핀과 연결하면 된다.


그림 9.2.1 LED 결선도 (긴 다리를 12번 핀에 연결)


 GPIO핀으로 LED를 제어하기 위해서 이 핀을 먼저 GPIO.setup()를 이용하여 출력으로 설정해야 한다. 그 이후에 GPIO.output()함수로 GPIO.HIGH 신호를 내보내면 LED가 켜지고 GPIO.LOW 신호를 내보내면 LED가 꺼진다.


blink.py

import RPi.GPIO as GPIO
import time

led = 12
GPIO.setmode(GPIO.BOARD)
GPIO.setup(led, GPIO.OUT)

for k in range(10):
   GPIO.output(led, GPIO.HIGH)
   time.sleep(0.5)
   GPIO.output(led, GPIO.LOW)
   time.sleep(0.5)

GPIO.cleanup()


이 프로그램은 LED를 10번 점멸시키고 난 뒤 종료된다. 이것을 실행하려면 다음과 같이 하면 된다.


sudo python3 blink.py


전에 언급한 바와 같이 반드시 앞에 sudo 명령을 붙여야 한다는 것이 유의하자.


 한 가지 언급할 것은 저항 값을 선택하는 방법이다. 데이터 쉬트에 의하면 LED에는 10mA 정도 흐르도록 하면 되고 이때 LED의 전압 강하가 1.7V 정도이다. 따라서 오옴의 법칙에 의해서 R = (3.3-1.7)/0.01 = 160Ω  을 얻을 수 있다. 이 결과로부터 160Ω 이상의 저항을 선택하되 너무 저항 값이 크면 불빛을 눈으로 확인하기 어려우므로 160~500Ω 범위의 저항을 선택하면 된다.

원문링크

Posted by 살레시오
,

 GPIO를 제어하기 위한 방법은 여러가지가 있지만 여기에서는 파이썬으로 하는 방법에 대해서 소개하고자 한다. GPIO를 제어하기 위한 파이썬 패키지 중에서 RPi.GPIO 모듈과 WiringPi 라는 모듈이 가장 많이 쓰인다. 특히 RPi.GPIO는 라즈비언에 기본으로 설치되어 있으므로 별도로 설치하는 과정이 필요치 않다. 여기에서는 이것을 이용하기로 한다.


 RPi.GPIO 모듈을 사용하기 위해서는 먼저 다음과 같이 import 명령으로 불러와야 한다.


import RPi.GPIO as GPIO


그 이후에 다음과 같은 메서드들을 사용할 수 있다.


표 9.2.1 RPi.GPIO 모듈의 기본적인 메서드들

메서드 명

기능

GPIO.setmode(GPIO.BOARD)

GPIO.setmode(GPIO.BCM)

핀 번호를 라즈베리파이 보드(BOARD) 번호로 참조

BCM(Broadcom chip-specific pin numbers)모드

GPIO.setup(pin, GPIO.IN)

GPIO.setup(pin, GPIO.OUT)

핀을 입력으로 설정

핀을 출력으로 설정

GPIO.output(pin, GPIO.HIGH)

GPIO.output(pin, GPIO.LOW)

디지털 출력을 HIGH로 설정

디지털 출력을 LOW로 설정

GPIO.input(pin)

디지털 값을 읽음.

GPIO.cleanup()

GPIO 모듈의 점유 리소스를 해제

GPIO.VERSION

RPi.GPIO 모듈의 버전값을 갖는 변수


 GPIO.setmode()함수는 핀 번호를 지정할 때 어떤 참조 방식을 사용하는지를 설정하는 함수로서 다른 메서드를 사용하기 전에 반드시 사전에 호출해야 하는 함수이다. 인자로는 기정의된 상수를 받는데 GPIO.BOARD 는 핀 번호로 라즈베리파이 보드 상의 번호(1~40)를 이용하겠다고 설정하는 것이다. GPIO.BCM은 브로드컴칩의 번호를 참조하겠다는 것으로서 그림 9.1의 GPIOXX 에서 XX에 해당하는 번호를 사용하겠다는 것이다. 예를 들어 GPIO.BOARD 모드에서 12번 핀은 GPIO.BCM 모드에서 18번 핀과 동일하다. 다른 메서드들을 사용하기 앞서서 반드시 GPIO.mode()함수를 호출하여 핀 번호 참조 모드를 지정해 주어야 하며 이 모드의 설정없이 다른 메서드들을 호출하려고 하면 예외가 발생한다.


   GPIO.setup() 함수는 아두이노의 pinMode()함수와 유사한 기능을 수행한다. GPIO.input()이나 GPIO.output()함수를 호출하기 전에 사용하고자 하는 핀이 입력인지 출력인지를 먼저 설정해 주어야 한다. 만약 GPIO.setup() 함수 호출시 풀업(pull-up)이나 풀다운(pull-down) 저항을 연결하려면 다음과 같이 pull_up_down 키워드 파라메터를 GPIO.setup()함수에 넘겨야 한다.


GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP )

GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_DOWN )


pull_up_down 파라메터를 주지 않으면 아무런 저항도 연결되지 않는다.


 GPIO 모듈의 사용이 모두 끝나면 GPIO.cleanup()함수를 호출하는 것이 좋다. 이 함수를 호출하면 사용 중인 핀을 포함해서 모든 리소스가 시스템에 반환된다.


 한 가지 주의할 점은 RPi.GPIO는 하드웨어에 접근하여 작업을 수행하기 때문에 root권한이 필요하다. 따라서 파이썬쉘을 실행할 때 반드시 sudo 명령을 사용해야 GPIO 메서드들을 정상적으로 사용할 수 있다.


sudo python3

sudo ipython3


또한 RPi.GPIO 패키지를 사용하는 스크립트파일(,py 파일)을 실행하는 경우에도 마찬가지로 sudo 명령을 사용해야 정상적으로 실행이 된다. 예를 들어 blink.py 파일에서 RPi.GPIO 패키지를 사용한다면


sudo python3 blink.py


와 같이 sudo 명령을 반드시 앞에 붙여야 한다.

원문링크

Posted by 살레시오
,