Arduino を Eclipse (Windows 8.1) 上でいじる

# はじめに

Arduino を Eclipse(Windows 8.1) 上でいじるためのチラ裏です。"arduino eclipse" とググればいろいろ出てくるのですが、情報が古かったり、そもそも Eclipse のプラグインが新しいバージョンに対応できていなかったりしていろいろハマりました。危なっかしいですが、こねくり回してなんとか使えるようになったのでメモしておきます。

バージョンが刻々とかわるIDEのセットアップ方法についてのチラ裏なので、数ヶ月も経てばゴミになること必至です。**読まれている日が書かれた日からだいぶ経っていたら「このチラ裏は信用できない」**と思いながら読んでください。

## 前提
現時点(2015/11/14)で最新のリリースである Arduino IDE 1.6.6 と [Arduino eclipse プラグイン v2.2](http://eclipse.baeyens.it/index.html) を利用することを前提とします。OS は Windows 8.1 ですが、Windows 7 でもほぼ同様の手順でいけると思います。Eclipse と Eclipse CDT プラグインは事前にインストールしておいてください。動作確認に Arduino Uno と LED を1つ利用します。

# 手順

## Arduino を PC につなげる
PC につなげる前に、動作確認用に写真のように LED を Arduino に挿しておきます。LEDの足の長いほう(アノード)を13番ピン、足の短いほう(カソード)をGNDに挿します。

![arduino_led.png](https://qiita-image-store.s3.amazonaws.com/0/56859/fd7caf46-ef69-a4a1-b908-2759cb80ee43.png)

その後、Arduino と PC を 付属の USB ケーブルでつなげます。

## Arduino IDE 1.6.6 の Installer をダウンロード
[ここから Arduino IDE をダウンロードします](https://www.arduino.cc/en/Main/Software)。初めて Arduino を触る方は zip 化されたパッケージよりも Installer をダウンロードして、ネイティブなエディタ付き開発環境をインストールして動かしてみるのがおすすめです。Installer はドライバ等もよしなにいれてくれます。Installer でインストールした後は念のためデバイスマネージャーを開いて、写真のように Arduino がシリアルポートでつながっているか確認しましょう。

![device_manager.png](https://qiita-image-store.s3.amazonaws.com/0/56859/5cd0c12a-0238-612e-ddc0-e6d9d654bdf3.png)

写真だと COM3 に Arduino Uno がつながっていることが確認できますが、必ずしも COM3 につながるかはわかりません。ここで確認したポートは後の手順で入力する必要があるので覚えておきましょう。

儀式として、Arduino IDE のネイティブなエディタで以下のソースコードを動かしておきましょう。

```c++
namespace
{
const int LED_PIN = 13;
const int DELAY_MSEC = 1000;
};

void setup()
{
    pinMode(LED_PIN, OUTPUT);
}

void loop()
{
    digitalWrite(LED_PIN, HIGH);
    delay(DELAY_MSEC);
    digitalWrite(LED_PIN, LOW);
    delay(DELAY_MSEC);
}
```

`ctrl+r` でソースをビルド、`ctrl+u` でスケッチを Arduino にアップロードします。Arduino に取り付けた LED が点滅するはずです。次にソースの `DELAY_MSEC` を100にして、再度 `ctrl+r`、`ctrl+u` してみましょう。LEDの点滅の周期が早くなるはずです。以上を確認できれば儀式は終了です。

今のネイティブな IDE のエディタでも十分って人はこのままモノを作ったほうが幸せになれるかもしれませんが、Eclipse でいじりたいって方は引き続きの手順をこなしてください。

## Arduino IDE 1.5.6 beta のパッケージをダウンロード
[Arduino IDE 1.5.6 beta の zip パッケージをダウンロードして](https://www.arduino.cc/en/Main/OldSoftwareReleases#previous)、適当な場所に unzip してください。次に、<適当な場所>/arduino-1.5.6-r2/hardware/tools/avr/utils を \<arduino-1.6.6 インストール先\>/hardware/tools/avr/utils に置いてください。Installer 上で従順にポチポチしていた人は C:/Program Files (x86)/Arduino/hardware/tools/avr/utils に置くことになるはずです。

utils には make 等のおまじないコマンド群が入ってあるのですが、新しいバージョンのIDEには utils が入っていません。なので、古いバージョンの IDE からこれを拝借しています。

<!-- arduino-1.5.6-r2/hardware/tools/avr/utils を arduino-1.6.6/hardware/tools/avr/utils においてください。 -->

## msys-1.0.dll を更新
[ここにあるzip](http://www.madwizard.org/download/electronics/msys-1.0-vista64.zip)をダウンロードして、unzip して手に入る msys-1.0.dll を \<arduino-1.6.6 インストール先\>/hardware/tools/avr/utils/bin/msys-1.0.dll に上書きします。Windows 8.1 を使っている人がこの作業を怠ると、ビルド時に 0x142 というコードのエラーがでます。

参考: http://playground.arduino.cc/Code/Eclipse#OtherIssues

## Eclipse にプラグインを入れる

Eclipse を起動して、メニューの[Help]->[Install new software...]をクリック。でてきたInstallウィンドウ内の Work with: に http://www.baeyens.it/eclipse/V2 と記述して、"Group items by category" のチェックボックスを外すことで、写真のように Arduino eclipse extensions がリストに出現します。

![arduino_plugin_install.png](https://qiita-image-store.s3.amazonaws.com/0/56859/87e2e72d-1366-7868-82e8-681fea3b5c12.png)

これにチェックをつけて、[Next >]をクリックします。適当にポチポチしていき、"I accept the terms of the license agreements"という文言つきのラジオボタンが現れたらチェックをつけて"Finish" ボタンします。すると Arduino を Eclipse で使うためのプラグインがインストールされます。

## Eclipse 上で Arduino を使うための設定

Eclipse のメニューの[Window]->[Preferences]をクリック。でてきたPreferencesウィンドウ左側に[Arduino]があるはずなのでこれをクリック。Private Library path と Private hardware path の入力用に適当にディレクトリを掘ってから写真のように適宜パスを入力してください。

![arduino_preference.png](https://qiita-image-store.s3.amazonaws.com/0/56859/e4310b74-a657-0314-03b8-36269bbbf81a.png)

ここで注意してもらいたいことは、入力するパスにスペースが含まれるとビルド時にエラーが発生することです。Installer のデフォルトのインストール先は C:/Program Files (x86)/Arduino なので、スペースが含まれます。写真ではこれの回避方法として、昔のファイルシステムの名残を利用するために "Program Files (x86)" を "PROGRA~2" と8.3形式で書き直しています。

なお、test RXTX ってボタンを押すとエラーメッセージが表示されますが、rxtxSerial.dll が新しいバージョンの Arduino IDE には入っていないので気にしないでください。というか、RXTX は disable にしているので使われません。

パスの入力が完了したら "OK"ボタンを押します。このとき、Considerations about Arduino IDE compatibility という情報ウィンドウが開きますが、気にせず"はい"を押してください。「plugin が新しいバージョンの Arduino IDE に対応していません」という類の警告文ですが、百も承知です。

## Eclipse 上で Arduino を便利に使うための設定

やっておかないとコーディングと実行のイテレーション効率が落ちるのでやっておきましょう。

### ショートカットの割り当て
Eclipse のメニューの[Window]->[Preferences]をクリック。でてきたPreferencesウィンドウ左側の[General]->[Keys]を選択。リストのCommand欄から、"Build Project"を選択。下部の Binding で `ctrl+r` とキー入力すると写真のようになります。

![arduino_keys.png](https://qiita-image-store.s3.amazonaws.com/0/56859/ab0e18e2-1219-b004-ed3f-1534ae58b883.png)

同じようにリストのCommand欄から、"Upload Sketch"を選択して、`ctrl+u`とキー入力してバインドしておきましょう。これで Arduino IDE のネイティブのエディタと同様に、キーボード入力からビルドとスケッチのアップロードができるようになります。

### ビルド時にソースを自動保存
Eclipse のメニューの[Window]->[Preferences]をクリック。でてきたPreferencesウィンドウ左側の[General]->[Workspace]を選択。写真のように、"Save automatically before build" のチェックボックスにチェックして"OK"ボタンを押す。

![save_automatically.png](https://qiita-image-store.s3.amazonaws.com/0/56859/867f9eb1-070e-e504-8561-616cd064d44c.png)


## 新規プロジェクトを作成
Eclipse のメニューの[File]->[New]->[Project...]をクリック。写真のように"New Arduino sketch"ってのが出てくるので、これを選択して"Next >"ボタンをクリック。
![arduino_new_project.png](https://qiita-image-store.s3.amazonaws.com/0/56859/3f1d3f0c-30a7-594f-d498-5fcd8cf3b842.png)

適当に Project name を入力して"Next >"ボタンをクリック。使っている Arduino の仕様を入力するウィンドウが開くので、写真のように Arduino のボードの種類をリストから選択して、Arduino がつながっているシリアル通信のポートを手打ち入力します。
![arduino_new_project_input.png](https://qiita-image-store.s3.amazonaws.com/0/56859/ac0a5547-a491-f5b3-18c8-5bfa9bc316f3.png)

Board や Port は写真のとおりではなく、自身の利用している Arduino の種類と接続ポートを入力してください。なお前述しましたが、どのポートにつながっているかはデバイスマネージャーから確認できます。入力できたら"Finish"を押して完了。新しいプロジェクトが作成されます。

## プロジェクト内の変数にパスを入力
作成されたプロジェクトのプロパティを開きます。でてきたプロパティウィンドウ左側の[C/C++ Build]->[Environment]を選択。以下の変数を存在しなければ"Add"を押して新規作成、存在していれば"Edit"を押して値を編集します。

| 変数名 | 変数値 | 備考 |
|---|---|---|
| A.TOOLS.BOSSAC.PATH | \${A.RUNTIME.IDE.PATH}/hardware/tools/avr | スケッチのアップロード時に利用。新規で作成する。 |
| A.RUNTIME.TOOLS.AVR-GCC.PATH | \${A.RUNTIME.IDE.PATH}/hardware/tools/avr | コンパイラへのパス。新規で作成する。 |
| A.RECIPE.AR.PATTERN | "\${A.COMPILER.PATH}\${A.COMPILER.AR.CMD}" \${A.COMPILER.AR.FLAGS} \${A.COMPILER.AR.EXTRA_FLAGS} "\${A.BUILD.PATH}/\${A.ARCHIVE_FILE}" "\${A.OBJECT_FILE}" | *.ar の作成に必要。既存なので編集する。 |
| A.RECIPE.AR.PATTERN.1 | "\${A.COMPILER.PATH}\${A.COMPILER.AR.CMD}" \${A.COMPILER.AR.FLAGS} \${A.COMPILER.AR.EXTRA_FLAGS} "\${A.BUILD.PATH}/\${A.ARCHIVE_FILE}" | *.ar の作成に必要。既存なので編集する。 |

入力できたら"OK"を押して完了。

# 動作確認
プロジェクトの中にプロジェクト名と同じ名前の .cpp と .h のファイルができているはずです。この .cpp のファイルに前述した動作確認用のソースコードを .h の include を残しつつコピペします。`ctrl+r`、`ctrl+u` とキー入力すると Arduino に挿していた LED が点滅するはずです。`DELAY_MSEC`を変更して、再度`ctrl+r`、`ctrl+u` とキー入力して点滅周期が変わるのを確認できたら、もう Eclipse (Windows 8.1) 上で Arduino をいじれるようになったといえます。

# おわりに

関数名を打ち込んでいる途中で補間が効けばなあ…誰かやり方知っている人、教えてください。その他の助言、誤記への指摘も歓迎します。