| 16. GPIO-출력 실험 1 |
|
이번 강좌에서는 C 언어를 이용한 GPIO 실험에서 출력 실험에 대해서 알아 보도록 한다 |
|
C 언어 작성은 직접 라즈베리 파이에서 하도록 하며, 이전 강좌에서 사용한 적이 있던 nano를 사용하도록 한다 |
|
우선, 작업 폴더를 만든 후에 프로그램을 작성하도록 한다. |
|
$ mkdir gpio |
| $ cd gpio |
| $ nano led.c |
|
이런 후에 nano를 이용하여 아래와 같은 코드를 입력 후에 저장하고, 종료한다. |
|
#include
#include
#include
int main (int argc, char*argv[])
{
int pinNumber;
if(argv < 2){
printf(“Usage: ./led port”);
return 1;
}
int pinNumber = atoi(argv[1]);
if(wiringPiSetup() == -1){ // wiringPi Setup
printf(“Please Setup wiringPi library”);
return 1;
}
pinMode(pinNumber, OUTPUT); // 입력된 포트를 출력으로 설정
while(1){
digitalWrite(pinNumber, 0); // 포트 출력 Low
delay(1000);
digitalWrite(pinNumber, 1); // 포트 출력 High
delay(1000);
}
return 0;
} |
|
|
위 코드는 입력 받은 포트에 대해서 출력을 Low, High를 반복하여 출력하여 연결된 Led가 점멸하는 프로그램이다 |
|
wiringPiSetup()는 wiringPi 시스템을 초기화하는 함수이며, wiringPi 핀 할당을 사용하게 된다. 아래 표의 빨간색 박스를 참고하기 바란다.
|
 |
|
참고로 Broadcom(BCM) GPIO 핀 할당을 위해서는 wiringPiSetupGpio()를 사용한다 |
|
pinMode(pin, mode)는 핀의 모드를 설정하는 함수로, mode는 INPUT, OUTPUT, PWM_OUTPUT 중의 하나로 설정할 수 있다. wiringPi 1번 핀만이 PWM 출력을 지원한다. |
|
digitalWrite(pin, value)는 해당 핀에 value 값으로 HIGH, LOW(1, 0)으로 출력 값을 정해 줄 수 있다 |
|
delay(value)는 지간 지연 함수로, value 값은 milisecond 단위로 값을 줄 수 있다. |
|
wiringPi에 대한 API 함수는 다음 기회에 별도로 설명을 하도록 하자. |
|
WiringPi 라이브러리를 사용하기 위해서는 반드시 헤더 파일을 추가하도록 하자. |
|
#include |
|
위와 같이 소스 코드 입력이 완료된 후에 프로그램 빌드를 한다. |
|
$ gcc led.c ?o led ?lwiringPi |
|
이 빌드 명령을 실행하면 led라는 실행 파일이 생성된다. 여기서, -o는 출력 파일명을 지정하고, -l은 사용할 라이브러리를 지정하는 것이다. |
|
만약, 위 빌드 명령이 에러가 나면 다음과 같이 실행해 본다. |
|
$ gcc ?o led led.c ?I/usr/local/include ?L/usr/local/lib ?lwiringPi
|
 |
|
실행 파일이 생성되고, 이를 실행하기 위해서는 루트 권한으로 해줘야 하며, Ctrl+C로 종료한다. |
|
$ sudo ./led 0 |
|
위와 같이 실행을 하면 GPIO 0에 연결된 LED가 delay(1000) 즉, 1초 간격으로 ON, OFF를 반복하는 것을 볼 수 있을 것이다. |
|
이번 강좌에서는 C언어를 이용한 GPIO 출력 실험에 대해서 간단하게 알아 보았다. 다음 강좌에서는 입력 실험에 대해서 알아 보도록 한다. |
|
[테스트 동영상] |
|