Home » 산딸기 가지고 놀기 » 산딸기 GPIO » GPIO 기초강좌 » 라즈베리파이 GPIO 강좌 : 04. Output 테스트 (LED 출력, C언어)

라즈베리파이 GPIO 강좌

라즈베리파이 GPIO 강좌 : 04. Output 테스트 (LED 출력, C언어)

 

 

1. 학습내용

: 라즈베리파이 GPIO 를 다루어보기로 하겠다. 이번 강좌에서는 GPIO의 Output 기능을 테스트하기로 하자. 이를 위해서는 간단히 LED를 연결하고 LED를 키고 끄기는 프로그램을 해 볼 것이다. 사용언어는 C 언어이다.

 

2. 개발환경

: 개발환경은 하드웨어적으로는 라즈베리파이 모델B 버전2 512RAM 환경에, 소프트웨어적으로는 라즈베리파이의 공식 OS라고도 할 수 있는 데비안 리눅스계열의 Raspbian “wheezy”의 “2013-02-09-wheezy”버전을 사용하기로 하겠다. Raspbian “wheezy” 설치방법은 이전 강좌 “05. Raspberry Pi 퀵스타트 (OS 설치 및 테스트 구동)” 을 참고하기 바란다. 또한, 사용되는 언어로는 C언어를 이용할 생각이다. 이는 Raspbian “wheezy”의 “2013-02-09-wheezy” 버전을 설치하면 기본 설치되어 있다. (GCC)

그리고 이번에는 “Gordons Projects” 라는 블로그를 운영하는 곳에서 C언어를 지원하는 “wiringPi” 라이브러리를 이용할 예정이다. 설치 방법은 아래와 같다.
1) 일단, 라즈베리파이의 업데이트 및 업그레이드를 실시한다.

sudo apt-get updatesudo apt-get upgrade

 

2) 소스관리툴 git 를 다운로드한다.
(오픈소스 https://github.com/WiringPi/WiringPi 의 소스를 체크아웃하기 위해서)

sudo apt-get install git-core

 

3) “wiringPi” 프로젝트를 통째로 받아온다.

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

 

4) 빌드 및 설치를 진행한다.

cd wiringPi
./build

 

5) 설치가 잘 되었는지 아래의 명령어로 확인해 본다.

gpio -v gpio readall

 

wiringPi 라이브러리 설치 완료!

 

3. LED 회로

: 이번 GPIO Output 테스트에 사용될 GPIO는 GPIO 23번, 24번이다. 이는 각각 P1 헤더핀의 16번, 18번핀에 해당된다. 회로도는 아래와 같이 구성하도록 하자. 브레드보드에서 작업해도 되고, 별도의 기판에 납땜을 해도좋다.

우선, LED 2개, 저항 220~330옴을 아래와 같이 라즈베리파이의 P1 헤더핀의 16번, 18번핀에 연결해주도록 하자. 아래의 회로도는 GPIO의 Output 값을 High 로 설정해 주면 LED가 On, Low로 설정해 주면 Off가 되는 구성이다.

(※ 참고로 LED는 아래 그림과 깉이 다리가 짧은 쪽이 Cathode – , 긴 쪽이 Anode + 이다. )

 4-1

4-2

4-3

4-4
4. 프로그램 작성

: 이번LED 테스트는 C언어로 작성해 보고자 한다. 매우 간단하니 천천히 따라해 보자. 우선, 위와 같은 회로를 구성한 후 전원을 넣고, 라즈베리파이를 구동하자. 자~ 그럼 쉘에서 아래의 명령을 실행하며 프로그램을 작성해 보고 LED를 켜보도록 하자.
1) 자신의 작업 폴더 생성 및 이동 (이전 강좌에서 생성하였다면 생략)

mkdir gpio-test
cd gpio-test

 

2) 프로그램 작성 (편집기는 vi, nano, Leafpad 등 원하는 것을 사용한다. )

: 프로그램 주의사항으로는 “wiringPi” 의 라이브러리의 경우 자체적인 핀맵을 가지고 있다. 따라서 위에 첨부한 핀맵 중 wiringPi pin 이라고 적혀진 녹색핀에 맞게 프로그램을 짜야한다.

nano
#include <stdio.h>
#include <wiringPi.h>

#define LED1 4 // BCM_GPIO 23
#define LED2 5 // BCM_GPIO 24

int main (void)
{
  if (wiringPiSetup () == -1)
  return 1 ;

  pinMode (LED1, OUTPUT) ;
  pinMode (LED2, OUTPUT) ;

  for (;;)
  {
    digitalWrite (LED1, 1) ; // On
    digitalWrite (LED2, 1) ; // On

    delay (1000) ; // ms

    digitalWrite (LED1, 0) ; // Off
    digitalWrite (LED2, 0) ; // Off

    delay (1000) ;
  }
  return 0 ;
}

4-5

위 내용은 GPIO 23번, 24번핀을 출력핀으로 설정해주고 두 LED를 모두 ON 시킨 후, 1초 대기한다. 그 후 다시 Off 시키는 내용이다. 이 내용을 전부 입력해주고, “gpio-test1.c” 라는 이름으로 저장해주자.

3) 프로그램 컴파일

gcc -o gpio-test1 gpio-test1.c -lwiringPi

: 위의 컴파일 명령을 실행해 주면 gpio-test1 이라는 실행 파일이 생성된다.

 

5. 프로그램 실행

: GPIO 관련 프로그램 실행은 항상 루트 권한으로 실행해줘야 한다. 이를 실행해 주면 GPIO23, 24번에 연결된 LED가 모두 켜진 후, 1초 대기, 그리고 두 LED가 모두 꺼지는 작업을 반복 수행하게 된다. 프로그램 종료는 Ctrl + C 로 종료하면 된다.

sudo ./gpio-test1

4-6

이로써 간단히 라즈베리파이의 GPIO 기능을 이용한 LED 제어를 해보았다.

다음 강좌에서는 스위치를 이용하여 입력 신호를 받아 보도록 하자.
참고자료

[1] “라즈베리파이 공식 사이트”, http://www.raspberrypi.org/
[2] “라즈베리파이 위키미디어 설명”, http://en.wikipedia.org/wiki/Raspberry_Pi
[3] “Embedded Linux Wiki”, http://elinux.org/
[4] “공식 판매점 Element14”, http://downloads.element14.com/raspberryPi1.html?COM=raspi-group
[5] “공식 판매점 RS Componts”, http://uk.rs-online.com/web/generalDisplay.html?id=raspberrypi
[6] “공식 판매점 Allied Electronics”, http://www.alliedelec.com/lp/120626raso/
[7] “element14의 레즈베리파이 커뮤니티”, http://www.element14.com/community/groups/raspberry-pi
[8] Embedded Linux 커뮤니티의 “RPi Tutorials”, http://elinux.org/RPi_Tutorials
[9] “RASPBERRY PI INFORMATION AND VIDEOS”, http://raspi.tv/
[10] “Raspberry Pi Spy”, http://www.raspberrypi-spy.co.uk/
[11] “RaspiHub”, http://www.raspihub.com/
[12] “Adafruit Blog”, http://www.adafruit.com/blog/category/raspberry-pi/
[13] “Raspberry Pi Pod”, http://www.recantha.co.uk/blog/
[14] “bcm2835”, http://www.open.com.au/mikem/bcm2835/
[15] “Gordons Projects”, https://projects.drogon.net/raspberry-pi/wiringpi/

 

End.

written by Yoonseok Pyo
http://robotpilot.net/
http://cafe.naver.com/openrt
http://www.rasplay.org/


이 저작물은 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 Unported 라이선스 에
따라 이용할 수 있습니다.

산딸기마을 포스트 검색

공동제작 공동프로젝트 무상후원 기관

산딸기마을 기부하기

산딸기마을 방문자 현황

Flags Countries Visits Page views
South Korea 626063 1845660
United States 10882 26091
Japan 5011 13204
Germany 2755 5151
India 1897 2902
Canada 1729 4640
United Kingdom 1596 2642
Australia 1240 2901
Russia 1219 1677
China 1077 2239
Total Pageviews: 1936700