BLE: ペリフェラル-advertisementを出す

今回からはobnizをBLEのペリフェラルとして使用します。
スマホなどから繋がれる側になるということです。

obnizの中にサービスだったり、キャラクタリスティクスを登録することになります。

今回はまず相手に対して存在を知ってもらうためのadvertisementを出します。

2種類のadvertisement

BLEのadvertisementには2種類あります。通常のadvertisementとスキャンレスポンスです。

BLEのadvertisementは自分で発信し続けますが、データ容量が少ないため、送るべきデータが全部はいらないことがあります。
なのでセントラル側はペリフェラルに対して「もっとデータないの?」と聞くことができるようになってます。
そして聞かれたペリフェラルは「実は、、、」と更にデータを送ることができます。それがスキャンレスポンスです。

localNameという名前は主にスキャンレスポンスで送ることが多いです。

じゃあadvertisementには何を入れるのかと言うと、メーカーの番号なんかが入ったりしますが、重要なのはサービスのUUIDです。

「私にはこのUUIDのサービスがあります!」とadvertisementで発信することができます。
これがadvertisementのそもそものしごとです。

やってみる。

早速やってみましょう。

advertisementで「私には1234というUUIDのサービスがあります!」と主張します。

さらに、localNameもスキャンレスポンスにつけてみましょう。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  obniz.ble.advertisement.setAdvData({
    serviceUuids: ["1234"]
  });

  obniz.ble.advertisement.setScanRespData({
    localName : "obniz BLE",
  });

  obniz.ble.advertisement.start();
}

あとは、発信が開始されたらLightBlueなどのBLEが使えるスマホアプリでBLEを探せばobniz BLEというのがでてくると思います。

他の設定方法

advertisementはBLEの魅力の1つで、接続などせずこれだけを使う利用例も多いです。位置情報系サービスなどがそうです。

そのため、高度な使い方をするためにより詳細にserviceUuidsやlocalName以外にも情報を入れることができます。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  obniz.ble.advertisement.setAdvData({
    flags: ["general_discoverable_mode","br_edr_not_supported"],
    manufacturerData:{
      companyCode : 0x004C,
      serviceUuids: ["fff0"],
      data : [0x02,0x15, 0xC2, 0x8f, 0x0a, 0xd5, 0xa7, 0xfd, 0x48, 0xbe, 0x9f, 0xd0, 0xea, 0xe9, 0xff, 0xd3, 0xa8, 0xbb,0x10,0x00,0x00,0x10,0xFF],
    },
  });
  obniz.ble.advertisement.setScanRespData({
    localName : "obniz BLE",
  });

  obniz.ble.advertisement.start();
}

また、advertisementは結局ただのデータを出すだけですのでこのようにバイト列でadvertisementを出力することもできます。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  obniz.ble.advertisement.setAdvDataRaw([0x02, 0x01, 0x1A, 0x07, 0x09, 0x53, 0x61, 0x6D, 0x70, 0x6C, 0x65 ]);
  obniz.ble.advertisement.setScanRespDataRaw([0x07, 0x09, 0x53, 0x61, 0x6D, 0x70, 0x6C, 0x65 ]);

  obniz.ble.advertisement.start();
}

advertisementの終了

開始したadvertisementはend()で終了できます。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  obniz.ble.advertisement.setAdvData({
    serviceUuids: ["1234"]
  });

  obniz.ble.advertisement.setScanRespData({
    localName : "obniz BLE",
  });

  obniz.ble.advertisement.start();
  await obniz.wait(2000);
  obniz.ble.advertisement.end();
}


Next : BLE: Peripheral-registrations of service/characteristics

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