とりちらかったもろもろの言葉たち

ちょっと大きめのつぶやきにすぎない戯言をとりあえず書いてみました

月別アーカイブ: 4月 2016

Bluetooth Developer Studioの利用例

Bluetooth Developer Studio(BDS)でAndroidのプログラムを作ったら超絶簡単だったので記録しておく。

最初にAndroid Clientのプラグインをインストールする。といっても、BDSの「Plugin」フォルダーに、Pluginのサンプル(ここにあったヤツを使ったけど、そもそもBDSのExamplesに入っているヤツでもよさそう)をフォルダーごと放り込んであげればいい。

まずAndroidのプロジェクトを先に作っておこう(後でもいいけど)。ポイントはここでPackage名につける名前。ドメイン名識別という例のアレだが、これをBDSと同じにしておくと何も考えなくてよくて便利。

Step1

ということでBDSで新規プロジェクトを作成する。

Step2

で、先ほども言ったけどNAMESPACEに同じ名前を入れるのがポイント。今回はAndroidアプリ側なので、UUIDとかはきっとつなぐ相手が存在するはず。その相手のUUIDとかを入れておく。本当はBASE UUIDはあんまり意味ないのかもしれないが、おまじないだと思ってやった。Step3

OKをクリックすると「New Profile」というしごくシンプルな画面が出てくる。何もないとつながりようがないので、「CUSTOM SERVICE」をクリックする。Step4

順番が逆だったかもしれない。ちょっと記憶をたどりながらなのであやふやだけど、いろいろと「へぇここクリックするんだ」みたいなところがある。例えばこの画面で「New Profile」をクリックすると、プロファイルを編集できる。上の画面で「New Profile」をクリックしてもきっといいはず。

Step5

で、プロファイルの編集画面が出てくる。BASE UUIDはさっきのものが入っているはず。プロファイル名を編集して、BASE UUIDとNAMESPACEを確認したら「SAVE」をクリックする。Step6

で、次にサービスを定義する。「NEW PROFILE NEW SERVICE」をクリックすると、サービスの編集画面になる。今回はLightBlue Beanにつなぐために作ったので、サービス名は敬意を表して「LightBlue Service」としたが、名前は何でもいいだろう。またここで、該当するBLEデバイスのサービスのUUIDを入力すること。このUUIDはBASE UUIDから勝手に生成してくれるのだが、当然正しいとは限らない(というか、クライアント作成用としては違っている可能性が高い)ので、よく確認すること。なまじ末尾とか合っているので、気づかず進めたこと2回くらいあった。Step7

サービスの定義が済んだら、今度は個別のCharactersiticを定義する。まずは「+」ボタンをクリック。Step8

名前とかもろもろ編集。まあ最初に名前をScratch1とか(LightBlue Beanの呼び名)、役割とかで適当に。またUUIDも、サーバーによって定義されているだろうから正しく入力する。Step9a

同じ画面の下の方に移ると、その属性が定義できる。ここで「READ」とか「WRITE」とかはクライアントから見た時の役割。つまり、AndroidからそのCharactersiticに書き込みたいときは「WRITE」を「MANDATORY」にする。読みだしたいときは「READ」を「MANDATORY」に。OPTIONALにするとコードを生成してくれないからEXCLUDEから変える必要もないのだけど、まあそこは気は心というか。で、値の読み書き設定を加えると、下の「ADD FIELDS」というのが出てくるので、こいつをクリックする。Step9b

フィールドを追加したいので、「ADD」をクリックする。Step10

Characteristicを通じてやり取りするデータの型などを入れる。LightBlue Beanだと基本8ビットの配列で定義していたから、そうしておいた。ただこれ、コードで型チェックを生成してくれたりするので、もっと詳細なプロトコルを定めている場合はそれに従ってちゃんと記述するとよいように思う。VALUEも1個じゃないので、複数個を並べてもよさそうだ。まあ今回はこれでやったので。Step11

で、正しくCharacteristicを定義したら、TOOLメニューの「GENERATE」でコードを生成する。最初はServerだけど、Clientのコードも生成できる。Step12

Clientを選んで「ANDROID CLIENT PLUGIN」を選択して、GENERATEをクリックすればコードを生成してくれる。Step13

最後に、生成したコードの中にバッチファイル「copy_to_android_studio.bat」があるので、こいつを実行してアタマで作成したAndroid Studioのプロジェクトに放り込んであげれば完了。とりあえず一通り、Characteristicを通じてBLEデバイスと値をやり取りするアプリが作成できる。

そういえば、そもそも日本語環境だとBluetooth.comのサイトがまともに表示されないという問題があるんだった。ボクは英語版のブラウザー環境を一つ用意しているので、そっちを使ってアクセスしたらあっさり問題が解消したのだった。どうでもいいが、早く直せよ。

マイルストーン:スマホでカメラ台を制御

Project Chasing Moonとか言ってしまったが、そのマイルストーンその1。

2016-04-16 20.28.45スマートフォンのアプリで、指定した角度に首を振り、チルトさせるというもの。コントローラーは例によってLightBlue Beanにした。今回は細かく指定できることを確認するため、専用のアプリも作成した。

基本はBluetooth Low EnergyのCharacteristicに角度(アジマスとチルト)を書き込むと、それに応じてカメラ台のサーボが対象の角度に動く。サーボの制御はArduinoのServoライブラリ任せなので、本当にどの角度なのかは確認していない。が、まあそれらしい角度には動いている。後々のために、LightBlue Beanから加速度センサーの値をCharacteristic経由で取得できるようにもしている。

動かすとこんな感じだ。

ポイントはサーボが5V、LightBlue Beanが3Vで動作するのを整合させることくらい。もしかしたらサーボの制御ピンはCMOSロジックだったのかもしれないけど、SG90の説明はなんにも書いてないのでまあレベル変換は入れておいた。CMOSロジックで動いているといいな。何となく、ちょっと動作が不安定な感じがあるので。本当は波形の確認とかしなきゃいけないんだけど、まあそれも次のステップかな。

もう一つポイントだったのはアプリの方だけど、今回はBluetooth Developer Studio(BDS)を使ったら簡単にできた。基本はLightBlue BeanのCharacteristicをやり取りするサービスのUUIDを使ってBDSでプロジェクトを立ち上げる。これで標準のプラグインを使って、Androidのクライアントコードを生成させる。同じ名前、名前空間でAndroid Studioのプロジェクトを作っておけば、BDSで生成した中に入っているバッチファイルがソースを放り込んでくれる。Javaのソースコードだけではなく、XMLのデザインファイルなども入れてくれるので、実行可能なアプリがその場でできてしまう。

あとはデータをやり取りする構造(プロトコル)を決めて適切に処理させればいい。