안녕하세요.


웹 API과 IoT의 만남을 주제로 블로깅을 시작한지도 꽤나 시간이 흐른것 같네요.

사실 의도하지는 않았지만 연구를 진행해가면 갈수록 더욱 재밌는 것들을 발견하게 되어 너무나 기쁩니다. 

이번 포스팅에서 소개하고자 하는 내용은 node.js에서 Arduino를 제어하는 API를 제공하는 duino입니다.  (여담입니다만 이 글을 Internet of Things 목록에 넣어야 할지 아니면 JavaScript API 목록에 넣어야 할지 한참 고민했네요. ;-) )


https://github.com/ecto/duino


자세한 소개가 링크에 나와 있기는 하지만 아래와 같이 한글로 번역해서 정리하니 참고하시기 바랍니다.

  1. 설치



  2. npm install duino
    

      상기 git hub의 ./src/du.ino 코드를 scatch 도구를 이용해 arduino에 flash

  3. LED 점멸 코드 예제

  4. var arduino = require('duino'),
        board = new arduino.Board({
         device: 'USB0'
    });
    
    var led = new arduino.Led({
      board: board,
      pin: 13
    });
    
    led.blink();
    
      라즈베리파이와 아두이노 연결 시 /dev/ttyUSB0를 통해 serial 통신하게 되어 device attribute에 USB0라고 입력
      MS Windows / MAC 계열에서는 아래 파일로 node_modules/duino/lib/board.js를 대체한 뒤 device 명으로 시리얼 포트가 연결된 COM포트 명 입력 ex) COM4

    board.js




  5. API Signatures (using Web IDL)

  6. // duino uses arduino namespace by default.
    
    enum EmitterType { "data", "connected", "ready" };
    enum Mode {"in", "out"};
    
    dictionary BoardOption {
        DOMString device;
        boolean debug;
    };
    
    dictionary LEDOption {
        Board board;
        DOMString pin = '13';
    };
    
    callback BoardOnCallback = void (optional DOMString msg);
    callback BoardSerialCallback = void (DOMString msg);
    
    [Constructor, Constructor (BoardOption option)]
    interface Board {
    
        const DOMString LOW = '000';
        const DOMString HIGH = '255';  
        void on(EmitterType type, BoardOnCallback cb); 
        void serial(BoardSerialCallback cb);
        void write(DOMString msg);
        void pinMode(DOMString  pin, Mode mode);
        void digitalRead(DOMString pin);
        void digitalWrite(DOMString pin, DOMString val);
        void analogRead(DOMString pin);
        void analogWrite(DOMString pin,DOMString val);
        void delay(unsigned short ms);    
    };
    
    [Constructor, Constructor (LEDOption option)]
    interface LED {
    
        void on();
        void off();
        void blink(unsigned short interval = 1000);
        void fade(unsigned short interval = 2000);
        unsigned short bright();
    };
    
    interface LCD {
      // TODO: See the details at the original link
    };
    
    interface Piezo {
      // TODO: See the details at the original link
    };
    
    interface Button {
      // TODO: See the details at the original link
    };
    
    interface Ping {
      // TODO: See the details at the original link
    };
    
    interface Servo {
      // TODO: See the details at the original link
    };
    
    

    Web IDL에 관한 문법은 http://www.w3.org/TR/WebIDL/ 를 참고하시기 바랍니다.


    API를 사용하는데 도움이 되시기 바랍니다.

    감사합니다. ;-)


안녕하세요,


이전에는 DOM 객체 제어 (manipulation) 및 server 부하(workload)를 줄이기 위한 간단한 스크립트 언어에 불과했던 JavaScript가 AJAX를 이용한 Rich Internet Application (RIA) 등장으로 활용도가 커지기 시작했습니다. 이와 함께 AJAX의 XML 대신 JSON (JavaScript Object Notation)을 이용해 데이터를 교환하는 방식이 개발자들에게 인기를 얻고, HTML5 표준화로 인해 다양한 기능을 JavaScript를 통해 사용할 수 있게 되었죠.

또한 구글이 만든 JavaScript 엔진인 V8에 기반한 서버 개발을 위한 플랫폼인 Node.JS 등장으로 인해 client 뿐 아니라 server 개발을 아우르는 언어로 각광받기 시작했습니다.


현재 JavaScript를 표준화를 담당하고 있는 단체인 ECMA에서는 몇가지 JavaScript 언어의 취약점을 보완해 ECMAScript 5까지 내놓았으나 여전히 기존 언어들에 비해 부족한 면이 많습니다.


아래 링크를 통해 소개할 RequireJS는 Node.JS에서 기본적으로 채택한 모듈화 방식이며 client 개발 시에도 사용이 가능한 library가 제공되어 대형 web app 개발에도 사용되고 있습니다.


http://helloworld.naver.com/helloworld/591319


JavaScript는 매우 자유롭고 유연한 언어이지만, 코드의 크기가 커지면 관리하기가 힘들어지는 단점이 있기 때문에 되도록 상기 링크의 RequireJS를 이용해서 개발하는 걸 권고합니다.


현재 ECMA에서도 이와 유사한 형태의 모듈화에 대한 표준화가 진행 중이니 머지 않은 미래에 JavaScript 기본 기능으로써 제공되리라 봅니다.


감사합니다. 

안녕하세요,


라즈베리 파이를 아두이노 개발환경으로 사용하기 위해 관련 도구를 설치하는 방법을 다음과 같이 정리합니다.


wget http://arduino.googlecode.com/files/arduino-1.0.5-linux64.tgz
tar zxvf arduino-1.0.5-linux64.tgz
sudo apt-get install avr-libc
sudo apt-get install libftdi1
sudo apt-get install avrdude
sudo apt-get install openjdk-6-jre
sudo apt-get install librxtx-java
cd arduino-1.0.5
for i in $(find . -name "librxtxSerial.so") ; do cp /usr/lib/jni/librxtxSerial.so $i ; done
for i in $(find . -name "RXTXcomm.jar") ; do cp /usr/share/java/RXTXcomm.jar $i ; done
cp /usr/bin/avrdude /home/pi/arduino-1.0.5/hardware/tools/avrdude
cp /etc/avrdude.conf /home/pi/arduino-1.0.5/hardware/tools/avrdude.conf

이후 startx 를 실행하여 x window 상에서 ~/arduino-1.0.5/arduino를 실행하면 arduino IDE를 띄울 수 있습니다.




출처 : http://raspberrypi.homelabs.org.uk/raspberrypi-the-arduino-development-tool/

+ Recent posts