以前公開した茶運び人形ロボのGR-SAKURAプログラムを更新しました。
シリアル接続からUSBアダプタへ
従来は、Bluetooth通信に浅草ギ研のBlueMasterを使用していました。BlueMasterはシリアル接続のモジュールなので簡単に使えて便利なのですが、次のような問題がありました。- まず高価です。12,600円もします。他の製品でもう少し安価なものもありますが、技適が取れてなかったり、サイズが大きかったり、面倒な電圧だったりと選択が難しいです。
- そもそも、シリアル接続だったらArduinoでもできますよね。GR-SAKURAを採用してる必然性がないですよね。
というわけで、Bluetooth USBアダプタを使用するように仕様変更しました。PC用に市販されているBluetooth USBアダプタは2000円以下(下手すると1000円以下)という安価で手に入ります。その上、コンパクトで着脱が容易です。それにUSBホストを使っていればとりあえずGR-SAKURAを採用してることの正当性は主張できます!
さて、それではBluetooth USBアダプタを使おうというわけですが、やはりシリアル接続モジュールに比べるとハードルは高いです。シリアル(UART)はマイコンのおもな通信I/Fのなかではいちばん単純で昔から広く使われてるものなのでプログラムは容易です。それにシリアル接続モジュールを使うとBluetoothのことを意識する必要はありません。マイコンから見ればただのシリアル通信です。
しかし、Bluetooth USBアダプタをマイコンで使うとなると、USBとBluetoothという二つの通信のドライバを作成しなければなりません。USBとBluetoothはどちらも、UARTよりずっと複雑な通信規格です。ここはおとなしく先人の成果を利用することにします。
btstack
今回使用するのは、Matthias Ringwald氏が公開されている btstack です。subversionで管理されているので、下記のようにしてソースを取得できます。
svn checkout http://btstack.googlecode.com/svn/trunk/ btstack-read-only
btstackは、Bluetoothをサポートしていないかまたは利用が制限されているOS(iOSとか)や、リソースの乏しい組み込みマイコンでBluetoothをサポートする目的のプロジェクトです。たった4kBのRAMのMSP430マイコンでも最低限のSPPは動くそうです。
btstackは、OSなしのマイコンでも使用できますし、RTOS上で一つのスレッドとして動作することもできます。MSP430へのポーティングは上記の配布ソースに含まれています。その他のマイコンへのポーティングは各自で、CPUとBluetoothとのI/Fおよびクロックを実装することになります。ちなみに、iOSなどのPOSIX準拠のOSでは、btstackはデーモンとして動作し、複数のアプリとプロセス間通信します。詳細は上記サイトのWikiを参照してください。
さて、btstackをUSBインターフェースでRXマイコンで使用するとなると、その部分の実装が必要です。ところがこれもhrdakinori氏がすでに成果を公開されていたので、それを利用することにします。(はい、今回はすべて他人の褌です。) ちなみにhrdakinori氏はPIC24にもbtstackをポーティングしてGitHubで公開されています。多謝。
- はてはダイアリー: http://d.hatena.ne.jp/hrdakinori/20120729
- GitHub: https://github.com/hrdakinori/GR-SAKURA_btstack
- Renesas Rulz: GR-SAKURAのUSB HOSTでBluetooth通信をする
ソースの公開
さて両氏の成果を取り込んだ茶運び人形ロボのマイコンプログラムを公開します。Renesas Web Compilerに直接インポートできるよう、フォルダで包まずに圧縮してあります。ローカルで解凍する場合はご注意ください。
【ライセンスについて】
- hrdakinori氏のソースは二条項BSDライセンスです。
- Matthias Ringwald氏のソースは三条項BSDライセンスに、商用利用の禁止が追記されています。商用利用の場合には上記サイトからMatthias Ringwald氏にコンタクトしてください。
- rxduinoおよび特電HALはヘッダやライブラリの再配布が禁じられているので同梱していません。
- 僕(Nishimura Bizan)のソースはNYSL(煮るなり焼くなり好きにしろライセンス)です。
ソースの使用方法
- Renesas Web Compilerで新規のプロジェクトを作成します。テンプレートはGR-SAKURA_Sketch_V1.02を使用します。
- gr_sakura_servoライブラリを追加します。
- zipファイルインポートで、MyeongWol_Sakura_Ver2.zipをインポートします。
- ビルドします。
btstackの改変
改変はありません。必要なソースを抜粋しただけです。GR-SAKURA_btstackの改変
改変したのは次の2点です。- usb_bt.cの92行目、usb_task()でのバルク転送のポーリング間隔を短くするため、100000 を 1000 に改変しました。AndroidアプリのSeekBarのイベントに追従するための処置です。
- bt_spp.cのbt_spp_recive_callback()を全面的に変更しました。シリアル受信時のコールバック関数です。コマンド開始文字からコマンド終了文字までをバッファしてからコマンド実行関数を呼ぶ処理を記述しました。
茶運び人形ファームウェアの改変
改変したのは gr_sketch.cpp の次の箇所です。- setup()からシリアルポートの初期化を削除しました。
- setup()にUSBの初期化を追加しました。タイミングの問題があるようで、tkusbh_init() の前には delay(100) が必要です。
- loop()からシリアル受信文字のバッファ処理を削除し、上記のbt_spp_recive_callback()に移動させました。
- loop()にUSBタスク usb_task() とBluetoothタスク bt_task() の呼び出しを追加しました。
GR-SAKURAのジャンパ
- USBホスト使用のため、J13,J15をショートします。
- 5V電源をUSBに供給するため、J1をショートします。
動作確認できたUSBアダプタ
バッファローのBSHSBD03で動作を確認しました。hrdakinori氏はPLANEXのBT-MicroEDR1Xで動作確認されたそうです。