Posted at

Firmataを使ってArduinoをPCのGPIOにしちゃう

More than 3 years have passed since last update.


PCにもGPIOがほしい

Arduinoなんかを使えば入出力することは出来るけど、たとえばネットワークから取得したデータをアレするとか、センサーから取得したデータをDBにアレするとか言う場合、Arduinoではちょっと非力だ。モジュールを追加すればネットワークとかに接続できるけどお金が余計にかかるし、面倒臭さはどんどこ増えていく。

RaspberryPiとかBeagleBoneはそれらの問題に対しての完璧な回答なのだけど、PCと接続したままでも問題なくて、今現在Arduinoしか持ってないとかいうならFirmataを使うとPCから好きなように入出力ができるようになる。RaspberryPiとかと違ってOS入れたり環境構築したりする必要もない。


Firmataってなに? どうやって使うの?

FirmataはArduinoを接続しているPCなどから制御するためのプロトコル。使うためにはArduinoにFirmataのソフトウェアを書き込み、PC側にもFirmataが利用できるライブラリなどを導入する必要がある。


Arduino側の準備

firmata01.png

スケッチの例>Firmata>StandardFirmataを選択してArduinoに書き込むだけ。


PC側の準備

Firmata用のライブラリは多言語で複数あるのでググると良いが、ここではNode.jsのjohnny-fiveというライブラリを使った。Node.jsではFirmataのライブラリは複数あり、Arduinoの命令と同じ名前にしてあるやつなどもあったが、開発の活発さとか、いろいろなモジュールに合わせた命令があって楽しいとか、readme.mdの頭にある絵が気に入った(重要なことである)とかでこのライブラリにした。

firmata02.png

使い方は普通のNode.jsのモジュールと変わらないので特に説明することもない。


/**
* フェードLチカ
*/

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

function fadeBlink(time,led){
led.fadeIn(time,function(){
led.fadeOut(time,function(){
fadeBlink(time,led);
});
});
}

board.on("ready",function(){
var led = new five.Led(5);
fadeBlink(3000,led);
});