LoginSignup
5
4

More than 5 years have passed since last update.

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

Posted at

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.
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4