[[Arduino勉強会]] #contents 2014/07/06からのアクセス回数 &counter; ** 動機 [#y03b5430] Arduino勉強会では、目の不自由な方も参加されており、コマンドラインからの コンパイルとアップロードができるようにしたいのとの要望がありました。 調べたところ、Arduinoにコマンドラインでプログラム、書込ができるinoが 以下のサイトに見つかりました。 - http://inotool.org/ *** inoに必要なもの [#s158fc1f] 最新のinoのバージョンは、0.3.6で、 GitHubで公開されており、pythonのeasy_installを使って簡単にインストール することができます。 inoを使うのに必要なものは、以下の3つです。 - Python 2.6以降 - Arduino IDE - picocom (シリアル通信ソフト) 現在inoがサポートしているOSは、以下の2つです。 - Linux - MacOSX ** MacPortsを使ってMacOSXにInoをインストール [#w4f47eed] 私は、MacPortsを使って必要なソフトをインストールしています。 ((以下では、Arduino IDEとドライバーが動いているとして説明します。)) MacPortsを使わない場合には、以下のサイトを参考にしてください。 - [[ino使うとCUIでArduinoをビルドできて便利>http://shokai.org/blog/archives/7454]] MacPortsの開発には、アップルの提供しているXCodeが必要です。 以下のサイトからMacPortsの最新をダウンロードしてインストールしてください。 - http://www.macports.org/ Xcodeのインストールは、MacApp Storeからダウンロードしてください。 - [[Xcode>https://itunes.apple.com/us/app/xcode/id497799835]] コマンドラインツールのインストールには、Xcodeの - Xcode-> Open DeveloperTool -> More Developer Tools… を選択 - Auxiliary Tools for Xcodeを選択し、Downloads for Apple Developerページが開くのでそこのリストから”Command Line Tools(OS X Mavericks) for Xcode”をダウンロードしてインストールしてください *** Python2.7のインストール [#r578e4ed] 以下の作業は、アプリケーション/ユーティリティ/ターミナルを使って行います。 Pythonは、いろいろなバージョンが使われており、ここでは古いですが安定した python2.7を使います。 #pre{{ $ sudo port install python27 }} *** picocomのインストール [#wfa285bc] 同様にpicocomをインストールします。 #pre{{ $ sudo port install picocom }} *** inoのインストール [#if8a4708] inoのインストールは、easy_installを使って行います。python2.7用の easy_install-2.7で以下の様にインストールします。 $pre{{ $ sudo /opt/local/bin/easy_install-2.7 ino }} ** inoの使い方 [#j79b273e] *** プロジェクトの作成 [#qf947471] 新しいスケッチを作成するために、プロジェクト用のディレクトリを作成し、 テンプレートからスケッチのひな形を作成します。 用意されているテンプレートは、以下の2つです。 - blink : Basic01のBlinkと同じスケッチがひな形として作成されます。 - empty : 空のsetupとloopが作成されます。 早速プロジェクトをつくってみましょう。 #pre{{ $ mkdir test $ cd test $ ino init -t blink }} blinkテンプレートを使ってinoのinitコマンドを実行すると 以下の様にsrc, libのディレクトリが作成され、srcの下にsketch.inoファイル が作成されます。 #pre{{ $ ls -R libsrc ./lib: ./src: sketch.ino }} sketch.inoの中身は、以下の様になっています。 #pre{{ $ cat src/sketch.ino #define LED_PIN 13 void setup() { pinMode(LED_PIN, OUTPUT); } void loop() { digitalWrite(LED_PIN, HIGH); delay(100); digitalWrite(LED_PIN, LOW); delay(900); } }} *** スケッチのビルド [#f49f5b06] Arduino IDEでも最初にすることは、ボードの選択ですが、inoでも 同様です。 inoのデフォルトボードは、unoですが、それ以外のボードを使う場合 には、list-modelsコマンドで使用するボードに対応するモデル名を確認します。 #pre{{ $ ino list-models Searching for Board description file (boards.txt) ... /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/boards.txt uno: [DEFAULT] Arduino Uno atmega328: Arduino Duemilanove w/ ATmega328 diecimila: Arduino Diecimila or Duemilanove w/ ATmega168 nano328: Arduino Nano w/ ATmega328 nano: Arduino Nano w/ ATmega168 mega2560: Arduino Mega 2560 or Mega ADK mega: Arduino Mega (ATmega1280) leonardo: Arduino Leonardo esplora: Arduino Esplora micro: Arduino Micro mini328: Arduino Mini w/ ATmega328 mini: Arduino Mini w/ ATmega168 ethernet: Arduino Ethernet fio: Arduino Fio bt328: Arduino BT w/ ATmega328 bt: Arduino BT w/ ATmega168 LilyPadUSB: LilyPad Arduino USB lilypad328: LilyPad Arduino w/ ATmega328 lilypad: LilyPad Arduino w/ ATmega168 pro5v328: Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328 pro5v: Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega168 pro328: Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328 pro: Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168 atmega168: Arduino NG or older w/ ATmega168 atmega8: Arduino NG or older w/ ATmega8 robotControl: Arduino Robot Control robotMotor: Arduino Robot Motor }} 私は、Arduino Duemilanoveを使っているので、atmega328がボード を表すモデル名となります。 以下のコマンドでビルドを実行します。 #pre{{ $ ino build -m atmega328 Searching for Board description file (boards.txt) ... /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/boards.txt 途中省略 arduino/WString.cpp Linking libarduino.a Linking firmware.elf Converting to firmware.hex }} エラーも無くビルドが終了しました。 しかし、lsコマンドでみても何も変わったものはありません。 #pre{{ $ ls lib src }} ビルドコマンド作成されたファイルは、見えないディレクトリ.build/モデル名/以下のあります。 #pre{{ $ ls .build/atmega328/ Makefile Makefile.sketch firmware.elf src Makefile.deps arduino firmware.hex }} Arduinoに書き込むのは、firmware.hexファイルです。 *** スケッチの書き込み [#sd268953] スケッチの書込には、uploadコマンドを使います。 #pre{{ $ ino upload -m atmega328 Searching for stty ... /bin/stty 途中省略 Writing | ################################################## | 100% 0.56s avrdude: 1076 bytes of flash written avrdude: verifying flash memory against .build/atmega328/firmware.hex: avrdude: load data flash data from input file .build/atmega328/firmware.hex: avrdude: input file .build/atmega328/firmware.hex contains 1076 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.46s avrdude: verifying ... avrdude: 1076 bytes of flash verified avrdude: safemode: Fuses OK avrdude done. Thank you. }} 無事書き込みが終了すると、ボードのLEDが点滅します。 *** 設定ファイル [#w52d46c5] buildやupload時にモデル名を設定するのは面倒です。 プロジェクトファイルにino.ini、あるいはホームディレクトリに~/.inorcを作成し、 以下のようにモデル名やシリアルポートをセットすることができます。 #pre{{ $ cat ino.ini [build] board-model = atmega328 [upload] board-model = atmega328 serial-port = /dev/tty.usbserial-A7006T8Y [serial] serial-port = /dev/tty.usbserial-A7006T8Y }} これで、単にbuild, uploadとコマンドを入力するだけで済みます。 #pre{{ $ ino build }} *** シリアル通信 [#p446859d] inoでは、Arduino IDEのシリアルモニターの代わりにserialコマンドが用意されています。 Quick startに習って、スケッチを以下の様に変更します。 #pre{{ $ cat src/sketch.ino void setup() { Serial.begin(9600); } void loop() { Serial.println(millis()); delay(1000); } }} ビルドして、serialコマンドを実行すると以下の様に出力されます。 途中で止める時には、Ctrl-A, Ctrl-Xを入力します。 #pre{{ $ ino build 出力省略 $ ino upload 出力省略 $ ino serial Searching for Serial monitor (picocom) ... /opt/local/bin/picocom picocom v1.7 port is : /dev/tty.usbserial-A7006T8Y flowcontrol : none baudrate is : 9600 parity is : none databits are : 8 escape is : C-a local echo is : no noinit is : no noreset is : no nolock is : yes send_cmd is : sz -vv receive_cmd is : rz -vv imap is : omap is : emap is : crcrlf,delbs, Terminal ready 0 999 1999 3000 4000 5000 ここで、Ctrl-A Ctrl-Xを入力して停止 Thanks for using picocom }} ** コメント [#r80ec190] #vote(おもしろかった[0],そうでもない[0],わかりずらい[1]) #vote(おもしろかった[1],そうでもない[0],わかりずらい[1]) 皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。 スパム防止に画像の文字列も入力してください。 - ino.iniの定義でuploadのserial-port設定が間違っていました。 -- [[竹本 浩]] &new{2014-07-25 (金) 11:14:27}; #comment_kcaptcha