BLE: セントラル-値の読み取り・書き込み

今回はキャラクタリスティクスに対して値の読み書きを行います。

まず、LightBlueのキャラクタリスティクスを読み書き可能なように設定を変えておきます。
PropertyはReadだけになっていると思いますが、それをクリックしてすべてのプロパティにチェックを入れておきます。

これでBLE経由でこのプロパティに対して何でもできるようになります。

書き込む

データを書き込むにはwrite()関数を使います。
引数として書き込みたいデータを配列で送ることができます。

プログラムが長くなってきたので、サービスの0x1111とキャラクタリスティクスの0x2222が存在している前提のプログラムにして、書き込みを行ってみましょう。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  var peripheral = await obniz.ble.scan.startOneWait({ localName: "Blank" });
  if(peripheral) {
    console.log("found");
    var connected = await peripheral.connectWait();
    if(connected){
      console.log("connected");
      var service = peripheral.getService("1111");
      var char = service.getCharacteristic("2222");
      char.onwrite = function() {
        console.log("written")
      }
      char.write([0,1,2]);
    }else{
      console.log("failed");
    }
  }
}

今まではすべてのサービスを検索したり、すべてのキャラクタリスティクスを検索していましたが、
1111と2222がある前提ならば、このぐらい簡単に書くことができます。

var service = peripheral.getService("1111");
var char = service.getCharacteristic("2222");

そして、キャラクタリスティクス2222に対して、3バイトの書き込みを行います。
書き込みが完了したらonwriteが呼ばれるので、確認のためにlogを出すようにしています。

char.onwrite = function() {
  console.log("written")
}
char.write([0,1,2]);

書き込みがちゃんと行われるとアプリの方にも値が表示されると思います。

もしくはwriteWaitawaitを使うこともできます。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  var peripheral = await obniz.ble.scan.startOneWait({ localName: "Blank" });
  if(peripheral) {
    console.log("found");
    var connected = await peripheral.connectWait();
    if(connected){
      console.log("connected");
      var service = peripheral.getService("1111");
      var char = service.getCharacteristic("2222");
      var written = await char.writeWait([0,1,2]);
      if (written) {
        console.log("written");
      }
    }else{
      console.log("failed");
    }
  }
}

値を読む

今度はキャラクタリスティクスに書き込まれている値を読み込みます。読み込みにはread()onreadを使用します。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  var peripheral = await obniz.ble.scan.startOneWait({ localName: "Blank" });
  if(peripheral) {
    console.log("found");
    var connected = await peripheral.connectWait();
    if(connected){
      console.log("connected");
      var service = peripheral.getService("1111");
      var char = service.getCharacteristic("2222");
      char.onread = function(data) {
        console.log(data)
      }
      char.read();
    }else{
      console.log("failed");
    }
  }
}

先ほど書き込んだ[0, 1, 2]が取得できると思います。

アプリ側でもキャラクタリスティクスの値を書き換えることができるので、変えて、ちゃんと変えた値を読み取れるか試してもいいですね。

読み取りはreadWaitを使うとawaitで呼び出せます。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  var peripheral = await obniz.ble.scan.startOneWait({ localName: "Blank" });
  if(peripheral) {
    console.log("found");
    var connected = await peripheral.connectWait();
    if(connected){
      console.log("connected");
      var service = peripheral.getService("1111");
      var char = service.getCharacteristic("2222");
      var data = await char.readWait();
      console.log(data)
    }else{
      console.log("failed");
    }
  }
}


Next : BLE: Central-Registration for notify

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