ばかおもちゃ本店:Youtube twitter:@sashimizakana Amazon.co.jpアソシエイト

2014年7月21日月曜日

Adafruit Trinketを使ってHID(キーボード)を作る



AdafruitのTrinketというArduino互換機を買った。


ごらんのとおりとっても小さいマイコンボードで値段も国内で買っても¥1,000と手頃だ。これを使ってHIDのキーボードを作ってみたというのが今回の動画だ。

HIDっていうのは噛み砕いて言えば、普通のキーボードやマウスとして使えるUSBデバイスの規格のことである。これに準拠していれば、ドライバとか無くても、普通のキーボードやマウスにつないだときみたいにそのまま利用することができる。

もっともその規格に合わせるためには守らないことも多くて、汎用的な目的に使うのでなければ、USB仮想シリアルドライバを入れて、それと通信して動くようなソフトを書く方がたいていの場合容易だ。ただ、Trinketにはv-usbというAVR用の仮想USBソフトを利用して作られた、簡単にHIDを作るためのライブラリがAdafruitから配布されている。
そのため、コード自体は数行で今回の物を作ることができた。
しかしTrinketは完全にArduinoと互換があるわけじゃなかったりして、前段階でちょっと悩むこともあったので、そのあたりをまとめておく。

Trinketまずはじめに

公式の原文を読めば分かることしか書いてないので、ちゃんとしたものが読みたい人は以下のリンクの内容を読めば良い。実際の所私もここを読んだだけである。

Introduction | Introducing Trinket | Adafruit Learning System

以下の説明はすべてWindows 7環境下で構築される前提で書いた。

Triketには3.3V版と5V版がある。
3.3Vのほうが消費電力が低いが、動作速度の最大値も低い。
HIDを作る場合、USBの処理にそれなりの速度が必要になるため、5V版が必須になる。
ちなみに3.3Vと5Vで値段は変わらない。
接続にはUSBミニBコネクタで接続できるケーブルが必要だ。マイクロBではない。ミニBである。携帯とかについてる薄い奴よりもうちょっと背が高い奴だ。

またTrinketはデバッグ用のシリアルポートを持っていないので、そのままシリアルモニタは使えない。それから書き込みなんかもAVR書き込み用のドライバを入れる必要があり、その後Arduino IDEを書き換えるか、Adafruitが既に書き換えたものを利用する必要がある。

Trinketのドライバと接続

このページと次のページにだいたい書いてあるとおり。


まずAVRの書き込み用ドライバを入れる。以下のページにまとまっている。


この状態でまずUSBケーブルでPCと接続してみる。失敗したと出たなら失敗である。
私もここで一番長いこと時間がかかった。なぜか知らないが、TrinketはPCとの接続周りがわりと繊細っぽい。海外のフォーラムでは普通に接続したら認識されなかったが、セルフパワーのハブに刺したらちゃんと動いたとかいう書き込みもあった。ちなみに私は逆で、普段利用しているセルフパワーのハブに刺した場合は動かなかったが、PCに直接接続したら動いた。関係ないUSB機器を全部外したりしてみたので、電力が足りないとかではないと思うのだが謎である。

とにかくハブを入れたり抜いたり、他のポートに変えたりしてみると良い。
接続して表面のケーブル右のLEDがチカーンチカーンって感じで光ったら成功のはずである。

ちなみに一個のポートでHIDに使えて、書き込みも使うためだと思うが、Trinketにプログラムを書き込めるのはこのチカーンチカーンってなっている間(10秒間?)だけである。うっかりチカーンが終わるとケーブルを引っこ抜くか、基板上のリセットボタンを押して再起動する必要がある。
私はケーブル抜き差しでやったが、HID作ってそのままプログラムを書き換えたいときは、リセットピンを引っ張ってきて、作品の外側からリセット出来るように作った方が便利かも知れない。

Trinketの開発環境

TrinketをArduino IDEで使うためにはいくつかの変更が必要になる。
といってもスケッチブックフォルダにハードウェアの設定をダウンロードして入れたり、avrdude.confを差し替えたり、Idリンカーを差し替えたりする程度だが面倒なので説明しない。現状既にIDEに色々複雑な設定なんかを突っ込んだりしてない限りは、単純にAdafruitが配布してるカスタム版のIDEをダウンロードすれば良いと思う。
リンクは以下。


ダウンロードしたら、書き込み時には以下の設定を行う。

ツール>マイコンボード>Adafruit Trinket 16MHz(HID作るなら16MHzにする)
ツール>書込装置>USBtinyISP

これでとりあえず何も無いスケッチを作って検証してみてエラーが出なければ問題ない。
マイコンボードが無いとかいう場合はどっかで何かを間違えてる。

HIDをつくる

この辺読みなせえ。

ライブラリは以下のページからダウンロードする。


んで、解凍したらフォルダを丸ごとスケッチブックフォルダのlibrariesに放り込めば良い。
一緒に出てくる圧縮ファイルはたぶん前のバージョンをzipにして置いてあるだけっぽいので要らないと思う。必要なのはフォルダだけである。

スケッチブックフォルダが分からない場合、

ファイル>環境設定>スケッチブックの保存場所

で確認できる。スケッチブックのフォルダはプログラム置いたり、ユーザー設定のコアの設定ファイルを置いたり、ライブラリ置いたりと、ユーザー側で作ったものとか第三者から配布されたものとかはここに入る感じっぽい。

コードに関しては説明するまでも無いので、上のリンクの続きを読んでほしい。

その他

なんか書き込むときにすげーエラー出たけど、以下のリンクの対処で行けた。


(Arduinoのフォルダ)\hardware\tools\avr\etc\avrdude.confのATiny85の設定箇所(コメントアウトしてATiny85って書いてあるパート以下)のchip_erase_delayを以下のように変更する。

chip_erase_delay = 900000;
chip_erase_delay = 400000;

今確認した限りだと10896行目だったけど、他に変更してたりとか、バージョンによって違うかもしれないので良く確認して変更すべき。

他にも上記ページには問題の対処とかあるので、何か分からないなら読めばいいかも。

あと「システムに接続されたデバイスが機能していません」というエラーが出るけど書き込みが出来てれば問題ない(公式のフォーラムでの回答)らしい。

おわりに


USB接続するだけでキーボード代わりに出来るなら夢が広がりんぐ!
動画編集とか画像編集みたいなショートカット山ほど使う作業で、自分用の専用操作卓を作ったり、ショートカットを登録できるフリーソフトと連携させてボタン一発で生放送開始みたいなことやったり。私はとりあえずボタン一個でパスワード管理ソフトのマスターパスワードをタイプするようにしてみた。
セキュリティ的に良くはないだろうけど、物理的に侵入されない限りは安全なので割と大丈夫なんじゃないかという気もする。
ただ普通にPC落として、接続したまま再起動すると認識に失敗して動作しなかったりするので、もうちょっと研究しないと実用は難しいかなという感じ。あるいは直接AVRで作っちゃった方が安定するかもしれない。


Trinket自体はスイッチサイエンスから買った。



Amazonベーシック USB2.0ケーブル 1.8m (タイプAオス- ミニタイプBオス)
AmazonBasics (2009-11-18)
売り上げランキング: 464

HIDに使うならUSBケーブルは長めのが取り回しが良いかも。