2016/01/04

[nrf52]BDS v1.0 + nRF52832

Bluetooth Developer Studio v1.0向けに、Nordic Pluginsが更新されていた。
「nRF5」ということで、nRF51もnRF52も使えるようだ。

というわけで、BDS v1.0になったあとのスクリーンショットもなかったから、記録しておこう。
バージョンは、これ。

image


BDSを起動すると、こういう画面が出てくる。
”RECENT PROJECTS”には、開いたことのあるプロジェクトが表示されるようだ。
なお、丸数字は、日・月が表示されている。

image

 

“FILE > NEW”とすると、こういうダイアログが表示される。
ここでは”BdsTest01”というプロジェクト名にした。
NAMESPACEは、事前に設定しておくこともできるし、ここで入力することもできる。
入力しても、特にソースファイルに出てくるわけではないようだ。
BASE UUIDは自動で作ってくれるので、今回はそのまま使った。

image

 

プロジェクト作成直後は、こうなる。
自作のサービスを作るのでなければ、右側からドラッグ&ドロップして持ってくることもできるようだが、まだ使ったことがない。

image

 

まず、プロファイルを作る。
最初は”New Profile”となっているので、適当に名前を作る。
デフォルトのままでもいいような気はする。

image

入力例。

image

 

SAVEして、次はサービスを作る。
右側の”CUSTOM SERVICE”を押すと、こうなる。

image

 

ここでは”BdsSrv”というサービス名にした。
名前はファイル名に反映される。
DISCLAIMER、SUMMARY、ABSTRACTみたいなところはメモとして使えるようだ。
設計書の提出を求められたときにいいかもしれん。
下の方にチェックボックスがあるが、BLEだからといって”LOW ENERGY”にチェックを入れたりしなくても、少なくともNordic Pluginsを使っているのであれば関係なさそうだ。

image

SAVEすると、こうなる。

image

 

次はキャラクタリスティック。
サービス名の下にある”+”ボタンを押すと、キャラクタリスティックが追加される。
まず、”BdsChar1”というキャラクタリスティック名にした。
16it UUIDはランダムっぽく決めてくれたので、そのまま使った(表示は切り替えられる)。

image

同じ画面の下には、アクセス方法というのか、READとかWRITEとかが出てくる。
種類はあまり試していないが、今のNordic Pluginsバージョンでは”RELIABLE WRITE”はコンパイルが通らなかった。
うまいこと通るようにテンプレートを修正してみようと思ったが、テンプレートで使っているAPIでは対応できなかったので、やめた。

image

今回は、READとWRITEだけ対応することにした。

image

 

キャラクタリスティックがあれば、最後に値の容器を作る。
下にある”ADD FIELDS”を押すと、こういうダイアログが出てくる。

image

 

左下の”ADD”を押すと、フィールドが追加される。
ただ、このフィールドはnRFが処理するためのもので、相手から見たときにはプロトコルのレベルでは出てこない。
なので、私としてはなんとなくフィールドは1つにしてしまっている。

ちなみに、ここで”FORMAT”を”FORMATLESS”にしているが、これはあとでコンパイルエラーになる。

image

 

1つだと寂しいので、もう1つキャラクタリスティックを作ることにした。
”BdsChar2”だ。
アクセス方法は”WRITE WITHOUT RESPONSE”のみMANDATORYにしている。

image

image

フィールドは2つにしてみる。

image image

 

最終的に、こうなる。
キャラクタリスティックはサービス名の下にずらずらと並ぶ。

image

これだけだとアトリビュートテーブルを作っただけなのだが、Bluetooth Developer Studioのよいところはソースを自動生成するためのプラグインが追加できるところだ。
ここでは”NORDIC SEMICONDUCTOR NRF5X V.1.2.2”を追加している。
それ以外に5つあるが、これはインストール時にデフォルトで入っているものだ。

image

この構成でソース生成すると、こういうファイルができる。

image

service_if.c, hは共通で、ble_bdssrv.c, hはサービス名によって作られた名前だ。
”BdsSrv”が”ble_bdssrv”になっているので、プレフィクスで”ble_”がついて、あとはそのまま名前が付いているようだ。

 

これを、Keilでビルドしたのだが、コンパイルエラーになった。
1つめのキャラクタリスティックの”FORMAT”で”FORMATLESS”にしていたが、UNDEFINED_TYPE_tという型になっていたのだ。
単に、型のないバイト列を表したいだけだったので、”UINT8_ARRAY”に変更した。

image

Keilでのプロジェクトは、こういう感じになった。
ここでは、nRF5_SDK_11.0.0-2.alpha_bc3f6a0のexamples\ble_peripheral\experimental_bluetoothds_templateを使っている。
ターゲットは、PCA10036という、nRF52832のプレビュー版が載ったボードだ。

image

image

 

 

定義したフィールドは、こう反映される。

/**@brief BdsChar1 structure. */
typedef struct
{
    uint8_array_t field001;
} ble_bdssrv_bdschar1_t;
/**@brief BdsChar2 structure. */
typedef struct
{
    uint8_array_t fld_a;
    uint8_t fld_b;
} ble_bdssrv_bdschar2_t;

 

これを焼いて動かし、AndroidのnRF Master Controlアプリで見ると、こうなる。

image

接続。

image

 

当然ながら、外から見ると、どのキャラクタリスティックに何バイトとか、何バイト目にどうとかとかいうフィールドの情報は出てこない。
「ここはLong Writeしか受け付けない!」みたいなのも情報としてほしい気もするのだが、まあ、普通は相互にわかってないといけないはずだから、いいのだろう。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。