Embedded/RaspberryPI

Raspberry Pi 4(Bookworm)에서 WiringPi 설치해서 사용하기

변화의 물결1 2024. 1. 22. 00:05

 

 

 

 

  안녕하세요.

 

 Raspberry Pi에서 GPIO를 쉽게 사용하기 위해서 WiringPi 라이브러리를 이용했습니다. 그런데 이제는 메인 개발자분이 지원(support) 않고, 홈페이지도 중단시켜 놓았습니다.

 

  최신 bookworm 64bit OS에서 사용할 수는 없는 건가 찾아보다가 아직은 github에 남겨놓은 자료가 있어 참조해서 설치해 보았습니다. 소스 전체를 받아 다시 컴파일해서 사용하는 방법도 있지만, 패키지화 버전을 다운로드 바다 쉽게 설치할 수도 있어 이 방법을 이용해서 작업해 보았습니다.

 


 

1. WiringPi 64bit 버전 다운로드 및 설치

 

 - github로 들어가면 비공식 mirror라고 되어 있습니다.

 

 

 - WiringPi 저장소로 들어가면 운영자가 보관하고 있다고 하면 읽기 전용으로 변경시켜 놓았습니다.

 

 

- WiringPi 저장소의 측면에 있는 Release 링크로 들어가면 wiringpi-2.61-1-arm64.deb 가 있음을 알 수 있습니다. arm 64bit 버전은 이것이 마지막 버전이지 않을까 하면 다운로드합니다.

https://github.com/WiringPi/WiringPi/releases/tag/2.61-1

 

 

pi@raspberrypi:~ $  mkdir opt (opt 디렉터리가 있다면 생략)
pi@raspberrypi:~ $ cd opt
pi@raspberrypi:~/opt $  sudo wget https://github.com/WiringPi/WiringPi/releases/download/2.61-1/wiringpi-2.61-1-arm64.deb
pi@raspberrypi:~/opt $  sudo dpkg -i wiringpi-2.61-1-arm64.deb

 

 

 

 

2. 배선하기

 

 - 이전 내용에서 pigpio는 핀 맵을 GPIO 번호로 매핑되어 있다고 했지만, WiringPi도 동일한 배선을 하고 있지만 핀번호가 다르다는 것을 알고 있어야 합니다.

 

 

 - WiringPi 기준으로 핀 맵을 보려면 아래와 같이 입력하면  wPi라고 하는 열에 번호가 매겨져 있습니다. 즉 GPIO 26을 25로 매핑시켜 놓았다는 것입니다. 그래서 여기서 GPIO 26에 LED +를 연결하고 GND에 LED -를 연결합니다.

 

 

 

- 여기서 살짝 의문이 들 수도 있습니다. gpio readall에 나와 있는 GPIO 번호랑 다른데 WiringPi 기준에서 GPIO 이름이며, Raspberry Pi 공식 사이트와 회로도에서는 GPIO 26으로 나와있습니다. 혼선이 없으셨으면 합니다.

 

 

 

3. WiringPi Library로 GPIO 제어해 보기

 

1) 현재 상태 체크

 

- 현재 OS 버전을 확인해 봅니다.  

     

pi@raspberrypi:~/opt $ lsb_release -a

 

 

-  WiringPi 버전도 확인해 봅니다.

pi@raspberrypi:~/opt $ gpio -v

 

 

2) 소스 작성

 

 - 먼저 테스트할 디렉터리를 만들고 vim을 이용해서 파일을 생성합니다.

 

pi@raspberrypi:~/opt $ mkdir WiringPi_led
pi@raspberrypi:~/opt $ cd WiringPi_led/
pi@raspberrypi:~/opt/WiringPi_led $ vim led.c

 

 - 소스상에서 핀번호에서 주의할 점은 wiringPiSetup()과 wiringPiSetupGpio() 함수 중 어느 것을 사용하느냐에 따라 핀맵이 달라진다는 것이다. 여기서는 wPi의 핀 맵을 사용하기 위해서 wiringPiSetup() 함수를 사용하였습니다.

 

 - 핀모드를 출력으로 해주고 루프 안에서 LED의 출력을 0, 1로 해서 켜고 끄고 제어를 해주었습니다.

 

   

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

#define LED 25  // wiringPiSetup() funtion is set wiringpi pinmap.
//#define LED 26  // wiringPiSetupGpio() is set set bcm pinmap.


int main(){

  if(wiringPiSetup() < 0){  // wiringPi pinmap
    printf("Unable to setup wiring Pi");
    return 1;
  }

  pinMode(LED, OUTPUT); // output mode

  while(1)
  {
    digitalWrite(LED, 1); //LED ON
    delay(1000);
    digitalWrite(LED, 0); //LED OFF
    delay(1000);
  }

  return 0;
}

 

3) 컴파일과 실행

 

 - led.c 소스 파일의 실행 파일명은 led로 하고 wiringPi 라이브러리 사용한다고 gcc에 옵션을 주어 컴파일을 합니다. 그러면 led 파일이 생성되고 이것을 실행하면 led가 깜박이는 것을 확인할 수 있습니다.

 

 

4. 동작확인

 

 - 대략 1초 간격으로 켜지고 꺼지는 것을 확인할 수 있습니다.

 

  

 

감사합니다.

 

 

<참고 사이트>

1. Raspberry Pi hardware

https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#raspberry-pi-4-model-b

2. 라즈베리파이 GPIO 제어(WiringPi 사용)

https://blog.naver.com/PostView.naver?blogId=emperonics&logNo=221815985508

3. 108. 라즈베리파이3 GPIO, 핀 번호 : wiringPiSetup() vs wiringPiSetupGpio()

https://blog.naver.com/pcmola/220797340767   

 

 

반응형