プライベートサービスの作成と設定
解説
プライベートサービスの作成と設定についてまとめます。
作成するプライベートサービスの仕様
作成するプライベートサービスの仕様としては、以下としました。
- キャラクタリスティックを2つ作成する。
- 1つ目のキャラクタリスティックは、
- 読み出しができる。
- ノーティファイが可能。
- データサイズは、2バイト(数値を想定。0~65,535)。 - 2つ目のキャラクタリスティックは、
- 書き込みと読み出しができる。
- ノーティファイはなし。
- データサイズは、8バイト(文字列を想定。半角文字8文字)
UUIDの作成
作成するプライベートサービスのために1つ、作成するキャラクタリスティック2つ、都合3つのUUIDを作成します。
UUIDは、128ビットの値です(16進数表現で32桁)。
この値は自由に決めることができますが、他のサービスと競合しない値を設定します(たとえば、同じUUIDで、異なる仕様のサービスがあったとして(仮に仕様A、仕様Bとする)、送信側は仕様Aでデータを送り、受信側は仕様Bでデータを受け取ろうとすれば、正しい通信は行われません)
UUIDをウェブサイト「UUIDGenerator.net」で作成します。
https://www.uuidgenerator.net/
にアクセスします。
「Buld Version 1 UUID Generation」の「How Many?」欄に、作成するUUIDの個数である「3」を入力し、「Generate」ボタンをクリックします。
3つのUUIDが作成されます。
今回作成されたUUIDは、以下の3つ。
ff6b1160-8fe6-11e7-abc4-cec278b6b50a
ff6b1426-8fe6-11e7-abc4-cec278b6b50a
ff6b1548-8fe6-11e7-abc4-cec278b6b50a
関連コマンド解説
サーバサービス設定「SS」
「SS,<hex32>」※でサポートするサービスを設定します。
※<hex32>は、サーバとしてサポートするサービスを示すビットパターン(16進数表現で8桁)です。
詳細は、「RN4020 Bluetooth® Low Energy モジュール ユーザガイド」の「SS」コマンドの説明を参照。
プライベートサービス(0x00000001)だけをサポートするようにするには、
「SS,00000001」と入力します。
デバイス情報サービス(0x80000000)と、バッテリーサービス(0x40000000)と、プライベートサービス(0xC0000001)をサポートするようにするには、
「SS,C0000001」と入力します。
(0x80000000 + 0x40000000 + 0x00000001 = 0xC0000001)
プライベートサービスのクリア「PZ」
「PZ」でプライベートサービスとプライベート キャラクタリスティックの全設定をクリアします。
プライベートサービスのUUIDの設定「PS」
「PS,<UUID>」※でプライベートサービスのUUIDを設定します。
このコマンドは、「PC」コマンドを実行する前に実行する必要があります。
※<UUID>は、設定するプライベートサービスのUUID(128ビット。16進数表現で32桁)です。
「UUIDGenerator.net」で作成したUUIDの1つの目のUUIDを、プライベートサービスのUUIDとする設定は、
「PS,FF6B11608FE611E7ABC4CEC278B6B50A」と入力します。
プライベートキャラクタリスティックの設定「PC」
「PC,<UUID>,<プロパティ>,<データサイズ>」※でプライベートキャラクタリスティックを設定します。
このコマンドは、「PS」コマンドを実行した後に実行する必要があります。
※
<UUID>は、設定するプライベートキャラクタリスティックのUUID(128ビット。16進数表現で32桁)です。
<プロパティ>は、キャラクタリスティックプロパティビットパターン(8ビット。16進数表現で2桁)です。
0b00010000 (0x10) : 通知が可能
0b00001000 (0x08) : 書き込み
0b00000010 (0x02) : 読み出し
<データサイズ>は、キャラクタリスティックが保持するデータサイズ(8ビット。16進数表現で2桁)です。
- 1つ目のキャラクタリスティックは、
- 読み出しができる。⇒「0x02」
- ノーティファイが可能。⇒「0x10」
- データサイズは、2バイト(数値を想定。0~65,535)。⇒「0x02」 - 2つ目のキャラクタリスティックは、
- 書き込みと読み出しができる。⇒「0x0A」
- ノーティファイはなし。⇒「0x00」
- データサイズは、8バイト(文字列を想定。半角文字8文字)⇒「0x08」
1つ目のキャラスタリスティックの設定は、
「PC,FF6B14268FE611E7ABC4CEC278B6B50A,12,02」と入力します。
2つ目のキャラスタリスティックの設定は、
「PC,FF6B15488FE611E7ABC4CEC278B6B50A,0A,08」と入力します。
ターミナルソフトからのコマンド送信の例
エコーを有効にします。
「+」を入力し、エンターキーを押します。
コマンドが正しく実行されると、画面に「Echo On」と表示されます。
工場出荷時の規定値にリセットします。
「SF,1」を入力し、エンターキーを押します。
コマンドが正しく実行されると、画面に「AOK」と表示されます。
サーバサービスを設定します。
「SS,00000001」と入力し、エンターキーを押します。
コマンドが正しく実行されると、画面に「AOK」と表示されます。
サポート機能の設定をします。
「SR,24002000」と入力し、エンターキーを押します。
コマンドが正しく実行されると、画面に「AOK」と表示されます。
プライベートサービスをクリアします。
「PZ」と入力し、エンターキーを押します。
コマンドが正しく実行されると、画面に「AOK」と表示されます。
再起動します。
「R,1」と入力し、エンターキーを押します。
コマンドが正しく実行されると、画面に「Reboot」「CMD」と表示されます。
(再起動によりエコーが無効に戻る)
エコーを有効にします。
「+」を入力し、エンターキーを押します。
コマンドが正しく実行されると、画面に「Echo On」と表示されます。
サポートサービスを確認します。
「LS」と入力し、エンターキーを押します。
RN4020がサポートするサーバサービスは何もないので、「END」とだけ表示されます。
プライベートサービスのUUIDを設定します。
「PS,FF6B11608FE611E7ABC4CEC278B6B50A」と入力し、エンターキーを押します。
コマンドが正しく実行されると、画面に「AOK」と表示されます。
プライベートキャラクタリスティックを設定します。
「PC,FF6B14268FE611E7ABC4CEC278B6B50A,12,02」と入力し、エンターキーを押します。
コマンドが正しく実行されると、画面に「AOK」と表示されます。
「PC,FF6B15488FE611E7ABC4CEC278B6B50A,0A,08」と入力し、エンターキーを押します。
コマンドが正しく実行されると、画面に「AOK」と表示されます。
再起動します。
「R,1」と入力し、エンターキーを押します。
コマンドが正しく実行されると、画面に「Reboot」「CMD」と表示されます。
(再起動によりエコーが無効に戻る)
エコーを有効にします。
「+」を入力し、エンターキーを押します。
コマンドが正しく実行されると、画面に「Echo On」と表示されます。
サポートサービスを確認します。
「LS」と入力し、エンターキーを押します。
コマンドが正しく実行されると、画面にRN4020がサポートするサーバサービスがリスト表示されます。
AndroidアプリでBLE通信
「BLE Scanner: Read,Write,Notify」を起動します。
スキャンが開始され、RN4020が検出されます。
「CONNECT」ボタンをタップし、検出されたRN4020と接続します。
RN4020がサポートするサービスのリストが表示されます。
作成したプライベートサービスが「CUSTOM SERVICE」として表示されます。
UUIDは、 「PS」コマンドで設定したUUID、「LS」コマンドで確認したUUIDとも一致しています。
「CUSTOM SERVICE」をタップします。
カスタムサービスがサポートするキャラクタリスティック(≒サービスの特性値)が表示されます。
2つのキャラクタリスティックが表示されます。
1つは、プロパティが「Read」と「NOTIFY」。もう1つは、プロパティが「READ」と「WRITE」で、「PC」コマンドで設定した内容となっています。
以上で、プライベートサービスの作成と設定と確認ができました。
関連ページ
次項目:プライベートサービスのキャラクタリスティックの値の書き込み