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を起動しなくてもいいので最高。