14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Node.js + ArduinoでLEDを光らせる。

Last updated at Posted at 2013-04-30

いままではFlashやProcessingを使ってPCとArduinoを連携させていましたが、
Node.jsでも結構簡単に制御できることを知ったのでメモしておきます。

【用意するもの】
・Arduino
・Node.jsの動く環境
・duino( https://github.com/ecto/duino

  1. なんとかしてNode.jsの動く環境を用意する
  2. duinoをインストールする
  3. duino/src/du/du.ino をArduinoに書き込む
  4. LEDをA0ピンとGNDピンに繋ぐ
  5. duino/examples/led.jsを実行

これでLDEが点滅するはずです。

ソースコードをみてみましょう。

duino/examples/led.js
// duinoのインポート
var arduino = require('../');

// Arduinoボードオブジェクトの作成
var board = new arduino.Board({
  debug: true // デバッグモードをON
});

// LEDオブジェクトの作成
var led = new arduino.Led({
  board: board, // ボードの選択
  pin: "A0" // 出力ピンの選択
});

// ボードの準備完了に対してコールバック関数を登録
board.on('ready', function(){
    led.blink(); // LEDを点滅させる
});

あとは、Arduinoに書き込んだ duino/src/du/du.ino がなんとかしてくれます。
おそらくArduinoのAPIをJSで叩けるようにしてくれているのでしょう。
ライブラリのおかげで非常に直感的にかけるのではないでしょうか。

blink.ino
// 使用するピンを変数に代入
int led = A0;

// セットアップ(1度だけ実行)
void setup() {
    // ピンを出力に設定
    pinMode(led, OUTPUT);     
}

// ループ処理(電源供給しているかぎりループで実行)
void loop() {
    analogWrite(led, 255); // LEDをON
    delay(1000); // 1000ms待機
    analogWrite(led, 0); // LEDをOFF
    delay(1000); // 1000ms待機
}

と、こんなこんなに感じになります。

お気づきの方も多いかと思いますが、
実はこの段階では、コード自体にそんなに大差はありません。
むしろNode.jsを使わなければ電源供給のみで動作させることができるので、
この程度のコードであればArduinoのみで動かしたほうがよさげです。

例えば、Twitterと連動させてLEDを光らせたいときなど、
サーバサイドとの連携が必要なときこそNode.js、duinoの出番です。
用途によってうまく使い分けていきたいと思います。

※ Arduino UNO, Macbook Pro (OS 10.7.5), Node.js (v0.8.22) にて確認

14
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?