USB ホストシールドは、Arduino に各種USB デバイスを接続することができるシールドです。
今月行われた Google I/O 2011 にて発表された Android Open Accessory Development Kit (ADK) のリファレンスボードが、Arduino + USB Host Shield と同等の構成だったことから、注目度が急上昇しています。
(ADK 対応デバイス (Android 3.1 or 2.3.4以上) を持っていないので、そちらの話題は当面扱いません。)
Sparkfun 製の同等品が、日本でも簡単に入手できます。(→千石電商、SwitchScience)
私は大分前に買ったのですが、、、そのまま手つかずにしていました。
USB のクラスライブリに相当するものが整っておらず、使い方が分からなかったためです。
複数のサイトを参考にする場合は要注意です。
新しいものは、開発者のサイトのライブラリがそのまま使えます。
(#define MAX_GPX 7、#define MAX_RESET 8 に変更する、とある場合は古い版です。 7, 8 ピンが入れ替わっているだけなので、私は基板の配線を新しい方に合わせて修正しました。)
ここ (GitHuB)からライブラリのダウンロード
(私がダウンロードしたのは felis-USB_Host_Shield-a59ba5b.zip という名前でした。)
解凍して、フォルダ丸ごと ~/Documents/Arduino/libraries へコピー
(そのままの名前だと記号を含むためエラーになるので、フォルダ名をUSBHost にしました。)
Arduino IDE を再起動して、インストール完了
darran さんのUSB Keyboard Passthrough をやってみます。
USB ホストとして、キーボードの入力を受け取り、前回紹介した atmega8u2を HID キーボード化したArduino Uno を使って、USB キーボードとしてPC に送り出します。
kbd_usb_passthrough.pde をArduino IDE で開きます。
コンパイルするとError になりました。
'EP_RECORD' does not name a type
など、いろいろ言われる場合 ('MAX3421E' does not name a type, 'USB' dose not name a type) は、上記ライブラリがインストールできていません。
ライブラリの場所(Arduino フォルダの libraries の中)、名前(記号を含まない) を確認してください。ライブラリの読み込みには Arduino IDE の再起動が必要です。
kbd_usb_passthrough.cpp:2:17: error: Spi.h: No such file or directory
#include <spi.h> でerror になる場合は、この行をコメントアウトします。
(現在のライブラリで、この記述は不要です。→根拠はこちら)
コンパイルができればあとは通常通り、Arduino Uno に Upload をします。
その後、前回同様、DFU モードでatmega 8u2 にArduino-keyboard-0.3.hex を書き込みます。
後はUSB ホストシールドを載せて、USB キーボードを接続、Arduino Uno をキーボードとしてPC に接続すれば、完了です。
(キーボードの実験をするときは、事前にテキストエディタなどを開いておいた方がよいでしょう。暴走して勝手に入力されると困るので。)
これで完成、、、と思ったのですが、私はうまく行きませんでした。
いろいろ試したのですが、「キーボードが悪い」という結論に達しました。
使っていたキーボードは USB ハブを内蔵していたため、複合デバイスになっているのだと思います。このプログラムでは、プレーンなUSB HID キーボードしか認識できません。
他のキーボードもトラックパッド内蔵だったりしたため、押し入れを引っくり返してようやく普通のキーボードを発見。動作確認ができました。
それでも上手く行かない場合は Examples に入っている board_test.pde を実行してみましょう。何かわかるかもしれません。(こちらに手順を書きました)
私の場合、Uno では動作しましたが、クロックの精度が必要なためか、eJackino (セラロック仕様) ではNG でした。(こちら にClock を確認するように、とあります。)
また、Arduino をUSB バスパワーで動作させていると、シールドへ給電する Vin の電圧が低くなり、結果的にUSB Host シールド上のUSB ポートから出力される電圧(Vbas) が低くなってしまいます。
0 件のコメント:
コメントを投稿