javascript(node.js)で書かれたarduinoコマンドライン開発環境(avr-pizza + avrgirl-arduino)を試して見ました。

1.前ふり

作者のSuz Hinton氏(@noopkat)は私の娘(@kosamari)の友人でニューヨーク在住です。ハードウエアとWeb技術に精通し,O’raillyのJavaScript Roboticsの共同執筆者です(Chapter.14 Meow Shoes)

Suz Hinton氏Webサイト http://noopkat.com/

昨年10月にMakerFaire New Yorkの出展のため遠征したときに、ご本人にお会いしました。そのときにjavascriptでavr開発環境が制作中であることを聞きました。

avrdudeが使いにくい,修正案を伝えようにもavrdudeの開発形態が複雑怪奇…なので,avrdudeに変わるavrプログラマ(ライタ)を作っています。dude(男)に対してgirl(女子)ということでavrgirlという名にしました。とお茶目です。

avrgirlはarduino.ccのクラウド開発環境にも組み込まれているそうです。

avr-pizza はオンライン・コンパイラのフロントエンドです。オプションの設定によりローカルにインストールされたArduino IDEのコンパイラを利用することも可能です。

avr-pizzaと連動して働くオンライン・コンパイラもSuz氏によりMicrosoft-Azure上に構築されています。(因みに,Suz氏は米マイクロソフト社のエバンジェリスト)

avr-pizza, avrgirl-arduinoはjavascriptライブラリとして提供されており,それぞれに動作を確認するためのコマンドライン・アプリケーションが付属しています。今回は,このコマンドラインアプリを使って見ました。

ざっと使った感じでは,コマンドが非常に簡潔です。avrdudeのような長文呪文を必要としません。

2.環境構築(例:Linux, Mac)
  1. node.js
    avr-pizza,avrgirlはnode.js環境で稼働します。

    1. インストール
      node.jsのインストール方法はwebにたくさんあります。自分の環境に適した方法でインストールします。こちらのnvmを用いた方法は少し手間がかかりますがMac,Linuxに対応しnode.jsのバージョン管理が容易にできます。
    2. 動作テスト
      次のようにコマンド入力してnodeとnpmから応答があれば正しくインストールされています。

      $ node -v
      v6.10.0
      $ npm -v
      3.10.10
  2. avrgirl-arduino(AVRプログラマ・ソフト Arduino用)
    1. インストール
      次のようにコマンド入力しインストールします。

      $ npm install -g avrgirl-arduino
    2. 動作テスト
      次のコマンド入力でヘルプメッセージの応答があれば正しくインストールできています。

      $ avrgirl-arduino help
      Usage:
        avrgirl-arduino flash -f <file> -a <arduino name> [-p <port>] [-v]
        avrgirl-arduino boards
        avrgirl-arduino list
        avrgirl-arduino test-pilot
  3. avr-pizza(コンパイラ フロントエンド)
    1. インストール
      次のようにコマンド入力しインストールします。

      $ npm install -g avr-pizza
    2. 動作テスト
      次のコマンド入力でヘルプメッセージの応答があれば正しくインストールできています。

      $ avr-pizza help
      Usage:
        avrpizza compile -s <sketch filepath> -l <library dirpath> -a <arduino name> [-o <output path> -b <local ide path>]
        avrpizza help

    3. コンパイル(クラウド)
      $ avr-pizza compile -s blink.ino -a uno
      $ ls
      blink.ino     blink.ino.hex

      コンパイルが成功すると.hexファイルが生成されます。

    4. 書き込み
      $ avrgirl-arduino flash -f blink.ino.hex -a uno

      Arduino UNOのシリアルポートは自動識別します

    5. シリアルポートの調べて明示的に指定する
      $ avrgirl-arduino list
      [ { comName: '/dev/cu.Bluetooth-Incoming-Port',
          manufacturer: undefined,
          serialNumber: undefined,
          pnpId: undefined,
          locationId: undefined,
          vendorId: undefined,
          productId: undefined,
          _standardPid: '' },
        { comName: '/dev/cu.usbmodemFD12431',
          manufacturer: 'Arduino (www.arduino.cc)',
          serialNumber: '64131383331351318171',
          pnpId: undefined,
          locationId: '0xfd124300',
          vendorId: '0x2341',
          productId: '0x0043',
          _standardPid: '0x0043' } ]
      
      $ avrgirl-arduino flash -f blink.ino.hex -a uno -p /dev/cu.usbmodemFD12431
    6. Arduinoボード略号リスト
      $ avrgirl-arduino boards
      Supported Boards:
       - adk
       - arduboy
       - blend-micro
       - bqZum
       - duemilanove168
       - feather
       - imuduino
       - leonardo
       - lilypad-usb
       - little-bits
       - mega
       - micro
       - nano
       - pinoccio
       - pro-mini
       - qduino
       - sf-pro-micro
       - tinduino
       - uno
       - yun
    7. コンパイル(ローカル)
      avr-pizzaはローカルのArduino IDEが持っているコンパイラを使うことができます。
      -b に続けてArduino IDEのフォルダpathを指定します。下の例はMacの場合です。

      $ avr-pizza compile -s blink.ino -a uno -b /Applications/Arduino.app/
    4.私はこう使う

    Raspberry PIとArduinoを連携させたシステムの開発に使います。Raspberry PiとArduinoを連携させてゴニョゴニョするときArduinoのスケッチ制作が結構めんどくさいです。パソコンでArduinoのスケッチ作って書き込み、取り外してRPiに接続してテスト、不具合があったらまたArduinoをパソコンにつないでスケッチ修正を繰り返す…そこで、avr-pizza,avrgirlの利用です。RPiとArduinoを接続したまま開発ができます。コマンドライン開発環境はGUIを使わないので軽快に動きます。シリアルコンソールやLAN経由のSSH接続から利用しまます。VNCのリモートGUIより圧倒的に軽快に動きます。

    javascript〜node.jsに精通していれば、Webブラウザーやelectronを使ってavr-pizza,avrgirlライブラリをコアにした自分なりのGUIアプリやWeb上にリモート開発環境が作れます。(私には無理)

    5.ただいま試行中

    avr-pizzaでArduino UNO向けにビルドしたhexを”素”のATmega328Pにavrgirl-ispmkiiを使って書き込む試行をやっています。

    6.リンク
    1. github(top) https://github.com/noopkat
    2. avr-pizza https://github.com/noopkat/avr-pizza
    3. avrgirl https://github.com/noopkat/avrgirl
    4. youtube noopkat https://www.youtube.com/channel/UCoFU24KMXmCi4Sl3KIFPSVg
      プログラミング・ライブ放送の録画