아두이노에 duino코드 업로드하기 1

duino를 사용하기 위해서는 아두이노에 duino 프로토콜을 해석할 수 있는 프로그램을 설치해야 한다. 아두이노 프로그램(github.com/ecto/duino/blob/master/src/du.ino)을 다운로드해 아두이노 IDE로 업로드한다. 일단 du.ino가 아두이노 보드에 올라가면 아두이노 IDE가 필요 없게 된다. 이제 Node.js를 이용해 프로그래밍하는 일만 남았다.

du.ino를 업로드할 때 보드와 시리얼포트를 과 같이 설정한다. 은 윈도우에서 스케치 프로그램으로 업로드하는 것을 보여주고 있다. 다른 운영체제를 사용하고 있다면 각 환경에 맞도록 수정해야 한다. 업로드가 완료되면 Node.js로 아두이노를 제어할 준비가 모두 끝난 것이다.

샘플 소스와 의존 라이브러리 여기서 사용할 샘플 코드를 github에 올려두었다. 링크(github.com/jinniahn/duino_sample)를 이용해 소스를 다운로드하고 npm install 명령으로 의존모듈들을 설치해야 한다. duino 모듈은 github에 있는 최신 소스를 사용하고 있다. 또 의존 라이브러리로 ‘SerialPort’ 모듈이 있는데, 이 모듈을 컴파일해야 하므로 윈도우의 경우에는 설치가 쉽지 않다. 여기서는 리눅스를 이용하도록 하겠다. 꼭 윈도우에서 사용하고자 하는 경우에는 SerialPort 모듈의 설치 문서(github.com/voodootikigod/node-serialport#to-install)를 참고하기 바란다.

리눅스나 맥에서 작업하고 있다면 간단히 다음과 같이 NPM(Node Packaged Module)을 이용해 설치할 수 있다.

NPM을 이용한 SerialPort모듈 설치 
$>cd $duino_sample_path
$>npm install

위의 $duino_sample_path는 github에서 받은 소스의 경로로 변경해야 한다.

[예제 1] 버튼을 눌러 LED에 불 켜기 이제 예제를 다뤄볼 것이다. 첫 번째는 LED와 버튼을 이용하는 예제다. 간단하지만 디지털 I/O를 다뤄 볼 수 있는 대표적인 예제다. 아두이노는 대부분 외부의 입력을 센서를 통해 입력받아 어떤 결과를 LCD나 부저와 같은 방식으로 출력한다. 예제에서는 단색 LED로 외부에 정보를 표시하는 방법을 살펴볼 것이다. 우선 회로도부터 살펴보자( 참조).

버튼이 누르면 LED에 불이 들어옴(button_led.js)

var arduino = require('duino')

var board = new arduino.Board({ // 
debug: true,

// if mac, use below
// device: ‘usb’


// linux serial dev : /dev/ttyACM0
device: 'ttyACM0' // 
});


var led = new arduino.Led({ //
board: board,
pin: 13
});

var button = new arduino.Button({ //
board: board,
pin: 2
});

button.on('up', function(){ //
led.off();
});


button.on('down', function(){ //
led.on();
});

이 코드의 목적은 버튼을 누르고 있으면 LED에 불이 들어오고 아니면 꺼지도록 하는 것이다. 이를 위해서 버튼과 LED를 제어할 필요가 있다. duino에는 각각의 클래스를 제공하고 있다. 소스 코드에서 1번은 아두이노와의 연결과 데이터 교환을 담당하는 board다. 여기에 시리얼포트의 이름이 들어간다. 리눅스를 사용하고 있다면 ttyACM0을 사용하고 맥이라면 usb를 입력한다. board 객체는 버튼이나 LED를 다루기 위해 반드시 필요한 값으로 객체 생성 시에 사용된다. 3, 4번에 led와 button 객체를 생성하면서 board를 사용한 것을 기억하자. 그리고 추가적으로 핀 번호도 지정해 각 부품이 어떤 핀에 연결될 것인지 지정한다. 회로도에서 지정한 것처럼 디지털 핀 2와 버튼을 연결하고 디지털 핀 13에 LED를 연결했다. 소스 코드에도 이 정보를 반영했다.

버튼을 누르면 button 객체에 ‘down’ 이벤트가 발생한다. on 메소드를 사용해 해당 이벤트에 핸들러를 등록해 둔다(의 6). 핸들러에서는 led.on() 명령으로 LED에 전원이 공급된다. 아두이노의 코드들 대부분은 이처럼 이벤트에 의해 동작한다. Node.js는 event emitter가 있어 센서의 이벤트에 따른 동작을 쉽게 구현할 수 있다

[출처] https://www.imaso.co.kr/news/article_view.php?article_idx=20140701142507