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 ループ。