티스토리 뷰

RPi

[Raspberry Pi] 간단한 GPIO test

생각많은 소심남 2013. 2. 27. 00:41

 간만에 라즈베리 파이의 껍데기를 벗겼습니다. 세삼스럽게 왜 벗겼을지 궁금하실 분도 있으시겠지만, 정답은 위에 조그맣게 붙어있는 점퍼와이어에 있습니다.



 물론 아시는 분들도 계셨겠지만 라즈베리 파이에는 기본적으로 25개의 GPIO를 가지고 있습니다. GPIO란 General Purposed IO 의 약자로 말그대로 일반적인 입출력을 제어할 수 있는 핀의 규약입니다. 그래서 이 핀을 통해서 전기신호를 주고 받을 수 있는 것이지요. 다르게 표현하자면 원하는대로 핀에 0과 1을 줄 수 있다는 겁니다. 그걸 이 라즈베리 파이는 신호로 받아들입니다. 



 바로 이게 라즈베리 파이의 GPIO인데 좀 의아하실 수도 있습니다. 앞에서는 분명 25개의 GPIO가 있다고 하는데 핀은 그것보다 더 많으니 말입니다. 사실 이중에는 회로 구성에 필요한 ground, Vout이 포함되어 있고, 미래에 추가적으로 쓸 수 있는 예약된 핀들이 몇가지 있습니다. 실제로 라즈베리 파이상에서의 핀 배열은 다음과 같습니다.


<출처:http://www.raspberrypi-spy.co.uk/2012/06/simple-guide-to-the-rpi-gpio-header-and-pins/>


이중에 초록색으로 표현되어 있는 것들이 정상적인 GPIO입니다. 그래서 이걸 제어하는 걸 잠깐 소개해드리고자 합니다.

먼저 5V와 3V가 정상적으로 나오는지를 확인해봅니다. 회로 구성은 다음과 같이 이뤄질 겁니다. 일상적으로 LED를 켜는데 필요한 회로 입니다.



정상적으로 라즈베리파이에 전력이 공급된다면 아래와 같이 불이 들어올 겁니다. 이 말은 1번과 2번핀에는 항상 high가 들어와 있다는 뜻이지요.



그런데 사실 이렇게 켜게만 놓는 것은 별로 의미가 없습니다. 실제로 우리가 이걸 제어할 수 있어야 진정한 GPIO 활용법이라고 할 수 있습니다. 물론 이를 위해서는 프로그램이 필요합니다. 우선 알아둬야 할게 이런 GPIO를 제어하는데 쓰는 기술이 바로 i2c 통신이라는 겁니다. i2c 통신이란 읽기는 i^2 c라고 부르는게 맞습니다. 정식 명칭은 inter-integrated Communication 입니다. 필립스에서 개발된 저속 직렬통신 규약이고 무엇보다도 장점은 단순이 SDA와 SCL 이 두가지 선만 있으면 통신이 된다는 겁니다. 그래서 보통 휴대폰이나 임베디드 기기 상에서 LED를 제어할 때 보통 이 i2c가 쓰입니다. 

 이 라즈베리 파이에서도 i2c가 적용되며, 이를 활용하기 위해서는 i2c관련 라이브러리를 설치해줘야 합니다. root 에서 다음과 같이 libi2c를 설치해줍니다.


pi@raspberrypi ~$ sudo apt-get install libi2c-dev


라이브러리가 설치되었으니 이 걸 활용한 프로그램을 설치하면 됩니다. 보통 많이 쓰이는 프로그램이 wiringPi라는 건데 오픈소스이고 C, C++, Python, Ruby 를 지원하기에 다양한 방면에서 쓸 수 있습니다. 이걸 설치해봅시다.


pi@raspberrypi ~$ cd /tmp

pi@raspberrypi /tmp$ wget http://project-downloads.drogon.net/files/wiringPi.tgz 

pi@raspberrypi /tmp$ tar xfz wiringPi.tgz

pi@raspberrypi /tmp$ cd wiringPi/wiringPi

pi@raspberrypi /wiringPi/wiringPi$ make

pi@raspberrypi /wiringPi/wiringPi$ sudo make install

pi@raspberrypi /wiringPi/wiringPi$ cd ../gpio

pi@raspberrypi /wiringPi/gpio$ make

pi@raspberrypi /wiringPi/gpio$ sudo make install 


이걸로써 gpio를 활용할 수 있게 됩니다. gpio 명령어를 아무데서나 쓸 수 있게 됩니다. 

일단 지금은 LED를 가지고 있으므로 GPIO를 출력포트로 설정해봅니다. 여기서 저는 GPIO 0번에 LED를 연결했습니다.

그 후에 write를 통해서 값을 입력할 수 있고, 현재 GPIO의 설정값도 읽어올 수 있습니다. 밑에 있는 명령어들이 간단한 튜토리얼입니다. 다른 GPIO에 연결하고자 하면 위의 핀배치에 맞춰서 숫자만 바꿔주면 되겠습니다.



이런식으로 라즈베리 파이로도 LED를 간단하게 제어를 해볼 수 있습니다. 물론 여러개를 연결해서 제어를 하는 것도 가능하고, 이를 위해서는 조금 프로그래밍을 해야 되겟지요. 이부분은 다음 포스트에서 다뤄보고자 합니다.

댓글