ATmega32U4をMacから使う

ATmega32U4 Mac

ATmega32U4 Mac

ATmega32U4はスイッチサイエンスで販売しているマイコンボードです。このボードをMacOSから使う手順を紹介します。このボードをArduino化して使う方法もあるようですがArduino UNOなどどジャンパー線で接続する必要があるみたいなので、そのまま使う手順を紹介します。

ATmega32U4マイコンボード

このボードはスイッチサイエンスで販売しています。 ATmega32U4 価格も比較的低価格でArduinoのように使うことができるマイコンボードです。最大の特徴はキーボードやマウスとして認識されるデバイスを作れることです。Arduino Leonardでも同じ事ができるらしいのですが、価格がこちらが安いので気軽に使えます。 ただしMac OSから使う場合にはちょっとクセがあります。ここに解説のページがあるのですが、Macユーザにはあまりやさしくありません。というわけで、その手順を紹介します。コードを書くにはArduino IDE(ver. 1.6.5)を使いました。

書き込みソフトウェアの準備

プログラムの書き込みはArduino IDEからは出来ません。terminalから行う必要があります。さらに標準では入っていないコマンドを使うので、そのコマンドをインストールすることから始めます。 「Macへのdfu-programmerのインストールはhome-brewで」こちらの記事が参考になります。 Home-brewを使いdfu-programmerをインストールすることになります。 Home-brewを入れていない場合はこちらを参考にしてインストールしてください。 インストール後はbrewコマンドでdfu-programmerをインストールします。インストールするためのコマンドは次のようになります。 $ brew install dfu-programmer コードを入力してreturnキーを押すとコマンドが実行されます。なんか色々と表示されますが、インストール完了したっぽいメッセージが表示されればインストール完了です。

サンプルプログラムを書き込む

マイコンボードに書き込むサンプルプログラムをスイッチサイエンスのサイトからダウンロードします。サンプルプログラムはこちら(http://trac.switch-science.com/wiki/32u4bb)のページにあります。このページの「お試しファームウェア」というところにリンクがあります。そのページを開くとhexファイルの中身が表示されます。ページの一番下に「Original Format」というリンクがあるのでそこからhexファイルをダウンロードします。ダウンロードしたhexファイルを適当なフォルダに入れます。 ターミナルでそのフォルダに移動します。例えばデスクトップにHelloArduino.hexを保存したのであれば $cd これで自分のホームディレクトリに移動します。Finderで見ると家のアイコンのフォルダの事です。

スクリーンショット 2016-07-04 7.00.50

私の場合は上図のmkbtmというフォルダ(ディレクトリ)。 $cd Desktop「リターン」 でDesktopに移動します。 $ls でファイル一覧を表示します。先ほどダウンロードしたHelloArduino.hexが表示されているはずです。 最初にATmega32U4に書き込まれているプログラムを消去します。USBケーブルで接続します。すでに文字を出力するプログラムが書き込まれているとターミナルの画面に勝手に文字が表示されてしまいます。その時にはボード上のリセットキーを押します。リセットボタンを押すと一定時間ボードが停止します。そのすきにプログラムを書き込みます。 次のコマンドで現在書き込まれているプログラムを消去します。 $dfu-programmer atmega32u4 erase 消去に成功するとそれらしいメッセージが表示されます。エラーが起きるとERRORとか表示されます。protectがどうのこうのと表示されたらforceオプションをつけて消去します。 $dfu-programmer atmega32u4 erase –force 消去後に新しいプログラムを入れる事ができます。 $dfu-programmer atmega32u4 flash HelloArduino.hex でプログラムを書き込む事ができます。1秒ごとに文字列が入力されます。

Arduino IDEで自分のコードを入力する

次にコードをArduino IDEで作りコンパイルして自分独自のプログラムを書き込んでみます。 とりあえず以下のようなコードを書きます。 スクリーンショット 2016-07-04 7.15.16 スイッチサイエンスのサンプルとして載っているものとほぼ同じです。違いがわかるように出力される文字の最後に「?」をつけてみました。ボードの種類はArduino Leonardにしておきます。他でも良いのかも? スクリーンショット 2016-07-04 7.16.58 Arduino IDEの検証ボタンをクリックしてコンパイルします。これでhexファイルが作られたのですがファイルの場所が非常にわかりにくいです。私の環境では次の場所になりました。 /private/var/folders/hp/hzg1s7hn1lv5l4yvxj3mlh380000gn/T/build861154714147673710.tmp/ 途中の英数字を羅列したようなフォルダ名は何の事かわかりません。人によって違うものかもしれません。とりえず上記のフォルダに移動します。 $cd /private/var/folders/hp/hzg1s7hn1lv5l4yvxj3mlh380000gn/T/build676234921307526154.tmp/ $ls でファイル一覧を表示させてみましょう。つぎのような画面になると思います。 スクリーンショット 2016-07-04 7.27.06 ATmega32U4test.cpp.hexが目的のファイルです。Arduino IDEでの保存名+.cpp+.hexというファイル名になります。 $ dfu-programmer atmega32u4 flash ATmega32U4test.cpp.hex で書き込みます。書き込んだ後は一度USBケーブルを抜いて挿し直す必要があるようです。 ちなみにキーボードのカーソルキーと同じ動きをするためには次のようなコードになります。カーソルキーの上と下に相当するキーコードをボードから送信しています。

[c language="++"]
const int button1 = 1;
const int button2 = 2;

int bs1 = 0;
int bs2 = 0;
void setup() {
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
}

void loop() {
bs1 = digitalRead(button1);
bs2 = digitalRead(button2);

if (bs1 == LOW) {
Keyboard.write(KEY_UP_ARROW);
}
if (bs2 == LOW) {
Keyboard.write(KEY_DOWN_ARROW);
}

delay(100);
}
[/c]

ピン番号

ピンの対応はこちらに載っています。 デジタル入出力Pinだけ抜き出すと
 ArduinoのPin番号 ATmega32U4のボード上の番号
 1                D2
 2                D3
 3                D1
 4                D4
 5                C6
 6                D7
 7                E6
 8                B4
 9                B5
 10               B6
 11               B7
 12               D6
 13               C7

スイッチサイエンスの商品説明ページにはシルク印刷が間違っているとの記述がありますが、現在は直っているようです。内部にプルアップ抵抗が入っているのでINPUT_PULLUPを指定すると外部に抵抗をつける必要がありません。スイッチをつけてGNDに落としてあげましょう。