새소식

라즈베리파이

라즈베리파이 wiringPi + gpio 유틸리티 사용법

  • -

라즈베리파이에 최신 wiringPi를 설치하는 방법은 아래 글을 참고해주세요!!

https://hoho325.tistory.com/212

 

라즈베리파이4b에 최신 버전 wiringpi 설치하는 방법

라즈베리파이에서 gpio를 쉽게 사용하기 위해서 wiringpi를 사용하려고 합니다 아마 기본적으로 깔려있을 수 있습니다 만약 깔려있지 않거나 지웠다면 다음과 같은 방법으로 다운 가능합니다 sudo a

hoho325.tistory.com

 

wiringpi에는 gpioi라는 유틸리티가 들어있습니다.

그래서 gpio라는 명령어를 통해 여러가지 활용할 수 있습니다.

 

gpio readall

우선 gpio readall 명령어를 알아보겠습니다.

이는 보드에 대한 핀 정보를 볼 수 있는 그림을 보여줍니다

이는 라즈베리파이에서 usb 포트가 아래로 가있을때 핀과 비교하셔야 합니다. 오른쪽 처럼요

그리고 아래에 보면 Pi4B라고 쓰여있는걸 볼 수 있습니다

보면 되게 다양한 것들이 있습니다

 

라즈베리 핀을 이용할때 번호를 BCM 또는 wPi를 이용할 수 있습니다

wiringPi 라이브러리를 이용하면 wPi 번호보시면 됩니다 (물론 BCM도 사용가능)

그리고 Mode는 입력이나 출력이냐 정보

V는 값이 HIGH(1)냐 LOW(0)냐 입니다

예를들어 wPi가 1번 물리핀 번호(Physical) 12번 BCM 18번 입니다

 

 

GPIO 주요 함수들

이때 사용하는 핀 번호들은 wPi 번호를 사용해야 합니다!!!

 

gpio read [pin]

현재 포트의 값을 읽을 수 있습니다

gpio read 1을 통해 wpi 1번의 값을 읽어올 수 있습니다

gpio readall을 해서 보면 V 값이 1인것을 확인할 수 있습니다

 

gpio mode [pin] [in/out/clock]

현재 포트의 모드를 설정할 수 있습니다

gpio mode 1 out을 통해

wpi 1번 핀의 mode가 In에서 out으로 변경되었습니다!!

 

gpio write [pin] [1/0]

지정한 포트에 값을 쓸 수 있습니다

gpio write 1 1을 통해

wpi 1번 포트에 1값을 쓸 수 있습니다

gpio readall을 통해 1이 쓰여진걸 확인할 수 있습니다

gpio read 1을 통해서도 확인할 수 있겠죠???

 

WiringPi 주요 함수 (c 언어 사용)

지금까지는 CLI에서 사용하는 명령어들이었고 이번에는

C언어 소스안에서 사용가능한 함수들을 알아보겠습니다

 

wPi 핀번호 사용하기: <wiringPiSetup()>

이 함수를 통해 setup 하면 wPi 번호를 사용할 수 있습니다

주로 다음과 같이 사용합니다

#include <stdo.h>
#include <wiringPi.h>

int main()
{
	if(wiringPiSetup() == -1)
    {
    	printf("setup Error\n");
    	return -1;
    }
    return 0;
}

 

BCM 핀 번호 사용하기: wiringPiSetupGpio()

wiringPiSetup 대신 위의 함수를 사용하면 wPi 번호가 아닌

BCM 번호를 사용할 수 있습니다

 

I2C 통신 초기화 <wiringPii2CSetup(dev_id)>

이 함수는 I2C 통신을 사용하기 위한 초기화 함수입니다

 

pin 모드 설정하기 <pinMode(pin, INPUT/OUTPUT)>

위 함수를 통해서 핀의 모드를 설정할 수 있습니다

OUTPUT/INPUT 등을 줄 수 있습니다

pin에 값 쓰기 <digitalWrite(pin, value)>

이 함수를 통해 원하는 pin에 값을 쓸 수 있습니다.

pin 번호는 setup 함수에 따라서 BCM이 될 수도, wpi 번호가 될 수도 있습니다.

주로 핀 모드가 OUTPUT일때 사용합니다

 

pin 값 읽기 <digitalRead(pin)>

이 함수로 원하는 pin의 값을 읽어올 수 있습니다

LOW 값이 있는지 HIGH 값이 쓰여있는지 알 수 있습니다

핀 모드가 주로 INPUT일 때 사용합니다

 

지연 시간 주기 <delay(ms)>

이 함수를 통해 sleep을 줄 수 있습니다

초 단위가 아닌 ms 단위 임을 조심해야 합니다

1초를 지연하고 싶다면 delay(1000)을 쓰셔야 합니다

 

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

#define LED 1

int main(){
	if(wiringPiSetup() == -1){
    	return -1;
    }
    
    pinMode(LED, OUTPUT);
    
    while(1){
    	digitalWrite(LED, HIGH);
    	delay(500);
    	digitalWrite(LED, LOW);
        delay(500);
	}
    
    return 0;
}

위에 간단한 예제를 적어놨습니다

과연 어떻게 동작할까요??? 직접 해보시기 바랍니다~~

 

wiringPi 컴파일 및 실행방법

위에 작성한 코드를 실행하기 위해서는 컴파일 해야 합니다

gcc -o led led.c -lwiringPi
./led

gcc 명령어를 이용해 컴파일 합니다. 단, 이때 wiringPi 라이브러리를 넣어주어야 합니다

-l이 라이브러리를 의미합니다

그리고 실행파일을 실행하면 동작하게됩니다

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.