[2015.11.8更新]この記事は古いです!
Macへのdfu-programmerのインストールはhomebrewで
を参照ください。
どんなときに使う?
ずいぶん前に、こんなん作りました。
これは、中にArduino UNO R3が入っていて、USB経由でMacのDAW (Ableton Live)と連携しています。
いわゆる、USB MIDI フィジコンってやつです。
MIDIにするファームはmorecatlabさんが配布してる「Moco for LUFA」というものを使わせていただいたのですが、このファームはArduinoに搭載されているATmega328Pじゃない方のICに書き込むためのものです。
Arduino UNOにはATmega328Pとは別にもう1つ、USBシリアル用にATmega8U2 (UNO Rev.3では16U2)というICが搭載されていて、このICのファームを書き換えることで、上記のようなUSB MIDIなどUSBシリアル以外のUSB機器に変更することができます。
やりかたは、下記サイトを参考にしました。
『Moco For LUFA』Dm9 Recordsさん
『iPadとArduino Unoを接続する(2)』SOMTDさん
上記サイトを見れば判りますが、Macだとdfu-programmerというコマンドラインツールを使って、この操作を行います。
しかし、これが使えるようになるまで大変でした。(私だけ?)
今回はdfu-programmerをなんとかする、という記事です。
なにが問題?
dfu-programmerはMacPortsで入れられます。
sudo port install dfu-programmer
3/16現在、これで0.5.4が入ります。
しかし、0.5.4では ATmega16U2を認識してくれない のです。
つまり、Arduino UNO Rev.3では使えないようです。
一応、試したMacは下記2つです。
- Macbook Air 2013 (OSX 10.8.5)
- Macbook Air 2013 (OSX 10.9.1)
どちらも同じでした。
動いたのはVersion 0.6.1
というわけで、いろいろ試行錯誤しました。
結論から言うとVer.0.6.0、0.6.1、0.6.2 の3つを試しましたが、UNO Rev.3で使えたのは、 0.6.1だけ でした。
これはあくまで私が試した結果なので、他の人は違う結果になるかもです。
ビルドが大変
Arduino IDEやXCode、XCodeのコマンドラインツールがインストールされている前提で、さらに下記が必要です。
- dfu-programmer Version 0.6.1 ソース
- libusb ※macportsでも入れられます。
dfu-programmerのソースを展開したら、
./configure
と入力したあと、
make
を実行します。
すると、 エラーが沢山でます w
基本的には、下記のようにして 気合で 直します。
- 「libusb関連のヘッダファイルが見つからねー」と怒られるので、エラーが出たソースファイルの#include宣言を片っ端から修正する
例:
#include <libusb.h>
↓
#include "/opt/local/include/libusb-1.0/libusb.h"
dfu.cだけでなくて、エラーが出た数だけいっぱい直します。
※libusbを入れたpathに合わせて修正してください。
※環境変数とか、なんとかすれば、なんとかなりそうなのですが、よくわからないので、原始人(primitive)的方法でごりごり進みました。
- makefileでもライブラリがねーからリンクできねー的なエラーが出るので、ライブラリを指定する
LIBS = -L/usr/lib
↓
LIBS = /opt/local/lib/libusb-1.0.dylib
※強引。。。
これでなんとか通りましたが。。。
大変なので置いとく
私もその一人なのですが、正直Arduinoって初心者向けで、ビルドとか開発環境構築とかは、あまりやりたくない人も使ってると思います。
**作りたいのは作品であって、環境ではない!**w
というわけで、 自分自身2度とdfu-programmerをビルドできなくなってる感じがする ので、自分のためのbin を置いておきます。
※このbinは無保証です。自分のMacでしか動作確認していません。使った人に何がおこっても私は責任がとれませんので、自己責任で使ってください。
pathを忘れずに
binが出来ても、pathが通ってないと実行してくれません。
Pathの通し方は、下記を見てください。
私は面倒くさがって、 最初からPathが通ってる場所に放り込む という邪道な方法で運用しています。
まねしないようにお願いしますw
良いやり方があったら教えてください
というわけで、Arduino UNO R3みんな使ってるはずなのに、どうしてるの?こんなに面倒なことしてるの?マジで?
と思うのが正直なところで、もっと良い方法を知ってる方がいらっしゃいましたら教えてほしいです。
よろしくお願いします。