15
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

obniz を LINE Things のデバイスとして使う

Last updated at Posted at 2019-02-05

obnizがLINE Thingsに対応しました。
LINE Thingsのgithubレポジトリにもサンプルが載っています

今回はこちらを使ってみます

LINEの準備

まずはLINE側の準備をします。
といっても、LIFFアプリを作るのはめんどくさいので、LINEがテスト用に作ってくれているサンプルをそのまま使います。(プログラムは書きません)

LINEのアップデート

LINEのアプリを最新のものへアップデートしてください。
古いものだと、LINE Thingsの機能がまだ入っていないことがあります。

LINE Thingsと友だちになる

LINE公式ブログの記事、LINE の IoT プラットフォーム LINE Things の Developer Trial を試してみる
内にある、QRコードより、LINE Thingsのアカウントと友達になります

LINE と LINE Things デバイスを連携させてみよう

次に、ファームウェアの書き込みが完了したら、実際に LINE へデバイスを連携してみましょう。

LINE Things を利用するために、まずお使いの LINE をインストールしたスマートフォン上で、以下の QR コードを読み取って規約に同意していただき、LINE Things の機能を有効化してください。
qr_code-311f3503.png

その後、以下のようなデバイス連携画面が見えるはずです。(一度有効化したら、次回からは “設定” → “LINE Things” からデバイス連携画面を開くことが出来ます) ここで、ファームウェアを書き込んだデバイスの電源を入れると、LINE Things デバイスが検出され “連携可能なデバイス” に “LINE Things Trial (Default Firmware)” が表示がされるはずです。表示されない場合には、スマートフォンの Bluetooth がオフになっていないか確認してください。

ひとまず、LINE Thingsの画面まで行けばOKです
IMG_1711.PNG

obnizの準備

obnizのBLEの機能がfirmware v1.1.0より強化されていますので、それ以降のファームウェアで動かす必要があります。
また、firmware v1.1.0はobniz.js v1.15.0以降でないと動きませんので、SDKのバージョンもそれ以降である必要があります。

obnizファームウェアのアップデート

ファームウェアの確認の仕方

obnizのスイッチを押した状態で電源を投入することでメニューが表示されます。
その中からDisplay infoを選ぶことで、ファームウェアバージョンを確認することができます。

IMG_1612.jpg

IMG_1613.jpg

ユーザー登録をした後、クラウドコンソールから確認することもできます。

スクリーンショット_2019-01-16_19_30_14.png

ファームウェアアップデートの仕方

 ユーザー登録をした後、クラウドコンソールよりアップデートするとができます
 https://obniz.io/doc/about_cloud_console

スクリーンショット_2019-01-16_19_32_44.png

 

プログラムを書く

Javascript部分のみ記載しています.
node.jsでもhtmlでもどちらでも動きます。

最初の行のYOUR_OBNIZ_ID のみ、自分のobniz idを入力ください

const obnizId = 'YOUR_OBNIZ_ID';

let obniz = new Obniz(obnizId);

obniz.onconnect = async function() {
  obniz.display.clear();
  obniz.display.print('OFF');

  setSecuritySettings(obniz);

  let { PSDIService } = createSPDIService(obniz);
  let { userService, writeCharacteristic, notifyCharacteristic } = createUserSerivice(obniz);

  writeCharacteristic.onwritefromremote = async function( deviceAddress, newValue ) {
    console.log('remote button state changed : ' + newValue[0]);
    if (newValue[0]) {
      obniz.display.clear();
      obniz.display.print('ON');
    } else {
      obniz.display.clear();
      obniz.display.print('OFF');
    }
  };

  obniz.switch.onchange = async function(state) {
    console.log('button state changed : ' + state);
    if (state === 'push') {
      await notifyCharacteristic.writeWait([0x01]);
    } else {
      await notifyCharacteristic.writeWait([0x00]);
    }
    notifyCharacteristic.notify();
  };

  let advDataFromService = userService.advData;
  advDataFromService.localName = 'obniz';
  obniz.ble.advertisement.setAdvData(advDataFromService);

  obniz.ble.advertisement.setScanRespData({
    localName: 'LINE Things Trial obniz',
  });

  console.log('start advertisement');
  obniz.ble.advertisement.start();
};

function setSecuritySettings(obniz) {
  obniz.ble.security.onerror = function() {
    console.error('security set params error');
    obniz.reboot();
  };
  obniz.ble.security.clearBondingDevicesList();
  obniz.ble.security.setModeLevel(1, 2);
}

function createUserSerivice(obniz) {
  let writeCharacteristic = new obniz.ble.characteristic({
    uuid: 'E9062E71-9E62-4BC6-B0D3-35CDCD9B027B',
    data: [0x00],
    properties: ['read', 'write'],
    permissions: ['read_encrypted', 'write_encrypted'],
    descriptors: [
      {
        uuid: '2901',
        text: 'Write to change display',
      },
    ],
  });

  let notifyCharacteristic = new obniz.ble.characteristic({
    uuid: '62FBD229-6EDD-4D1A-B554-5C4E1BB29169',
    data: [0x00],
    properties: ['read', 'notify'],
    permissions: ['read_encrypted', 'write_encrypted'],
    descriptors: [
      {
        uuid: '2901',
        text: 'Notify when push button on LINE app',
      },
      {
        uuid: '2902', //2byte for CCCD
        data: [0x00, 0x00], //2byte for CCCD
        permissions: ['read_encrypted', 'write_encrypted'],
      },
    ],
  });

  let userService = new obniz.ble.service({
    uuid: '91E4E176-D0B9-464D-9FE4-52EE3E9F1552',
    characteristics: [writeCharacteristic, notifyCharacteristic],
  });

  obniz.ble.peripheral.addService(userService);

  return {
    userService,
    writeCharacteristic,
    notifyCharacteristic,
  };
}

function createSPDIService(obniz) {
  let PSDIService = new obniz.ble.service({
    uuid: 'E625601E-9E55-4597-A598-76018A0D293D',
    characteristics: [
      {
        uuid: '26E2B12B-85F0-4F3F-9FDD-91D114270E6E',
        text: obnizId, //unique id
        permissions: ['read_encrypted', 'write_encrypted'],
        descriptors: [
          {
            uuid: '2901',
            text: 'PSDI',
          },
        ],
      },
    ],
  });

  obniz.ble.peripheral.addService(PSDIService);

  return { PSDIService };
}

動かす

LINE Thingsの画面を表示しておき、obnizのプログラムを実行します。
このように選択肢が出てきます
IMG_1712.PNG

選択すると、ペアリング要求の後、デバイスと連携します
IMG_1713.PNG

IMG_1714.PNG

今すぐ利用を押せば、インターフェース画面に遷移して、動かすことができます。
今回のプログラムは、obnizのボタンを押したらLINE上のボタンが操作されてカウントが上がっていき、逆にLINE上のボタンを押したらobnizのディスプレイにON/OFFが表示されます。

まとめ

obnizとLINE Thingsが簡単に連携できるようになりました。どちらもプログラムをサクッと作ってサクッとデバッグできてサクッと修正できるので、BLE関係のプロトタイプ作るときに便利なんじゃないかなと思います。

15
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?