Home 라즈베리파이)GPIO Ctl) WiringPi
Post
Cancel

라즈베리파이)GPIO Ctl) WiringPi

라즈베리) Cpp 테스트, 컴파일가 됐으니 GPIO 제어하자. 라즈베리파이의 GPIO는 WiringPi로 제어한다. GPIO는 GPIO) 다용도 입출력 핀 참고

환경

  • 라즈베리파이 3B+
  • 16GB microSD
  • Raspbian 12 (bookworm)

주의

라즈베리파이의 GPIO는 0.0 - 3.3V 까지의 전압 범위를 지닌다. 만약 다른 모듈(5V를 Input하는) 을 아무 생각 없이 물리면 파이보드가 날아갈 수도 있으니 반드시 체크하자.

설치

git down

1
sudo apt-get install git-core

wiringPi clone

주소: https://github.com/WiringPi/WiringPi

1
2
3
4
5
git clone https://github.com/WiringPi/WiringPi.git

cd WiringPi

git pull origin master
1
2
3
4
5
6
7
8
9
10
smartfarm@raspberrypi:~ $ git clone https://github.com/WiringPi/WiringPi.git
Cloning into 'WiringPi'...
remote: Enumerating objects: 2083, done.
remote: Counting objects: 100% (958/958), done.
remote: Compressing objects: 100% (270/270), done.
remote: Total 2083 (delta 759), reused 798 (delta 666), pack-reused 1125
Receiving objects: 100% (2083/2083), 923.85 KiB | 4.64 MiB/s, done.
Resolving deltas: 100% (1392/1392), done.
smartfarm@raspberrypi:~ $ ls
Bookshelf  Codes  Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos  WiringPi

WiringPi build

1
2
3
cd WiringPi

./build

사용

핀맵

출처: 공식홈페이지

image.png

image.png

자주 쓰는 명령어들

help

도움말

1
gpio -h

image.png

readall

현재 핀 상황 읽기

1
gpio readall

image.png

가운데 Physical 줄은 물리적 표현. 현재 모드는 전부 IN으로 설정 되어 있다.

추가 중

사용 하다 좀 많이쓰는건 이후 추가하기

제어

라이브러리 호출

1
# include <wiringPi.h>

헤더 파일, 소스 파일 위치: 설치했던 경로/WiringPi/wiringPi

image.png

라이브러리 setup

1
wiringPiSetup();
1
2
3
4
5
6
7
8
9
10
/*
 * wiringPiSetup:
 *  Must be called once at the start of your program execution.
 *
 * Default setup: Initialises the system into wiringPi Pin mode and uses the
 *  memory mapped hardware directly.
 *
 * Changed now to revert to "gpio" mode if we're running on a Compute Module.
 *********************************************************************************
 */

오류 발생 시 값은 -1

GPIO 테스트

LED를 1초 간격으로 On / Off 로 테스트 한다.

  • GND
  • GPIO 2
  • LED
  • 1K Res

image.png

소프트웨어

우선 GPIO 번호를 찾자

1
gpio readall
1
2
3
4
5
6
+-----+-----+---------+------+---+---Pi 3B--+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5v      |     |     |
 |   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     |

나는 지금 BCM 2번::wPi 8번에 신호를 연결했다.

따라서 LED번호를 8로 지정.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# include <wiringPi.h>
# include <iostream>

# define LED 8

int main()
{
  if(wiringPiSetup() == -1)
  {
    std::cout << "Status: -1" << std::endl;
    return -1;
  }

  pinMode(LED, OUTPUT);
  for(int i = 0; i < 100; i++)
  {
    digitalWrite(LED, 1);
    delay(1000);
    std::cout << "LED ON" << std::endl;
    digitalWrite(LED, 0);
    delay(1000);
    std::cout << "LED OFF" << std::endl;
  }
  return 0;
}

코드는 어려울 부분이 없다.

이제 Make

1
g++ -o LEDTEST GPIOPi.cpp -lwiringPi

플래그로 라이브러리의 위치도 포함하자. 아직은 외부 라이브러리가 한 개이니 그냥 g++로 진행.

아무튼 생성 후 확인

1
./LEDTEST

잘 깜빡이면 라이브러리 설치, 확인 완료.

기타

pinMode(LED, OUTPUT) 이후 다시 gpio readall을 하면 처음엔 IN 모드였던 wPi8번이 OUT으로 바뀐 걸 확인할 수 있다.

  • 이전

image.png

  • 이후

image.png

This post is licensed under CC BY 4.0 by the author.