Responsive Advertisement

Node.js와 Raspberry Pi를 활용한 다양한 컴포넌트 제어 가이드

Raspberry Pi는 소형 컴퓨터로 다양한 전자 부품 및 컴포넌트를 제어할 수 있으며, Node.js를 사용하면 이러한 컴포넌트를 쉽게 프로그래밍할 수 있습니다. 이 글에서는 Node.jsRaspberry Pi를 활용해 여러 가지 기본적인 전자 부품(컴포넌트)을 제어하는 방법을 알아보겠습니다. LED, 버튼, 센서와 같은 기본적인 하드웨어 제어 방법을 익히고, 이를 통해 IoT 프로젝트를 확장해 보세요.

Node.js와 Raspberry Pi를 활용한 다양한 컴포넌트 제어 가이드


1. Raspberry Pi와 Node.js의 기본 구성

Raspberry Pi에서 Node.js를 활용해 다양한 컴포넌트를 제어하기 위해서는 먼저 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 명령어로 버전을 확인할 수 있습니다. 설치가 완료되었다면, 이제 다양한 전자 부품을 제어하는 프로젝트를 시작할 준비가 되었습니다.

2. LED 제어

가장 기본적인 Raspberry Pi와 Node.js 프로젝트는 LED를 제어하는 것입니다. 단순한 LED 켜고 끄기를 통해 GPIO 핀 제어 방법을 익힐 수 있습니다.

필요한 재료

  • Raspberry Pi
  • LED 1개
  • 330Ω 저항 1개
  • 브레드보드와 점퍼 케이블

회로 구성

  • LED의 긴 다리(양극)를 Raspberry Pi의 GPIO 17번 핀에 연결
  • LED의 짧은 다리(음극)를 저항을 통해 Raspberry Pi의 GND에 연결

Node.js 코드

// led_control.js

const Gpio = require('onoff').Gpio;
const led = new Gpio(17, 'out');  // GPIO 17번 핀에 연결된 LED 제어

// LED 켜기
led.writeSync(1);
console.log('LED ON');

// 5초 후 LED 끄기
setTimeout(() => {
    led.writeSync(0);
    console.log('LED OFF');
    led.unexport();  // GPIO 리소스 해제
}, 5000);

이 코드는 Node.js와 onoff 패키지를 사용하여 Raspberry Pi의 GPIO 핀을 제어합니다. 5초 동안 LED가 켜진 후 자동으로 꺼집니다.

3. 버튼 입력 감지

Raspberry Pi에서 푸시 버튼을 사용하여 입력을 감지할 수 있습니다. 버튼이 눌렸을 때 특정 동작을 실행하는 방법을 알아봅니다.

필요한 재료

  • Raspberry Pi
  • 푸시 버튼 1개
  • 10kΩ 저항 1개
  • 브레드보드와 점퍼 케이블

회로 구성

  • 버튼의 한쪽 다리를 GPIO 18번 핀에 연결
  • 다른 한쪽 다리를 저항을 통해 GND에 연결

Node.js 코드

// button_input.js

const Gpio = require('onoff').Gpio;
const button = new Gpio(18, 'in', 'both');  // GPIO 18번 핀에 연결된 버튼 입력 감지

button.watch((err, value) => {
    if (err) {
        console.error('버튼 감지 오류:', err);
        return;
    }
    console.log('버튼 상태:', value ? '눌림' : '안 눌림');
});

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

이 코드는 버튼이 눌렸을 때와 놓였을 때 각각의 상태를 감지하여 콘솔에 출력합니다. watch() 함수는 버튼의 상태 변화를 실시간으로 감지합니다.

4. 온도 및 습도 센서(DHT22) 제어

온도와 습도 센서는 IoT 프로젝트에서 자주 사용되는 컴포넌트 중 하나입니다. 여기서는 DHT22 센서를 사용해 Raspberry Pi에서 온도와 습도를 측정하는 방법을 알아보겠습니다.

필요한 재료

  • Raspberry Pi
  • DHT22 온습도 센서 1개
  • 10kΩ 저항 1개
  • 브레드보드와 점퍼 케이블

회로 구성

  • 센서의 VCC 핀을 Raspberry Pi의 3.3V 핀에 연결
  • 센서의 GND 핀을 Raspberry Pi의 GND 핀에 연결
  • 데이터 핀을 GPIO 4번 핀에 연결하고 10kΩ 저항을 사용해 풀업(pull-up) 저항 연결

Node.js 코드

// dht22_sensor.js

const sensor = require('node-dht-sensor');

// DHT22 센서 초기화
sensor.initialize(22, 4);  // DHT22, GPIO 4번 핀 사용

setInterval(() => {
    const readout = sensor.read();
    console.log(`온도: ${readout.temperature.toFixed(2)}°C, 습도: ${readout.humidity.toFixed(2)}%`);
}, 2000);  // 2초마다 데이터 읽기

이 코드는 DHT22 센서를 통해 2초마다 온도와 습도를 읽어 콘솔에 출력합니다. node-dht-sensor 라이브러리를 사용해 손쉽게 센서 데이터를 수집할 수 있습니다.

5. 서보 모터 제어

서보 모터는 각도 제어가 필요한 프로젝트에 자주 사용됩니다. 예를 들어, 로봇의 관절을 제어하거나 카메라의 각도를 조절할 수 있습니다.

필요한 재료

  • Raspberry Pi
  • 서보 모터 1개
  • 브레드보드와 점퍼 케이블

회로 구성

  • 서보 모터의 VCC를 Raspberry Pi의 5V 핀에 연결
  • 서보 모터의 GND를 Raspberry Pi의 GND에 연결
  • 서보 모터의 신호 핀을 GPIO 17번 핀에 연결

Node.js 코드

// servo_control.js

const Gpio = require('pigpio').Gpio;
const motor = new Gpio(17, { mode: Gpio.OUTPUT });

let pulseWidth = 1000;  // 초기 각도

setInterval(() => {
    motor.servoWrite(pulseWidth);
    console.log(`서보 모터 각도: ${pulseWidth}`);
    
    // 각도 변경
    pulseWidth = pulseWidth === 1000 ? 2000 : 1000;
}, 2000);  // 2초마다 각도 변경

이 코드는 서보 모터의 각도를 2초마다 변경하며, pigpio 라이브러리를 사용해 모터를 제어합니다.

6. WebSocket을 이용한 실시간 제어

Raspberry Pi에서 WebSocket을 사용하면 웹 브라우저와 실시간으로 통신할 수 있습니다. WebSocket 서버를 만들어 클라이언트에서 Raspberry Pi의 다양한 컴포넌트를 실시간으로 제어할 수 있습니다.

WebSocket 서버 코드

// websocket_server.js

const WebSocket = require('ws');
const Gpio = require('onoff').Gpio;

const led = new Gpio(17, 'out');  // LED 제어를 위한 GPIO 설정
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', (ws) => {
    console.log('클라이언트 연결됨');

    ws.on('message', (message) => {
        const command = JSON.parse(message);
        console.log('받은 메시지:', command);

        if (command.action === 'led') {
            led.writeSync(command.value);  // LED 상태 변경
        }
    });

    ws.on('close', () => {
        console.log('클라이언트 연결 종료');
        led.writeSync(0);
        led.unexport();
    });
});

이 서버는 클라이언트로부터 메시지를 받아 LED를 제어하는 WebSocket 서버입니다. 클라이언트에서 특정 명령을 보내면 실시간으로 Raspberry Pi의 GPIO 핀을 제어할 수 있습니다.

결론

Node.js와 Raspberry Pi를 활용하면 다양한 전자 컴포넌트를 제어하고, IoT 프로젝트를 쉽게 구현할 수 있습니다. 이번 글에서는 LED, 버튼, 센서, 서보 모터 등 기본적인 컴포넌트를 다루는 방법을 알아보았으며, WebSocket을 통해 실시간으로 Raspberry Pi를 제어하는 방법도 소개했습니다. 이러한 기초를 바탕으로 더 복잡하고 유용한 IoT 시스템을 구축해 보세요!

댓글 쓰기