본문 바로가기

Raspberry Pi/GPIO with C

GPIO with C

라즈베리파이에서 C 언어를 사용한 LED 점멸제어 예제


개요

라즈베리파이 B+ 와 GPIO 모듈인 wiringPi 를 이용하여 LED 2개를 점멸하는 기능을 C언어로 작성하고 컴파일 및 실행까지 테스트하려고 한다.



테스트 환경

라즈베리파이 B+

라즈베리파이 GPIO 제어 모듈 : wiringPi



Raspberry Pi GPIO Pinout

라즈베리파이 GPIO 핀 배치도를 보면 GPIOxx 라는 핀들을 볼 수 있는데 이 핀들은 프로그램 코드에서 입출력 모드를 설정할 수 있으며 해당 핀을 통해 디지털 입출력이 가능하다 여기서는 GPIO23(16번핀), GPIO24(18번핀)라고 표시된 핀을 출력모드로 설정하고 각각 LED를 연결할 것이다. LED의 -단자는 14번핀에 연결하면 되는데, 풀다운 저항을 연결하여 저항의 단자가 14번핀에 연결되도록 하려고 한다.


작업절차


라즈베리파이와 LAN 케이블 연결

라즈베리파이와 모니터 케이블 연결

라즈베리파이와 전원 연결

라즈베리파이에 로그인


로그인 후 라즈베리가 준비되면 부팅의 마지막에서 현재 설정된 IP 주소를 확인할 수 있다

이렇게 되면 이제부터는 다른 컴퓨터에서도 텔넷 클라이언트를 이용하여 원격 접속이 가능하게 된다

여기서는 원격접속을 통해 C언어를 사용하여 LED 점멸 기능을 구현하고자 한다


라즈베리파이 업데이트 

sudo apt-get update


라즈베리파이 업그레이드

sudo apt-get upgrade


소스 버전관리 툴(git) 설치

http://unikys.tistory.com/321

sudo apt-get install git-core


wiringPi 다운로드

sudo mkdir code

cd code

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


wiringPi 컴파일(build)

cd wiringPi

sudo ./build


wiringPi 설치 확인

gpio -v

gpio version: 2.20

gpio readall




라즈베리파이에 LED 연결

위의 화면에서 보여주는 것은 라즈베리파이 B Plus 의 GPIO 핀배치에 대한 내용인데  물리적인 핀 번호(Physical) 를 중심으로 용도와 이름(Name), wiringPi의 에서 각 핀에 부여한 번호(wPi), 파이썬에서 사용하는 BCM 핀번호 등을 보여준다.

Name 컬럼에 GPIO 라고 표시된 핀은 범용 입출력으로 사용할 수 있으므로 프로그램적으로 입출력 모드를 지정하여 해당 핀에 입출력할 수 있다.

여기서는 물리적인 핀번호 16, 18에 LED를 각각 연결하고 LED의 -단자는 물리적 핀번호 14(0v)에 연결하려고 한다.

LED의 -단자를 핀번호 14에 바로 연결하는 것이 아니라 LED의 -단자에 Pull Down 저항을 연결하여 그 저항을 14번 핀에 연결하려고 한다



위의 핀배치 정보에 따라서 LED를 연결한  결선도



C 언어로 코드 작성

sudo mkdir gpio-test

cd gpio-test


파일생성

sudo touch gpio-test.c

sudo chmod 777 ./gpio-test.c


파일편집

sudo nano ./gpio-test.c

#include <stdio.h>

#include <wiringPi.h>


#define LED1 4 // wPi 4번핀은 물리적 16번핀을 말함

#define LED2 5 // wPi 5번핀은 물리적 18번핀을 말함


int main(void)

{

  if(wiringPiSetup()==-1)

    return 1;


  pinMode(LED1, OUTPUT);

  pinMode(LED2, OUTPUT);


  while(1)

  {

    digitalWrite(LED1, 1); // on

    digitalWrite(LED2, 1); // on


    delay(500); // ms


    digitalWrite(LED1, 0); // off

    digitalWrite(LED2, 0); // off


    delay(500);

  }


  return 0;


}


위와같이 nano 에디터 창에서 모든 코드를 입력해도 되고 원격접속으로 작업하는 경우라면 윈도우에서 편리한 에디터를 사용하여 코드를 작성하고 작성된 코드를 전체선택하여 CTRL + C를 사용하여 클립보드에 복사한 다음에 nano 에디터에서 마우스 우측을 누르면 그대로 붙여넣기가 된다


파일저장

CTRL + O

에디터 하단에 파일이름을 입력하는 란에 파일 이름을 입력하고 엔터를 누른다


nano 에디터에서 라즈베리 콘솔로 나오기

CTRL + X

위의 명령을 실행하면 에디터에서 변경된 내용이 있는 경우에는 파일을 저장할 것인지를 묻는 란이 나타나고 아니면 바로 콘솔로 복귀한다


소스코드 컴파일

sudo gcc -o gpio-test gpio-test.c -lwiringPi


실행

sudo ./gpio-test


LED점멸 작동상태 확인

위와 같이 프로그램을 실행하면 라즈베리파이와 LED 가 제대로 연결된 경우에는 LED 2개가 깜박거리는 것을 확인할 수 있다


실행종료

CTRL + C