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 권한으로 실행한다. 실행한 결과는 다음과 같다.