[[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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc