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

obnizをBLEのペリフェラルとして使用します。つまりスマホなどから繋がれる側になる方法となります。

接続されない前提であればキャラクタリスティクスなどを用意しなくてもadvertisementの情報だけ用意することができます。

2種類のadvertisement

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

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

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

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

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

ad(advertisement)の発信

obniz.ble.advertisementに対してadとadのスキャンレスポンス両方を設定することができます。

以下のようにすることでこのデバイスにサービスUUID1234のサービスがあるということをadで発信し、デバイス名が"obniz BLE"であることもスキャンレスポンスで発信します。

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

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

  obniz.ble.advertisement.start();
}

adのカスタマイズ

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

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

setAdvData()関数はserviceUuids以外にも以下のような設定が可能です。(詳細はobniz.jsのリファレンスを参照)

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  await obniz.ble.initWait();
  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();
}

また、単純なバイト列での指定は以下のように行います。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  await obniz.ble.initWait();
  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 () {
  await obniz.ble.initWait();
  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