본문 바로가기

FALL in/G.MA' s IoT & 라즈베리파이

[라즈베리파이 시작하기] 07.간단한 GPIO다루기 - led제어


GPIO란? 

GPIO는 General-purpose input/output의 약자로, 사전에 약속되지 않은 회로의 행동을 제어하기위한 핀입니다.

사용자가 직접 회로를 구성하고 프로그래밍하여 라즈베리파이의 GPIO를 다룰수있습니다. 



GPIO로 led 제어하기  

1.gpio를 다루기전에 먼저 필요한 툴과 라이브러리를 다운받습니다.

쉘에서 아래 4줄 명령어를 차례대로 실행해주세요. 


sudo apt-get install git-core     

->쉘에서 위의 명령어를 실행합니다.(소스관리툴)


git clone git://git.drogon.net/wiringPi

->소스관리툴이 설치가 다 되면 wiringPi프로젝트를 다운받습니다. (gpio를 다루는 라이브러리) 


cd wiringPi

->wiringPi 디렉터리에 들어갑니다.


./build

->wiringPi를설치합니다.


(gpio -v gpio readall ->설치가 잘되었는지확인하는 명령어)

(gpio readall 자신의 라즈베리파이의 gpio확인)


2.라즈베리파이 gpio확인하기 

라즈베리파이2의 gpio는 위와 같습니다.

usb포트가 있는곳이 위사진의 아래쪽입니다.



gpio readall명령어를 실행하면 위와 같이 자신의 gpio를 확인할수있습니다. 

예를들어 BCM으로 gpio 21은 wiringPi로 29번인것을 알수있습니다.




3.회로 구성하기




저는 gpio 21을연결하여 led를 회로를 구성했습니다.

먼저 gpio 21이 표에서보면 오른쪽 맨아래이므로 점퍼케이블을 이용해 1K저항과 연결해줍니다.(저항을 연결하지않으면 전류가 너무 세게흘러 led가 고장날수도있습니다.)

저항반대쪽에는 led의 긴부분을 연결합니다. 

led 짧은쪽은 ground (접지)아무곳이나 연결합니다.(저는 제일 가까운 ground와 연결했습니다.)




4.c프로그래밍하기

이제 회로를 구성했으니 프로그래밍을 할차례입니다.


mkdir gpioTest

cd gpioTest

vi ledTest.c


먼저 저는 mkdir명령어로 gpioTest라는 디렉터리를 생성해주었고 그 디렉터리 안에서 ledTest라는 c파일을 코딩했습니다.





ledTest.c를 vi로 수정하는 화면입니다.


#include<stdio.h>

#include<wiringPi.h> //wiringPi.h헤더파일을 추가시킵니다.

int main()

{

int i;


if(wiringPiSetup()==-1) return -1; //wiringPi를 설정하는 함수입니다. 만약 설정되지 않았다면 -1이 리터되어 메인함수가 종료합니다.

pinMode(29,OUTPUT); //핀모드를 29번으로 설정합니다.(BCM으로 21번이 wiringPi에서 29번이므로)

for(i=0;i<5;i++) //for문을 이용하여 동작을 5번 실행합니다.

{

digitalWrite(29,1); //led를 켭니다.(1)

delay(500); //0.5초 지연

digitalWrite(29,0); //led를 끕니다.(0)

delay(500); //0.5초 지연

}

return 0;

}


위화면과 같이 코딩을하시고 :wq!를 누르고 나갑니다.



이제 컴파일을 하고 실행을 해보겠습니다.

gcc -o ledTest ledTest.c -lwiringPi

를 입력후 엔터를 누릅니다. ledTest.c를 wiringPi라이브러리를 포함하여 컴파일하여 ledTest실행파일을 만들겠다는 의미입니다.

실행파일을 만들었으면

sudo ./ledTest

를 입력하여 프로그래밍한 파일을 실행합니다. 


실행을하면 led가 0.5초 간격으로 켜지고 꺼지고를 5회 반복하는 모습을 볼수있습니다.






gpio확장 모듈이용하기 

gpio확장 모듈을 이용하면 점퍼케이블을 많이 사용하지않아도 되기때문에 gpio를 다루기에 편리합니다.





gpio확장모듈을 이용해 회로를 구성한 사진입니다.