node.jsでarduinoを扱う

arduinoをそのまま触りたくなかったのでnode.jsからいじる。

てゆうかarduino言語💩すぎてな。 毎回いちいち書き込むとか面倒でやってやれるかアホ。

Firmata

Firmataを使うとProcessingやrubyなど他の言語から汎用的なプロトコルを利用してArduinoと通信できる。 つまり、Arduino側のプログラムを意識することなく、プログラムを書くことができる。 ひとつの言語で操作できることはそれ自体が大きな魅力だ。 webとの連携も楽だしな。

Firmataの使い方

使い方といってもArduinoをインストールしたらFile > Examples > Firmata > StandardFirmataを選んでArduinoに書き込むだけだ。 さよならArduinoIDEもう会うこともないだろう。

johnny-fiveを使う

ライブラリはgithubでスター数が多かった以下を採用。 使い人が多いってことはそれだけで使う理由になり得る。

https://github.com/rwaldron/johnny-five

さて、お決まりのnpmでインストール

npm i johnny-five

とりあえずREADMEにもあるLチカをさせてみる。

var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  var led = new five.Led(13);
  led.blink(500); 
});

とりあえずデバイス系のハローワールドことLチカはできた。

ツイートでLチカ

jsなのでちょろっとtwitterに連携してツイートでLチカ制御もやってみた。 うーで光りにゃーで消える。

var five = require('johnny-five');
var board = new five.Board();
var led;

board.on('ready', function() {
  led = new five.Led(13);
  console.log('board is ready');  
});

var twit = new require('twit');
var twitter = new twit({
  consumer_key: process.env.CONSUMER_KEY,
  consumer_secret: process.env.CONSUMER_SECRET,
  access_token: process.env.ACCESS_TOKEN,
  access_token_secret: process.env.ACCESS_TOKEN_SECRET
});

twitter.stream('user').on('tweet', function (tweet) {
  if (tweet.retweeted_status) return;
  var str = tweet.text;
  if (str.match('うー')) {
    if(board.isReady){ led.on(); }
  } else if (str.match('にゃー')) {
    if(board.isReady){ led.off(); }
  }
});

お手軽に連携ができて便利。

また、REPLは素晴らしいと思う。

一度firmataを書き込んでしまえばもうIDEを起動しなくてもいいので最高。