Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What is going on with this article?
@wicket

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

More than 1 year has passed since last update.

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関係のプロトタイプ作るときに便利なんじゃないかなと思います。

8
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
iotlt
IoT縛りの勉強会です。 毎月イベントを実施しているので是非遊びに来てください! 登壇者を中心にQiitaでも情報発信していきます。 https://iotlt.connpass.com

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
8
Help us understand the problem. What is going on with this article?