0%

ArduinoのFirmataファームウェアをOSXのCylon.jsから使う

croutonのUbuntuにはNode.jsとCylon.jsをFirmataファームウェアを使って操作する環境を用意しました。OSX Yosemiteにも同じようにNod.jsの開発環境を用意します。FirmataのアップロードはArduino IDEを使わずにGortのCLIから行います。

OSXの環境構築

Getting Started w/ Arduino on Mac OS Xを読みながら環境構築をしていきます。

FTDIのUSBシリアルドライバ

Arduino UnoとUSBシリアル接続するために、OSXにFTDIのUSBシリアルドライバをインストールします。FTDIのVCP DriversのページからOSX用のインストーラーをダウンロードします。最新バージョンは2.2.18でした。YosemiteにはFTDIUSBSerialDriver_10_4_10_5_10_6_10_7をインストールします。

Gort

GortはArduinoやSparkCoreなどのコネクテッドデバイスのファームウェアを更新するCLIです。OSXの64bit版をダウンロードしてインストールします。Goで書かれているのでバイナリをコピーするだけです。

$ cd ~/Downloads
$ wget https://s3.amazonaws.com/gort-io/0.3.0/gort_0.3.0_darwin_amd64.zip
$ unzip gort_0.3.0_darwin_amd64.zip
Archive: /Users/mshimizu/Downloads/gort_0.3.0_darwin_amd64.zip
inflating: gort_0.3.0_darwin_amd64/gort
inflating: gort_0.3.0_darwin_amd64/README.md
inflating: gort_0.3.0_darwin_amd64/LICENSE
$ sudo cp gort_0.3.0_darwin_amd64/gort /usr/local/bin/

バージョンを確認します。

$ gort --version
gort version 0.3.0

Firmata

Firmataファームウェアをインストールします。Firmataはホストマシンからシリアル通信を使ってArduinoを制御するためのプロトコルです。まずArduino UnoをUSBケーブルで接続します。

$ gort scan serial
/dev/cu.Bluetooth-Incoming-Port /dev/tty.Bluetooth-Incoming-Port
/dev/cu.Bluetooth-Modem /dev/tty.Bluetooth-Modem
/dev/cu.iPhoneDragonfly-Wireles /dev/tty.iPhoneDragonfly-Wireles
/dev/cu.usbmodem1421 /dev/tty.usbmodem1421

Arduinoはavrdudeを使ってファームウェアを書き込むのでホストマシンにavrdudeをインストールします。

$ gort arduino install
Attempting to install avrdude with Homebrew.

ArduinoにFirmataファームウェアをアップロードします。

$ gort arduino upload firmata /dev/tty.usbmodem1421
avrdude: AVR device initialized and ready to accept instructions
...
avrdude: verifying ...
avrdude: 11452 bytes of flash verified

avrdude done. Thank you.

Node.js

OSXの場合nodebrewを使ってNode.jsをインストールするのが多いようですが、Ubuntuと同じようにnvmを使います。インストールスクリプトをダウンロードして実行します。

$ curl https://raw.githubusercontent.com/creationix/nvm/v0.24.0/install.sh | bash

自動的に.bash_profileにnvm起動スクリプトの実行が追加されました。

~/.bash_profils
export NVM_DIR="/Users/mshimizu/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm

シェルを開き直し、nvmのバージョンを確認します。

$ nvm --version
0.24.0

Node.jsは0.10の最新版をインストールします。

$ nvm install 0.10
######################################################################## 100.0%
Now using node v0.10.37

インストールしたNode.jsを有効にします。npmのバージョンも確認します。

$ nvm use 0.10
Now using node v0.10.37
$ npm -v
1.4.28

nvmを有効にして直接nodeのコマンドを実行することもできます。

$ nvm run 0.10 --version
Running node v0.10.37
v0.10.37

cylon-firmata

ホストマシンのOSXにCylon.jsのFirmataアダプターをインストールします。最初にプロジェクトを作成します。

$ mkdir -p ~/node_apps/firmata-led
$ cd !$

package.jsonに必要なパッケージを定義します。

~/node_apps/firmata-led/package.json
{
"name": "firmata-led",
"version": "0.0.1",
"private": true,
"dependencies": {
"cylon-firmata": "0.19.0"
},
"scripts": {"start": "node app.js"}
}

npm installでパッケージをインストールします。

$ npm install

Lチカ

Lチカするプログラムを用意します。portgort scan serialで確認した/dev/tty.usbmodem1421を指定します。

~/node_apps/firmata-led/app.js
var Cylon = require('cylon');

Cylon.robot({
connections: {
arduino: { adaptor: 'firmata', port: '/dev/tty.usbmodem1421' }
},

devices: {
led: { driver: 'led', pin: 13 }
},

work: function(my) {
every((1).second(), my.led.toggle);
}
}).start();

npm startでプログラムを実行します。Arduino Unoの13番ピンのLEDがLチカします。

$ npm start

> firmata-led@0.0.1 start /Users/mshimizu/node_apps/firmata-led
> node app.js

I, [2015-03-15T03:19:30.103Z] INFO -- : [Robot 45547] - Initializing connections.
I, [2015-03-15T03:19:30.248Z] INFO -- : [Robot 45547] - Initializing devices.
I, [2015-03-15T03:19:30.249Z] INFO -- : [Robot 45547] - Starting connections.
I, [2015-03-15T03:19:33.513Z] INFO -- : [Robot 45547] - Starting devices.
I, [2015-03-15T03:19:33.514Z] INFO -- : [Robot 45547] - Working.