0.9.16 • Published 5 years ago

jinsmemesdk-node-noble-uwp v0.9.16

Weekly downloads
24
License
JINS MEME terms o...
Repository
-
Last release
5 years ago

jinsmemesdk-node-noble-uwp

JINS MEME SDK for Node.js using noble BLE library.

noble-uwpを利用したNode.js用JINS MEME SDKです。

概要

  • Node.jsにおいて、JINS MEMEと通信を行うSDKです。
  • Electronのmainプロセスにも配置できるよう、インタラクションが必要な部分はイベントハンドラを使用しています。
  • 複数台のJINS MEMEとの通信に対応しています(6台の同時通信まで確認済み@Windows10)。

License

JINS MEME 利用規約に準じます。

Prerequisites 必要な外部パッケージ

以下のパッケージに依存しています。

  • noble-uwp
    • Windows10(Fall creators update以降)のBLEライブラリ
    • MIT License
    • ^0.6.2

  • node-rest-client
    • SDK認証の通信に必要なライブラリ
    • MIT License
    • ^3.1.0

noble(Mac/Linux)を使用する場合は jinsmemesdk-node-noble をご利用ください。

Samples

JinsMemeSDK-Samples-NodeJSに動作サンプルがあります。

動作の流れ

以下が最小限の実行シーケンスとなります

  • requireによるjinsmemesdk-node-noble-uwpの読み込み
  • setAppClientID によるアプリ認証を実行
  • memeDeviceインスタンスの作成
  • scanによるMEMEの検索
  • connectによるMEMEへの接続
  • startDataReport/stopDataReportによるデータの受信開始/終了
  • disconnectによるMEMEとの切断

scanAndConnectで後半を自動処理することも可能です

メソッド詳細

memeDevice

インスタンスの作成を行います。複数インスタンスで利用する場合はmain内の各種処理で振り分けが必要になります。

let memeDevice = new memeDevice();

setAppClientID

JINS MEME DEVELOPERSで取得した認証情報を利用しアプリ認証を行ないます。 JINS MEME SDK for NodeJS を利用するには、まずはじめにこのAPIを1度実行する必要があります。無効なコードだった場合は以降のプロセスでJINS MEMEと接続ができません。複数MEMEで使用する場合はどれかのインスタンスで1回実行すればOKです。

memeDevice.setAppClientID(appClientId, clientSecret, successCallback, errorCallback);

  • appClientId: JINS MEME DEVELOPERS で取得したclient_id
  • clientSecret: JINS MEME DEVELOPERS で取得したclient_secret
  • successCallback: 認証成功時の処理
  • errorCallback: 認証失敗時の処理

scan

デバイスのBLE scanを開始し、MEMEの検索を開始します。scanは20秒で自動で止まります。見つかった端末はdevice-discoveredのイベントリスナ経由でdevice情報を通知します。

memeDevice.scan();

connect

接続するMEMEのMACアドレスを指定し接続します。

memeDevice.connect(mac_address_without_coron [, mode]);

  • mac_address_without_coron: コロンを含まない小文字 のMAC Address文字列をセットします
  • mode: 接続のオプション設定を行います
    • mode = 0: do nothing on error(default)
    • mode = 1: retry connect once

scanAndConnect

接続するMEMEが決まっている場合にMACアドレスを指定してscanを開始し、該当デバイスが見つかった場合connectを同時に行います。

memeDevice.scanAndConnect(mac_address_without_coron);

  • mac_address_without_coron: コロンを含まない小文字 のMAC Address文字列をセットします

startDataReport

接続状態にある時、データ送信を開始します。

memeDevice.startDataReport(callback);

  • callback: リアルタイムモード受信時のコールバック関数をセットします

callbackではdataオブジェクトとして以下のデータが渡されます。

data = {
      blinkSpeed: /*瞬目速度*/,
      blinkStrength: /*瞬目強度*/,
      roll: /*角度R*/,
      pitch: /*角度P*/,
      yaw: /*角度Y*/,
      accX: /*加速度X*/,
      accY: /*加速度Y*/,
      accZ: /*加速度Z*/,
      fitError: /*装着フラグ(使用非推奨)*/,
      walking: /*歩行フラグ*/,
      noiseStatus: /*ノイズ状態*/,
      powerLeft: /*電池残量5段階*/,
      eyeMoveUp: /*視線移動上*/,
      eyeMoveDown: /*視線移動下*/,
      eyeMoveLeft: /*視線移動左*/,
      eyeMoveRight: /*視線移動右*/
    };

stopDataReport

接続状態にある時、データ送信を終了します。

memeDevice.stopDataReport();

disconnect

接続中のMEMEと切断します。

memeDevice.disconnect();

setAutoReconnect

電波が弱くなったり端末から遠ざかることで切断した場合、自動的に前回接続していた端末にscanAndConnect()をTryします。

  • disconnect()を呼ぶとfalseにセットされ自動再接続がされなくなりますので、必要な場合再度セットしてください。
  • 指定しなかった場合は自動再接続はされません。

memeDevice.setAutoReconnect(bool = false);

  • bool: オプション
    • true: 自動再接続する
    • false: 自動再接続しない

getHWVersion

ハードウェアバージョンを取得します。

let obj = memeDevice.getHWVersion();
//obj -> { model_main: 1, model_sub: 1, version: 1 }

getFWVersion

ファームウェアバージョンを取得します。

let obj = memeDevice.getFWVersion();
//obj -> { str: '1.1.1', major: 1, minor: 1, revision: 1 }

getSDKVersion

SDK(本ライブラリ)のバージョンを取得します。

let obj = memeDevice.getSDKVersion();
//obj -> { str: '1.0.3', major: 1, minor: 0, revision: 3 }

イベントリスナ

device-discovered

scan中にデバイスが見つかった時に通知するdevice情報のイベントリスナ、連番id、macアドレスなどを通知します。 electronの場合はこれの情報をrendererのダイアログに送ることでmain側にロジックを配置することが可能になります。

memeDevice.on('device-discovered', (device) => {
  //デバイス情報を処理する
})

deviceは以下のオブジェクト構造をとります。

device = {
      idx: /*連番id*/,
      peripheral: /*peripheral情報*/,
      mac_addr: /*mac_addr*/,
      name: /*localName*/,
      rssi: /*rssi*/
    };

device-status

接続・切断の状態が変わった時に通知します。

memeDevice1.on('device-status', (status) => {
  //
});
  • status: 0: 切断
  • status: 1: 接続
  • status: 2: スキャン~接続試行中

実装のヒント

接続後にすぐデータ送信を開始する

接続後に自動的にデータ送信を開始したい場合は、device-status == 1を受信時にstartDataReportを実行します。

memeDevice.on('device-status', (status) => {
  if(status == 1){
    memeDevice.startDataReport(callback);
  }
});
0.9.16

5 years ago

0.9.15

5 years ago

0.9.14

6 years ago

0.9.13

6 years ago

0.9.12

6 years ago

0.9.11

6 years ago

0.9.10

6 years ago

0.9.9

6 years ago