반응형

ReSpeaker 2-Mic Hat에는 APA102 LED 3 개와 GPIO 입력으로 들어오는 버튼이 하나 있다. 본 포스팅에서는 LED와 버튼 제어에 대해서 설명한다.


1. LED 제어

APA102 LED는 node.js 에서 apa102-spi라는 npm 모듈로 이용 가능하다. (https://www.npmjs.com/package/apa102-spi)


npm install apa102-spi


다음은 npm페이지에서 제시된 테스트 코드이다.

 var Apa102spi = require('apa102-spi') 

// Apa102spi(number of leds, clock divider) 

var LedDriver = new Apa102spi(9, 100) 

// setLedColor(n, brightness 0-31, red 0-255, green 0-255, blue 0-255) 

LedDriver.setLedColor(0, 1, 255, 0, 0) 

// send data to led string 

LedDriver.sendLeds()


2. 버튼 제어

 버튼은 GPIO 17번에 연결되어 있다. node.js 에서 Raspberry Pi의 GPIO는 onoff라는 모듈로 제어 가능하다. https://www.npmjs.com/package/onoff 에서 관련 설명이 되어 있다.


3. 버튼을 누르면 Random  하게 LED 출력하기

다음은 버튼을 누르면 Random하게 LED를 출력하고 다시 누르면 LED 출력을 멈추게 하는 코드이다.

const apa102spi=require('apa102-spi');

const gpio=require('onoff').Gpio;

const button=new gpio(17,'in','both');

const ledDriver=new apa102spi(3,100); //number of leds, clock devider


function getRandomInt(min,max){

        return Math.floor(Math.random()*(max-min+1))+min;

}

let interVal;

function startLedRandom(){

        interVal=setInterval(()=>{

                ledDriver.setLedColor(0,10,getRandomInt(0,255),getRandomInt(0,255),getRandomInt(0,255));

                ledDriver.setLedColor(1,10,getRandomInt(0,255),getRandomInt(0,255),getRandomInt(0,255));

                ledDriver.setLedColor(2,10,getRandomInt(0,255),getRandomInt(0,255),getRandomInt(0,255));

                ledDriver.sendLeds();

        },100);

};

function stopLed(){

        clearInterval(interVal);

        ledDriver.setLedColor(0,0,0,0,0);

        ledDriver.setLedColor(1,0,0,0,0);

        ledDriver.setLedColor(2,0,0,0,0);

        ledDriver.sendLeds();

};

let ledBlink=false;

button.watch((err,value)=>{

        if(value===0){

                if(ledBlink){

                        stopLed();

                        ledBlink=false;

                } else {

                        startLedRandom();

                        ledBlink=true;

                }


        }

});

console.log('ready');


4. 실행 결과

Root 권한으로 실행한다. 실행한 결과는 다음과 같다.


반응형
Posted by alias
,