라즈베리파이에서 GPIO를 제어하기 위해 흔히 쓰는 라이브러리로 WiringPi가 있습니다. WiringPi는 C로 만들어진 라이브러리여서 Node.js에서 바로 사용할 수 없습니다.
Node.js의 패키지 관리자인 npm에서 WiringPi를 검색해보면 꽤 많은 패키지가 나옵니다. 하지만 제대로 동작하지 않는 것도 있었습니다. 제가 시도해본 것은 'wiring-pi' 'node-wiring-pi', 'rpio', 'onoff' 인데, 이 중에서 제대로 동작한 것은 'rpio'와 'onoff' 입니다. 저는 둘 중에서 'onoff'를 사용하기로 하였습니다.
'onoff'를 선택한 이유
'rpio'와 'onoff' 중에 'onoff'를 선택한 가장 큰 이유는 인터럽트 가능 여부입니다. 'rpio'는 공식적으로 GPIO 인터럽트를 사용하지 못하게 되어있습니다. 그 대신 폴링 방식으로 GPIO 입력을 감지하는 구조로 만들어져 있죠. 심지어 몇 가지 시스템 설정을 따로 해줘야 하는 수고로움도 있었습니다.
한편 'onoff'는 패키지를 설치하면 바로 사용할 수 있고, GPIO 입력 인터럽트도 감지할 수 있습니다. 사실 깊게 들어가면 진짜 인터럽트는 아닌 듯 합니다. 그러나 'epoll'이라는 패키지를 이용해 커널과 긴밀하게 연동되어 꽤 괜찮은 인터럽트 성능을 보여준다고 합니다. 'onoff' 공식 페이지에 벤치마크 결과도 자세히 공개되어있어 그 내용을 참고해보면 되겠습니다. 그래서 저는 인터럽트를 사용할 수 있고 성능이 좋은 'onoff'를 사용하기로 했습니다.
'onoff' 패키지 설치
npm i onoff # i 대신에 install을 쓸 수 있습니다.
위 명령으로 쉽게 패키지를 설치할 수 있습니다. 만약 라즈베리파이에 Node.js가 설치되어 있지 않다면 라즈베리파이에 Node.js 설치하기를 참고하시기 바랍니다.
Blink 코드 작성
// 파일명: blink.js
const Gpio = reauire('onoff').Gpio;
const led = new Gpio(17, 'out'); // GPIO 번호: 17
var value = 1;
setInterval(function() {
led.write(value);
value = +!value;
}, 1000);
위 코드는 GPIO 17번 핀으로 LED를 깜빡이게 하는 코드입니다. 17번 핀 위치는 아래 그림에서 확인하세요.
Blink 실행
node blink.js
코드와 회로가 정상이면 1초마다 LED가 꺼졌다 켜졌다 반복할 것입니다.
'연구 노트 > Embedded' 카테고리의 다른 글
라즈베리파이에 Node.js 설치하기 (0) | 2022.10.05 |
---|---|
[ODROID] Linaro gcc? ARM 아키텍처를 위한 gcc! (0) | 2022.09.08 |
임베디드 리눅스 애플리케이션 개발 환경 준비하기 (0) | 2022.09.07 |
[ODROID] Vu8M 디스플레이 연결 설정하기 (0) | 2022.08.29 |
GNU 어셈블러와 링커 스크립트 매뉴얼 (0) | 2021.04.22 |