http://32bits.io/Arturo/ を使うといいっぽい。ino というコマンドがあったがメンテされてないので ano というフォークができたらしい。
使いかた
$ ano init
すると新規プロジェクトができる。
既存プロジェクトの場合、.ino ファイルは src ディレクトリ以下に入っている必要がある。
$ ano list-models yun: Arduino Yún uno: [DEFAULT] Arduino Uno diecimila: Arduino Duemilanove or Diecimila nano: Arduino Nano mega: Arduino Mega or Mega 2560 megaADK: Arduino Mega ADK leonardo: Arduino Leonardo micro: Arduino Micro esplora: Arduino Esplora mini: Arduino Mini ethernet: Arduino Ethernet fio: Arduino Fio bt: Arduino BT LilyPadUSB: LilyPad Arduino USB lilypad: LilyPad Arduino pro: Arduino Pro or Pro Mini atmegang: Arduino NG or older robotControl: Arduino Robot Control robotMotor: Arduino Robot Motor gemma: Arduino Gemma
で対応モデル名が出る。
nano 向けにビルドするにはオプションをつける。
$ ano build -m nano --cpu atmega328
アップロード(書きこみ)する場合は build を upload に変えて、-p でシリアルポートへのパスを指定する。ポート指定をつけないと勝手に推測して書きこもうとするが、意図せず違うデバイスに書きこむのを避けるためにも絶対に指定したほうが良い。
.ino とかやめたい場合
.ino はほぼ cpp だが include とかがないというなんか中途半端な状態のファイル型式になっている。
ano preproc src/sketch.ino をすると cpp の完全な形で吐いてくれるので、これを src/sketch.cpp として保存して .ino を消しさっても問題なくビルドできる。
ビルドプロセス
ちなみにおおまかなビルドプロセスは https://www.arduino.cc/en/Hacking/BuildProcess に書いてある
Arduino IDE はヘッダファイルなどのパスを解決しつつ .ino を .cpp に変換(ちょっと足すだけ)して avr-gcc している。
setup() と loop() の定義:
Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h
HIGH とか LOW とか定数定義マクロもここに書いてある。
型のエイリアスもここで定義してある。
実際に実行している場所
Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/main.cpp
よくある main ループ。