で、結局どうするか?
できるだけ安価な実装方法を模索したい!という理由で、Arduino+Bluetoothドングルでの実装を模索する方向で検討してみたい。
のちのち、Bluetooth 4.0対応のドングルを使ってBluetooth 4.0の省電力通信にチャレンジというのも面白そうだしね。
Bluetoothについて学ぶ
Arduino上で使用するBluetoothスタックの選定
ArduinoからBluetoothドングルでHIDプロファイルを実装したいという事であれば、Bluetoothスタックを実装しなければならない。
一から実装できる技術も根性も無いので、既存の実装があればできるだけ乗っかっていきたい。
組み込み向けのBluetoothスタックで、ソースコードが利用できるものとしては以下のものが見つかった。
- Circuits@Homeの"PS3 and Wiimote Game Controllers on the Arduino Host Shield: Part 3"*9で使用されているArduino向け実装*10。
- LUFA*12にもBluetooth対応用のコードが含まれているようだがIncompleteとされている。
- HCI, L2CAP, SDP, RFCOMMが実装されている模様。
- HCIはAT90USB1286などのチップに内蔵のものを使っていると思う。
- 開発は行われているようだが、Bluetoothに関する機能が今後メンテナンスされるか?というと疑問。
- ライセンスはMIT Licenseをアレンジしたものかな?
- フリーの組み込み向けBluetoothスタックbtstack*15。
- いしかわきょーすけさんが"できる周波数ホッピング"で実装しているBluetoothスタックbluemelt*18。R8C/15向け。
- HCI, L2CAP, SDP, RFCOMMが実装されている。
- ROM 4kB, RAM 256byteでも動作する超軽量スタック。
- 個人開発みたいで、これ以上の実装追加はなさそう。
- ライセンスは不明。ソース中にもウェブサイト上にもライセンスに関する記載がなかった……
- 辻見裕史氏のWebサイトにある、Bluetooth-HIDプロファイルの実装*19。PIC24FJ64GB002向け。
- HCI, L2CAP, SDP, HIDが実装されている。
- 基本的にはbluemeltのPIC向け移植みたい。消費リソースは不明。
- 現在も開発が行われているみたい。
- ライセンスは「Microchip社製品にのみ使用可能」というものみたい(使用しているMicrochip社のライブラリのライセンスかな?)。
さて、どうしようか?
ひとまずは、"Wiiリモコンでラジコンしよう"のコードをベースに、デバイス側部分はbluemeltから移植するか、またはExplorer Botを参考にするかだな〜。
たぶんHCI/L2CAPも見直しが必要で、SDP/HIDは全部実装が必要になるだろう。
実際に動かしながらソースの内部構造を理解できるといいんだけど……。
*1:http://blog.goo.ne.jp/sirius506/e/0a8bdae43b0fef6af1e76ad30b33442f
*2:http://www.bluegiga.com/WT32_Bluetooth_Audio_Module
*3:http://www.sparkfun.com/products/8952
*4:http://www.sparkfun.com/products/10938
*5:http://phys.sci.hokudai.ac.jp/LABS/yts/pic/GB002/GB002.html
*6:http://www.palowireless.com/infotooth/tutorial.asp
*7:http://www.wdic.org/w/WDIC/HID%20%28Bluetooth%29
*8:http://homebrew.jp/show?page=1372
*9:http://www.circuitsathome.com/mcu/ps3-and-wiimote-game-controllers-on-the-arduino-host-shield-part-3
*10:https://github.com/ribbotson/USB-Host/blob/master/examples/wiiblue.pde
*11:http://makeitopen.blog116.fc2.com/blog-entry-3.html
*12:http://fourwalledcubicle.com/LUFA.php
*13:http://fourwalledcubicle.com/ExplorerBot.php
*14:http://blue-machines.googlecode.com/svn/trunk/resources/soft/lwbt-0.1/
*15:http://code.google.com/p/btstack/
*16:http://www.weblooks.ch/en/apps/iphone-apps/webe/
*17:http://code.google.com/p/btstack/wiki/EmbeddedSystems#Arduino
*18:http://www.asahi-net.or.jp/~qx5k-iskw/robot/blue.html
*19:http://phys.sci.hokudai.ac.jp/LABS/yts/pic/GB002/GB002.html