jinsmemesdk-node-noble v0.9.16
jinsmemesdk-node-noble
JINS MEME SDK for Node.js using noble BLE library.
nobleを利用したNode.js用JINS MEME SDKです。
概要
- Node.jsにおいて、JINS MEMEと通信を行うSDKです。
- Electronのmainプロセスにも配置できるよう、インタラクションが必要な部分はイベントハンドラを使用しています。
- 複数台のJINS MEMEとの通信に対応しています。
License
JINS MEME 利用規約に準じます。
Prerequisites 必要な外部パッケージ
以下のパッケージに依存しています。
- noble
- Mac/LinuxのBLEライブラリ
- MIT License
^1.9.1
- node-rest-client
- SDK認証の通信に必要なライブラリ
- MIT License
- ^3.1.0
noble-uwp(Windows 10 build 10.0.15063 or later)を使用する場合は jinsmemesdk-node-noble-uwp をご利用ください。
Samples
JinsMemeSDK-Samples-NodeJSに動作サンプルがあります。
動作の流れ
以下が最小限の実行シーケンスとなります
- requireによるjinsmemesdk-node-nobleの読み込み
- 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);
}
});