Home » 산딸기 가지고 놀기 » 라즈베리파이 GPIO 강좌 : 05. Input 테스트 (스위치 입력, C언어)

라즈베리파이 GPIO 강좌

라즈베리파이 GPIO 강좌 : 05. Input 테스트 (스위치 입력, C언어)

 

1. 학습내용

: 라즈베리파이 GPIO 를 다루어보기로 하겠다. 이번 강좌에서는 GPIO의 Input 기능을 테스트하기로 하자. 이를 위해서는 이전 “04. Output 테스트 (LED 출력, C언어)” 강좌에서 처럼 간단히 LED를 연결하고, 추가로 스위치 회로를 추가로 해주도록 하자. 이 스위치의 On/Off 신호를 입력신호로 받고 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” 라이브러리를 이용할 예정이다. 설치 방법은 이전 강좌인 “라즈베리파이 GPIO 강좌 : 04. Output 테스트 (LED 출력, C언어)”를 참조하도록 하자.

 

3. 스위치 회로

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

아래의 회로도는 GPIO 18번에 연결된 스위치의 On/Off 의 Input 값으로 받을 수 있도록 스위치 한 개와 저항 10K옴 하나로 구성된 간단한 풀업 스위치 회로이다. 스위치가 On 이면 Low 값을 받고 이를 프로그래밍 적으로 LED가 On 이 되게하고, 스위치가 Off 이면 High 값을 받게 되어 LED를 Off 시키려는 목적으로 구성하였다.

 

 5-1 5-2 5-3

4. 프로그램 작성

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

mkdir gpio-test
cd gpio-test

 

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

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

nano

 

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

#define SW 1 // BCM_GPIO 18

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

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

  pinMode(SW, INPUT);

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

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

    if(digitalRead(SW) == 0)
    {
      digitalWrite(LED1, 1); // On
      digitalWrite(LED2, 1); // On
      delay(1000) ; // mS
    }
  }
  return 0 ;
}

 

 5-4

 

위 내용은 GPIO 18번으로부터 입력받은 값이 Low 이면 GPIO 23번, 24번핀에 연결된 LED를 모두 ON 시킨 후, 1초 대기한다. 그 후 다시 Off 시키는 내용이다. 그 후 다시 반복문 for 문으로 돌아와서 마찬가지로 GPIO 18번의 스위치 값을 받아 처리하는 내용이다. 위와 같이 내용을 전부 입력해주고, “gpio-test2.c” 라는 이름으로 저장해주자.

3) 프로그램 컴파일

gcc -o gpio-test2 gpio-test2.c -lwiringPi

: 위의 컴파일 명령을 실행해 주면 gpio-test2 이라는 실행 파일이 생성된다.
5. 프로그램 실행

: GPIO 관련 프로그램 실행은 항상 루트 권한으로 실행해줘야 한다. 작성한 프로그램을 실행해 보자. 스위치의 On / Off 신호에 따라 LED가 켜지고 꺼지는 모습을 확인할 수 있을 것이다.

sudo ./gpio-test2

5-5

 

참고자료

[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