Raspberry Pi_Kor_25.6.3 RPi.GPIO library


Published Book on Amazon


All of IOT Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 1
All of IOT Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 2


출판된 한글판 도서


최신 라즈베리파이(Raspberry Pi)로 시작하는 사물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (상)
최신 라즈베리파이(Raspberry Pi)로 시작하는 사물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (하)


Original Book Contents


25.6.3  <RPi.GPIO> library

 

25.6.3.1    <RPi.GPIO> library 개요

 

library Python 개발언어에서 Raspberry PiGPIO를 조정할 수 있는 class 모듈을 제공해 준다.

 

library는 실시간이거나 시간 동기화가 중요한 application에서는 부적합하다. 왜냐하면 python이 언제 garbage collect을 할지 예측할 수 없고, 실시간 처리에 적합하지 않는 Linux kernel에서 실행되기 때문이다. Linuxmultitasking O/S로서 CPU에 대해서 GPIO 처리 프로그램보다 다른 프로세서가 더 높은 우선순위를 가질 수도 있고, 그럴 경우는 GPIO 처리 프로그램이 혼란에 빠질 수도 있기 때문이다.

 

현재 버전은 Raspberry Pi에서 SPI, I2C, hardware PWM 또는 serial functionality를 지원하지 않는다. 가까운 장래에 지원할 계획이다.

 

추가적인 정보가 필요하면 아래의 자료를 참조하기 바란다.

    https://pypi.python.org/pypi/RPi.GPIO

 


 

25.6.3.2    <RPi.GPIO> library 설치

 

Raspberry Pi Raspbian에서는 <RPi.GPIO> library가 기본적으로 설치되어 있다. 따라서 특별한 이유가 없으면 따로 설치할 필요가 없다. 다음은 해당 library가 설치되어 있는지를 확인해 본 것이다.

 

pi@raspberrypi ~ $ dpkg -l *gpio

Desired=Unknown/Install/Remove/Purge/Hold

| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend

|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)

||/ Name             Version       Architecture  Description

+++-================-=============-=============-======================================

ii  python-rpi.gpio  0.5.11-1      armhf         Python GPIO module for Raspberry Pi

ii  python3-rpi.gpio 0.5.11-1      armhf         Python 3 GPIO module for Raspberry Pi

 

별도의 추가적인 설치가 필요하면 다음과 같은 절차로 프로그램 팩키지를 설치한다.  "python-rpi.gpio" Python 2 IDLE를 위한 library이고 "python3-rpi.gpio" Python 3 IDLE를 위한 library이다.

 

sudo apt-get install  python-rpi.gpio    python3-rpi.gpio

 

 


 

25.6.3.3    <RPi.GPIO> library 사용법 

 

   GPIO 처리 권한

 

대부분의 Raspberry Pi Linux 배포판들은 슈퍼유저만 GPIO 포트를 사용할 수 있도록 제한하고 있다. 따라서 Python으로 개발한 프로그램을 실행하기 위해서는 "sudo" 명령을 함께 사용해야 한다.

 

   pin numbering 체계

 

<RPi.GPIO> library에서 GPIO pin에 번호를 부여하는 방법은 두 가지가 있다.

    BOARD의 번호체계를 이용하는 방법

이것은 Raspberry Pi board에 있는 P1 header에서의 pin 번호를 의미한다. 통상 physical 번호라고 하는 것으로 좌에서 우로, 위에서 아래로 순서적으로 번호가 부여되어 있다. 이 방법을 사용하면 Raspberry Pi board revision에 상관없이 항상 hardware가 잘 작동한다는 것이다따라서 connector를 다시 작성하거나 프로그램 code를 수정할 필요가 없다.

 

    BCM number 체계를 이용하는 방법

이 방법은 Broadcom SOC에서의 channel number를 이용하는 것으로 lower level의 작업이 필요하다. 이 방법을 사용하려면 Rasberry Pi board에 있는 pin channel number 간의 연관도가 필요할 것이며 board revision되면 프로그램을 수정해야 한다.

 

어떤 번호체계를 이용할 것인지를 다음과 같은 방식으로 사전에 지정해야 한다.

 

GPIO.setmode( <GPIO-mode>)

 

GPIO mode는 다음과 같은 값을 지정한다.

    GPIO.BOARD                      -- BOARD 번호 체계

    GPIO.BCM              -- BCM 번호 체계


 

다른 Python 모듈에서 현재 설정되어 pin 번호 체계를 확인하려면 다음과 같은 함수를 사용한다.

 

mode = GPIO.getmode()

 

실행한 결과 값은 "GPIO.BOARD", "GPIO.BCM" 또는 "GPIO.UNKNOWN"이 될 것이다.

 

 

   import

 

GPIO 라이브러리를 사용하려면 사전에 import를 해야 한다. 프로그램 처음에서 처리한다.

 

import RPi.GPIO as GPIO

 

 

   GPIO setup

 

GPIO 포트들은 사용하기 전에 먼저 입력 또는 출력으로 초기화를 해주어야 한다.

 

GPIO.setup( <port>, <pin-mode> )

 

pin-mode는 해당 port를 입력 또는 출력으로 사용할 것인지를 지정하는 것이다.

    GPIO.IN       -- 입력

    GPIO.OUT    -- 출력

 

Example) GPIO.setup(11, GPIO.OUT)

 


 

   GPIO output

 

출력 port로 지정된 port에 대해서는 지정된 값을 출력할 수 있다.

 

GPIO.output(<port>, < output > )

 

output는 다음과 같은 값을 사용할 수 있다.

    GPIO.HIGH, True, 1             -- 전류 On

    GPIO.LOW,   False, 0             -- 전류 Off

 

Example) GPIO.output(11, True)

 

 

   GPIO input

 

입력 port로 지정된 port에 대해서는 port에서 들어오는 값을 읽을 수 있다.

 

variable = GPIO.input( <port> )

 

intput는 다음과 같은 의미를 가진다

    True           -- 전류 On

    False           -- 전류 Off

 

Example) input_value = GPIO.input(12)

 

<RPi.GPIO> library를 이용한 interface 처리에 대한 사례는 [25.7.1.3 <RPi.GPIO> library를 이용한 사례]을 참고하기 바란다.

 

 

 


 

Leave a Reply