심심해서 하는 블로그 :: [NodeJS] 라즈베리파이 LED 제어하기

1. LED 회로 구성하기


이전 포스트에서는 NodeJS의 serialport 패키지를 이용해서 아두이노에 연결된 센서의 값을 받아오는 과정을 진행했어요. 이번에는 라즈베리파이의 GPIO에 LED와 버튼을 연결하고 버튼을 누르면 LED가 켜지고 꺼지는 기능을 구현해 보겠습니다. 물론 NodeJS를 이용해서 말이죠!


우선 LED와 버튼 두 개를 이용해서 회로를 간단하게 구현을 해보려구 해요. 버튼 하나는 On 버튼으로 다른 버튼은 Off 버튼으로 사용하면 끄고 켜고 기능을 할 수 있겠죠? 물론 버튼 하나 만으로도 구현이 가능해요. 근데 아두이노나 라즈베리파이에 쓰는 버튼은 한 번 누르면 한번으로 인식하지 않고 여러 번으로 인식해서 그냥 두 개를 씁니다.



그림과 같이 구성합니다. 매번 느끼지만 라즈베리파이의 GPIO에.. 좀.. 아두이노처럼 GPIO 위치를 기판에 새겨 주면 좋겠다는 생각을 매번 해요. 지금은 아무 코드도 작성하지 않았으니까, 버튼을 눌러도 아무런 반응이 없을 거예요. 이제 코드를 작성해서 버튼에 따라서 LED가 켜지고 꺼지도록 만들어 볼게요!!


2. onoff 패키지 사용하기


라즈베리파이로 프로젝트를 진행하는 사람이 많아져서 그런가요?? 이런 패키지들이 생각보다 많네요. 

우선 onoff 패키지를 설치합니다. 프로젝트 파일들이 있는 경로에서 아래와 같이 명령어를 입력합니다.


npm install onoff --save


설치가 완료된 후 이제 소스코드를 작성해 봅시다. LED는 18번에 ON 버튼은 24번, OFF 버튼을 23번에 연결한 후 작성된 코드입니다. 여러분이 하실 때에는 연결하신 번호대로 작성해주시면 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// GPIO : LED 제어 부분
var GPIO = require('onoff').Gpio,
    LED = new GPIO(18'out'),
    ON_sw = new GPIO(24'in''both'),
    OFF_sw = new GPIO(23'in''both');
 
ON_sw.watch(function(err, state){
         if(state == 1){
                 LED.writeSync(1);                               
         }
});
 
OFF_sw.watch(function(err, state){
         if(state == 1){
                 LED.writeSync(0);
         }
});
 
 
 
cs


작성을 한 후 실행을 하면 파란 버튼을 누르면 불이 꺼지고 빨간 버튼을 누르면 불이 켜지는 걸 확인했습니다. 

스마트 스위치 같은 것을 실습하는 데에 좋은 패키지가 아닐까 생각합니다.





,