AmazonでArduinoを購入するときによく見かけていて気になっていたのが、超小型のマイコンボードHiLetgoのDigispark Kickstarter (互換機)です。切手くらいの大きさでATtiny85という小型AVRを搭載しています。調べてみるとキーボードなどのUSBデバイスになるとのことなのでつい購入してしまいました。
2個で税抜き¥650でした。安いですねぇ。
見ての通りUSBポートに直に挿せる形状になっています。こんなに小さくて安いのにUSBキーボードやマウス、ジョイスティックなどにすることが出来るすぐれものです。
ただし使用できるピンは6本で、USB機能を使うと4本しか使うことが出来ません。メモリは8Kbyteでブートローダー部分を除くと6Kbyteしか使えず、あまり複雑なことは出来ないようです。
Arduino IDEのボードマネージャでDigistump社のパッケージを追加すると、普通にArduinoとして開発できます。こちらのサイトで詳しく説明してくださっているので参考にするといいでしょう。Ubuntuで開発するときはこちらのサイトも確認しておきましょう。
ボードマネージャを追加するとスケッチのサンプルがたくさん登録されます。中にはWiiのヌンチャクコントローラーのサンプルなどもありました。ただ、このボードは5V動作なので3.3V動作のヌンチャクコントローラーを使うには電圧を変換する必要があり、まだ試してはいません。
さっそくこのボードを使ってみたいところですが、単体では出来ることが限られてしまうので何に使うか悩みました。そこでふと他のArduinoと組み合わせて利用すれば色々なことに活用出来るのではないかと思いつきました。Digisparkで出来ない部分を他のAVRで補ってやるわけです。
どうせ組み合わせるならUSBを持っていないこのボードにしてみましょう。
以前も利用したArduino Pro Miniです。これは3個¥1,050です。安いです。
何を作るかですが、まずは簡単に作れそうなUSBゲームパッドにしてみることにしました。Pro Miniにゲームパッドを接続して、押されたボタンの情報をDigisparkに送信しゲームパッドとして振る舞ってもらうようにします。通信方法は色々ありますが、勉強を兼ねて今まであまり活用していなかったI2C通信を使ってみます。
使用するゲームパッドはハードオフで¥100で買った、ファミコン互換機のものにしました。
トリガーボタンが4つあるように見えますが、上2つは連射ボタンです。使用するピンは電源以外に3つなのでDigisparkにつなぐことは出来ますが、パッドデータの読み取りルーチンなどを含めるとスケッチの書き込みメモリが少なくなり後で機能拡張するのが難しくなるので、パッドの処理を別マイコンに任せるのは良いソリューションかもしれません。
それではスケッチを作成してみます。
Digisparkのゲームパッドのスケッチはライブラリヘッダーやスケッチサンプルを見ながら、Pro Miniのスケッチは以前作成したNESパッド用のスケッチを元にして書いてみました。最終的に出来上がったスケッチはこちらです。
Digispark Attiny85JoypadServer.ino
Pro Mini Attiny85JoypadClient.ino
スケッチの書き込み手順は2つとも全く異なるので、Arduino IDEの設定を間違えないように気を付けながら作業しましょう。
2つのボードの接続はVCCとGNDをつなぎ、Digisparkの0ピンとPro MiniのA4/18ピン(SDA)、2ピンとA5/19ピン(SCL)をつなぎます。Pro MiniのI2Cは通常の位置と異なりAVRの近くにあるピンホールです。ヘッダピンも逆さに付けなければならないので使いにくいですね。
NESパッドとPro Miniは以下のように接続しました。
パッド → Pro Miniピン
2 DATA → 9
3 LATCH → 8
4 CLOCK → 7
6 5V → VCC
8 GND → GND
Digisparkのジョイスティックライブラリは、使用するとアナログ6軸と16個のボタンの付いたスティックとなるようです。それぞれの軸の設定値は1バイトなので0〜255まで変化し、軸の中心の値は127(128でもOKでした)のようです。ボタンのオンオフは1ビットで設定され、全部で16ビットとなり2バイトの数値で設定します。
これらの設定値全てで8バイトとなるので、DigisparkからPro Miniへ8バイトのジョイスティックデータを要求し、受け取ったらその値をジョイスティックライブラリを使って設定します。
Pro Miniの方はゲームパッドの状態をDigisparkのジョイスティックライブラリで扱う8バイト形式にして保存しておき、I2Cで送信要求が来たら保存してあるデータをそのまま送信します。
今回はNESパッドの左右をX軸、上下をY軸、ボタンを1〜4番に割り当てました。動作確認はいつものようにRetroPieで行いましたが、全く問題ありませんでいた。ただ、Arduino Pro Microなどと比べるとPCにゲームパッドが認識されるまで少し時間がかかるような気がします。
今回の利用方式でいいのは、Digisparkの方はそのままでPro Miniのボードをつなぎ替えるだけで色々なタイプのゲームパッドを使える点ですね。
USBシリアル搭載のPro Micro互換機は千円くらいするので、1つのボードをスケッチ書き換で種類の異なる複数のゲームパッドから利用していましたが、Pro Miniは1つ300円ほどなのでゲームパッドごとに専用のボードを割り当てても惜しくないですね。
DigisparkとPro Miniを合わせても600円ちょっとなので、Pro Microより安上がりです。スケッチ書き込みの手軽さはPro Microに負けますが、Arduinoになれてきたらこちらの組み合わせで使用するほうが柔軟性のあるデバイスが作れていいかもしれません。
※コメント投稿者のブログIDはブログ作成者のみに通知されます