Responsive Advertisement

Node.js와 Raspberry Pi의 GPIO 입문 가이드

Raspberry Pi는 소형 컴퓨터로, 다양한 프로젝트에서 활용되는 강력한 하드웨어입니다. 특히 GPIO(General Purpose Input/Output) 핀을 통해 다양한 전자 기기나 센서를 제어할 수 있어 IoT, 스마트 홈, 로봇 프로젝트 등에 활용됩니다. Node.js를 사용하면 자바스크립트로 간편하게 GPIO 핀을 제어할 수 있어 Raspberry Pi 기반 프로젝트에 적합합니다. 이번 글에서는 Node.js와 Raspberry Pi의 GPIO 핀을 소개하고, 이를 활용해 LED와 같은 장치를 제어하는 방법을 단계별로 설명하겠습니다.

GPIO란?

GPIO는 General Purpose Input/Output의 약자로, Raspberry Pi의 물리적 핀을 통해 다양한 전자 부품과의 입출력 통신을 할 수 있는 인터페이스입니다. Raspberry Pi에는 여러 개의 GPIO 핀이 있으며, 이를 통해 LED, 버튼, 센서 등 여러 장치를 제어할 수 있습니다. GPIO 핀은 두 가지 모드로 작동합니다:

  • 입력(Input): 외부 장치(센서 등)로부터 신호를 읽어들입니다.
  • 출력(Output): Raspberry Pi에서 외부 장치(LED 등)로 신호를 보냅니다.

Raspberry Pi의 GPIO 핀 구성

Raspberry Pi에는 총 40개의 핀이 있습니다. 이 중 GPIO 핀을 포함하여 전원 및 그라운드 핀도 존재합니다. GPIO 핀의 역할은 다음과 같습니다:

  • 전원 핀(5V, 3.3V): 외부 장치에 전원을 공급합니다.
  • GND(그라운드): 회로를 완성하는 핀입니다.
  • GPIO 핀: 입력과 출력을 설정할 수 있는 다목적 핀입니다.

이제 Node.js를 사용하여 GPIO 핀을 제어하는 방법을 알아보겠습니다.

Raspberry Pi에서 Node.js 설치 및 설정

Node.js를 사용하여 GPIO 핀을 제어하려면 먼저 Raspberry Pi에 Node.js를 설치해야 합니다. 아래 명령어를 통해 Node.js를 설치할 수 있습니다.

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

Node.js 설치가 완료되면 node -vnpm -v 명령어로 설치된 버전을 확인할 수 있습니다.

GPIO 핀 제어를 위한 onoff 패키지 설치

Node.js를 통해 GPIO 핀을 제어하려면 onoff라는 Node.js 패키지를 사용할 수 있습니다. 이 패키지는 GPIO 핀을 간편하게 제어할 수 있도록 도와줍니다. onoff 패키지를 설치하려면 다음 명령어를 입력합니다.

$ npm install onoff

Node.js로 GPIO 핀 제어하기

이제 Node.js와 onoff 패키지를 사용하여 Raspberry Pi의 GPIO 핀을 제어해보겠습니다. 이번 예제에서는 GPIO 17번 핀에 연결된 LED를 제어하는 방법을 설명합니다.

1. LED 켜고 끄기

아래 코드는 GPIO 17번 핀에 연결된 LED를 1초 동안 켠 후 끄는 예제입니다.

// gpio_control.js

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

// LED를 켜고 1초 후에 끄는 함수
const blinkLED = () => {
    led.writeSync(1);  // LED 켜기
    console.log('LED ON');
    setTimeout(() => {
        led.writeSync(0);  // LED 끄기
        console.log('LED OFF');
    }, 1000);
};

// LED 깜빡이기
blinkLED();

// 프로그램 종료 시 GPIO 리소스 해제
process.on('SIGINT', () => {
    led.unexport();
});

이 코드는 Raspberry Pi의 GPIO 17번 핀을 사용하여 LED를 제어합니다. writeSync(1)은 핀에 전압을 보내 LED를 켜는 역할을 하고, writeSync(0)은 전압을 차단하여 LED를 끄는 역할을 합니다.

2. 프로그램 실행

GPIO 핀을 제어하기 위해서는 루트 권한이 필요하므로, 프로그램을 실행할 때는 sudo 명령어를 사용해야 합니다.

$ sudo node gpio_control.js

이 명령어를 실행하면 LED가 1초 동안 켜졌다가 꺼집니다. 프로그램을 종료할 때는 SIGINT 이벤트를 통해 GPIO 핀을 안전하게 해제할 수 있습니다.

GPIO 핀 입력 처리하기

이번에는 버튼을 이용해 GPIO 핀에서 입력을 받아 처리하는 예제를 살펴보겠습니다. 이 예제에서는 버튼을 누르면 LED가 켜지고, 버튼을 떼면 LED가 꺼집니다.

// gpio_input.js

const Gpio = require('onoff').Gpio;
const led = new Gpio(17, 'out');  // GPIO 17번 핀에 연결된 LED
const button = new Gpio(18, 'in', 'both');  // GPIO 18번 핀에 연결된 버튼, 'both'는 상승/하강을 모두 감지

// 버튼을 눌렀을 때의 이벤트 처리
button.watch((err, value) => {
    if (err) {
        console.error('GPIO 입력 중 오류 발생:', err);
        return;
    }
    led.writeSync(value);  // 버튼 값(1 또는 0)에 따라 LED 제어
    console.log(value === 1 ? 'LED ON' : 'LED OFF');
});

// 프로그램 종료 시 GPIO 리소스 해제
process.on('SIGINT', () => {
    led.unexport();
    button.unexport();
});

이 코드는 GPIO 18번 핀에 연결된 버튼을 사용하여 LED를 제어하는 예시입니다. 버튼이 눌리면 watch() 함수가 트리거되어 LED가 켜지거나 꺼집니다.

Raspberry Pi GPIO 활용 프로젝트 아이디어

Raspberry Pi의 GPIO 핀을 활용하여 다양한 프로젝트를 진행할 수 있습니다. 다음은 GPIO 핀을 사용한 몇 가지 프로젝트 아이디어입니다.

  • 스마트 조명 제어: 버튼을 누르거나 웹 서버에서 명령을 받아 집안의 조명을 제어할 수 있습니다.
  • 온도 센서와 경고 시스템: 온도 센서를 통해 실시간으로 온도를 측정하고, 특정 온도 이상일 때 경고 LED를 켜는 시스템을 구현할 수 있습니다.
  • 모션 감지 보안 시스템: PIR 센서로 움직임을 감지해 경고음을 발생시키거나 카메라를 활성화하는 보안 시스템을 만들 수 있습니다.
  • 로봇 팔 제어: 모터를 제어하여 로봇 팔을 움직이거나 특정 작업을 자동으로 수행하는 시스템을 제작할 수 있습니다.

결론

이번 글에서는 Raspberry Pi의 GPIO 핀을 Node.js를 통해 제어하는 방법을 설명했습니다. Node.js와 GPIO를 활용하면 간단한 LED 제어부터 복잡한 센서 시스템까지 다양한 하드웨어 제어 프로젝트를 쉽게 구현할 수 있습니다. 이 가이드를 참고하여 여러분만의 IoT 프로젝트를 시작해 보세요!

댓글 쓰기