2015년 4월 2일 목요일

Raspberry Pi gpio 유틸리티

WiringPi는 gpio라는 이름의 유틸리티를 포함하고 있다. 이 프로그램은 GPIO 핀을 조작하기 위한 스크립트에도 사용될 수 있다. 심지어 쉘 스크립트로 gpio 명령을 사용해 전체 프로그램을 작성할 수도 있다. 물론 이 방법은 효율적이지 않아 크게 권장하는 방법은 아니다. 또한 C/C++에서 system() 함수를 사용해 gpio 프로그램을 호출할 수도 있다.

* gpio 명령은 setuid 프로그램으로 설치되도록 만들어져 있기 때문에 일반 사용자가 sudo 명령 없이 (또는 root 권한 없이) 실행할 수 있다.

gpio 프로그램을 사용하면 GPIO 핀을 제어하는것 뿐 아니고 다음의 기능들을 수행할 수 있다.

* /sys/class/gpio 인터페이스를 통한 핀들의 export/unexport
* /sys/class/gpio 인터페이스를 통해 edge-trigger 인터럽트를 활성화
* SPI, I2C 모듈을 로드하여 read/write
* SPI 버퍼 사이즈나 I2C 속도를 설정
* Gertboard DAC로 값 출력
* Gertboard ADC 값 입력
* Raspberry Pi 보드 하드웨어 리비젼 확인

기본 사용법

$ gpio -v

버젼을 출력한다

$ gpio -g ...

-g 플래그를 사용하면 핀 번호를 wiringPi의 핀 번호 대신 BCM_GPIO 핀 번호로 인식하게 함

표준 입/출력 명령

$ gpio mode <pin> in/out/pwm/up/down/tri

핀의 모드를 설정한다. 설정 가능한 모드는 입력(in), 출력(out), PWM(pwm)이고 추가로 내부 저항의 풀업(up), 풀다운(down), Tri-state(tri) 설정이 가능하다.

$ gpio write <pin> 0/1

핀의 출력 레벨을 HIGH(1) 또는 LOW(0)으로 설정한다.

$ gpio read <pin>

핀의 레벨을 읽어 화면에 출력해준다. LOW면 '0', HIGH면 '1'이 출력된다.

$ gpio readall

정상적으로 억세스 가능한 모든 핀들을 읽어 테이블 형태로 핀 번호(wiringPi 번호 및 BCM_GPIO)와 모드, 현 입력값을 화면에 출력해 준다.

모듈 로드 명령

$ gpio load spi [buffer size in KB]

SPI 커널 모듈을 로드하고 옵션으로 내부 버퍼 사이즈를 KB 단위로 설정한다. 디폴트 사이즈는 4KB이고 거의 대부분의 경우 충분한 크기이다.
/dev/spi* 엔트리는 gpio 프로그램을 사용하는 사람이 소유한것으로 설정되기 때문에 다음 프로그램을 실행할 때 root 권한이 필요하지 않다.

$ gpio load i2c [baud rate in Kb/sec]

I2C 커널 모듈을 로드하고 옵션으로 Kb/sec 단위로 통신속도를 지정한다. 디폴트는 100Kb/sec이다.
/dev/i2c* 엔트리는 gpio 프로그램을 사용하는 사람이 소유한것으로 설정되기 때문에 다음 프로그램을 실행할 때 root 권한이 필요하지 않다.

/sys/class/gpio 모드 명령

$ gpio export <pin> in/out

주어진 핀 번호(BCM_GPIO 핀 번호)를 input 또는 output으로 export한다.

$ gpio unexport <pin>

주어진 핀 번호의 export를 제거한다.

$ gpio unexportall

/sys/class/gpio의 모든 export를 제거한다.

$ gpio exports

/sys/class/gpio 인터페이스를 통해 export 된 모든 gpio 핀의 목록과 모드를 화면에 출력한다.

$ gpio edge <pin> rising/falling/both/none

주어진 핀의 인터럽트 트리거를 활성화 시킨다. 

주의) sys 모드 명령의 핀 번호는 항상 BCM_GPIO 핀 번호이다.

예제

$ gpio mode 0 out
$ gpio write 0 1

위의 명령은 wiringPi 핀번호 0번 핀을 출력으로 설정하고 출력값을 HIGH로 설정한다.

$ gpio -g mode 0 in
$ gpio -g read 0

위의 명령은 BCM_GPIO 핀번호 0번을 입력으로 설정하고 핀의 입력값을 읽는다.

Internal pull up/down

GPIO 핀은 내부 풀업/풀다운 저항을 가지고 있어 핀이 입력모드인 경우 소프트웨어로 어떤 저항을 사용할 지 제어할 수 있다.

$ gpio mode 0 up
$ gpio mode 0 down
$ gpio mode 0 tri

위의 명령은 각각 순서대로 WiringPi 0번 핀의 저항을 풀업, 풀다운, 둘 다 사용하지 않는걸로 설정한다.







댓글 없음:

댓글 쓰기