Responsive Advertisement

Node.js와 Raspberry Pi로 LED 깜빡이기: GPIO 핀 제어 가이드

Raspberry Pi는 저렴하면서도 강력한 컴퓨터로, 다양한 프로젝트에서 사용됩니다. 특히 GPIO 핀을 통해 여러 전자 기기를 제어할 수 있습니다. 이번 글에서는 Node.js를 사용하여 Raspberry Pi의 GPIO 핀을 제어하고, LED를 깜빡이는 간단한 예제를 만들어보겠습니다. 이 과정을 통해 하드웨어 제어의 기본을 배울 수 있습니다.

준비물

이 프로젝트를 진행하기 위해 다음과 같은 준비물이 필요합니다.

  • Raspberry Pi (모델에 상관없이 가능)
  • LED 1개
  • 저항 (330Ω)
  • 브레드보드와 점퍼 케이블

이제 Raspberry Pi에 Node.js를 설치하고, LED를 제어할 준비를 하겠습니다.

Raspberry Pi에 Node.js 설치

먼저, Raspberry Pi에서 Node.js를 설치해야 합니다. Node.js는 자바스크립트로 서버 및 하드웨어를 제어할 수 있는 런타임입니다. 최신 버전의 Node.js를 설치하려면 터미널에서 다음 명령어를 입력합니다.

$ curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
$ sudo apt install -y nodejs

설치가 완료되면 node -vnpm -v 명령어를 사용해 Node.js와 npm(Node.js 패키지 매니저)의 버전을 확인할 수 있습니다.

GPIO 핀을 제어하기 위한 onoff 패키지 설치

Raspberry Pi의 GPIO 핀을 제어하려면 onoff라는 Node.js 패키지를 사용합니다. 이 패키지는 간단한 코드로 GPIO 핀의 입력과 출력을 처리할 수 있게 도와줍니다. 먼저 onoff 패키지를 설치합니다.

$ npm install onoff

이제 준비가 완료되었습니다. 실제로 LED를 깜빡이는 코드를 작성해보겠습니다.

LED 깜빡이기 회로 연결

Raspberry Pi의 GPIO 핀과 LED를 다음과 같이 연결합니다:

  • LED의 긴 다리(양극)를 330Ω 저항과 연결합니다.
  • 저항의 다른 쪽을 Raspberry Pi의 GPIO 17번 핀에 연결합니다.
  • LED의 짧은 다리(음극)를 Raspberry Pi의 GND 핀에 연결합니다.

이제 Raspberry Pi와 LED가 연결되었으므로, 코드를 작성해 LED를 깜빡이게 만들어보겠습니다.

Node.js로 LED 깜빡이기 코드 작성

다음은 GPIO 17번 핀을 사용해 LED를 1초 간격으로 깜빡이게 하는 Node.js 코드입니다.

// blink_led.js

const Gpio = require('onoff').Gpio;  // onoff 패키지 임포트
const led = new Gpio(17, 'out');     // GPIO 17번 핀을 출력 모드로 설정

let isLedOn = 0;  // LED 상태 (켜짐 = 1, 꺼짐 = 0)

// LED를 주기적으로 깜빡이게 하는 함수
const blinkLED = setInterval(() => {
    isLedOn = isLedOn ^ 1;  // XOR 연산을 통해 LED 상태를 반전
    led.writeSync(isLedOn); // 현재 상태를 GPIO 핀에 기록
    console.log(isLedOn ? 'LED ON' : 'LED OFF');
}, 1000);  // 1초 간격 (1000ms)

// 프로그램 종료 시 GPIO 리소스 해제
process.on('SIGINT', () => {
    clearInterval(blinkLED);  // 인터벌 정지
    led.writeSync(0);         // LED 끄기
    led.unexport();           // GPIO 리소스 해제
    console.log('프로그램 종료, GPIO 리소스 해제 완료');
    process.exit();
});

이 코드는 setInterval() 함수를 사용해 1초 간격으로 LED의 상태를 반전시킵니다. writeSync(1)은 LED를 켜고, writeSync(0)은 LED를 끕니다.

코드 실행하기

GPIO 핀을 제어하려면 루트 권한이 필요하므로, 다음과 같이 sudo 명령어를 사용해 코드를 실행합니다.

$ sudo node blink_led.js

이 명령어를 실행하면 LED가 1초마다 켜지고 꺼지며 깜빡이는 것을 볼 수 있습니다. 프로그램을 종료할 때는 Ctrl + C를 누르면 GPIO 리소스를 안전하게 해제하고 프로그램을 종료합니다.

GPIO 핀 제어의 확장

Node.js와 Raspberry Pi를 사용한 GPIO 제어는 매우 유연합니다. LED 깜빡이기 외에도 버튼, 센서, 모터 등을 제어할 수 있습니다. 예를 들어, 다음과 같은 확장 프로젝트를 시도해볼 수 있습니다.

  • 버튼과 LED 제어: 버튼을 누르면 LED가 켜지고, 버튼을 떼면 LED가 꺼지도록 설정할 수 있습니다.
  • 모터 제어: GPIO 핀을 사용해 모터를 켜고 끌 수 있으며, PWM(펄스 폭 변조) 신호로 모터 속도를 조절할 수 있습니다.
  • 센서와의 연동: 온도, 습도, 거리 센서를 통해 실시간으로 데이터를 수집하고 GPIO를 통해 관련 장치를 제어할 수 있습니다.

결론

이번 글에서는 Raspberry Pi와 Node.js를 사용하여 GPIO 핀을 제어하고, LED를 깜빡이는 간단한 프로젝트를 진행했습니다. 이 과정을 통해 Node.js를 사용한 하드웨어 제어의 기초를 익힐 수 있습니다. 이 가이드를 바탕으로 더 복잡한 하드웨어 프로젝트에 도전해보세요!

이전최근

댓글 쓰기