BLE: ペリフェラル-サービス・キャラクタリスティクス・ディスクリプタの登録

実際に外部から接続を受け付けるためにはサービスやキャラクタリスティクスを用意してobnizに設定する必要があります。

クラス

サービスやキャラクタリスティクスは専用のクラスが用意されています。

例えば、UUIDが1234のサービスはこのように作成できます。

var service = new obniz.ble.service({ uuid : "1234" });

キャラクタリスティクスも同じようにuuidとdataから作成できます。

var characteristic = new obniz.ble.characteristic({ uuid : "7777", data: [1, 2, 3]});

これらをobnizに登録して、advertisementを出すことで、外部から接続して値を見たり書いたりできるようになります。

やってみる

それではやってみましょう。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  var service = new obniz.ble.service({ uuid : "1234" });
  var characteristic = new obniz.ble.characteristic({ uuid : "7777", data: [1, 2, 3]});
  service.addCharacteristic(characteristic);
  obniz.ble.peripheral.addService(service);

  obniz.ble.advertisement.setAdvData(service.advData);
  obniz.ble.advertisement.setScanRespData({
    localName : "obniz BLE",
  });
  obniz.ble.advertisement.start();
}

まず、サービスとキャラクタリスティクスを作っています。

そして作ったキャラクタリスティクスをサービスに登録し、それができたら今度はサービスをobnizに対して登録しています。

service.addCharacteristic(characteristic);
obniz.ble.peripheral.addService(service);

この段階でadvertisementを出していなくても、接続されたらサービスがあることや、キャラクタリスティクスがあることをBLEで繋いできた他の端末が確認することができるようになります。

ただ、advertisementがないと、デバイスがあることが外からわからないので出しましょう。

serviceクラスには自分のUUIDを元にadvertisement用のオブジェクトを作る機能があります。
それを利用してAdvDataを登録します。

obniz.ble.advertisement.setAdvData(service.advData);

そしてデバイス名も登録したらstart()で開始します。

スマホのアプリからBLEデバイスを探すとobniz BLEが見えると思います。
そして接続もできると思います。
接続できたらどんなサービスがあるか見てみましょう。
ちゃんと1234のサービスがあってサービスには7777のキャラクタリスティクスがあるのが見えると思います。
値もちゃんとあるはずです。

接続通知

これだけだと、obnizがBLEで接続されてるのかどうかを知ることができません。

そこで、接続状態が変わった時のcallbackを設定してみましょう。onconnectionupdatesに関数を登録しておけば、誰かが繋がったときなどに呼ばれます。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {

  obniz.ble.peripheral.onconnectionupdates = function(data){
    console.log("remote device ", data.address, data.status)
  };

  var service = new obniz.ble.service({ uuid : "1234" });
  var characteristic = new obniz.ble.characteristic({ uuid : "7777", data: [1, 2, 3]});
  service.addCharacteristic(characteristic);
  obniz.ble.peripheral.addService(service);

  obniz.ble.advertisement.setAdvData(service.advData);
  obniz.ble.advertisement.setScanRespData({
    localName : "obniz BLE",
  });
  obniz.ble.advertisement.start();
}

同じくスマホから繋げば、繋いだときに繋いできた端末のBLEにおけるaddressやconnectedが表示されると思います。
切断されればdisconnectedとなります。



Next : BLE: Peripheral-Subscription for overwrite

You will Get in Few Days

Circuit for Starter “obniz Board” is available on Amazon and other online stores.
You can get it at below

Our products and resellers

Forum

Visit our developer’s forum to discuss and discover technologies.

Forum

Contact

Feel free to contact out support and technical team.

Contact us