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起動スクリプトの実行が追加されました。
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に必要なパッケージを定義します。
{
"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チカするプログラムを用意します。port
はgort scan serial
で確認した/dev/tty.usbmodem1421
を指定します。
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.