obniz Parts Library

UC421BLE

GitHub
UC421BLE
Usable Devices :
obniz_board
m5stickc
obnizble
esp32
esp32gateway
m5stackbasic
ak-030
obnizble_lte
obniz_plc

UC421BLE

A&D社から発売されている体組成計です。体重情報と体組成情報が測定できます。

isDevice(peripheral)

BLEで受信したアドバタイズ情報を元に、UC421BLEかどうか判定します。

// Javascript Example
await obniz.ble.initWait();
const UC421BLE = Obniz.getPartsClass("UC421BLE");
obniz.ble.scan.onfind = async (peripheral) => {
  if (UC421BLE.isDevice(peripheral)) {
    console.log("device find");
  }
};
await obniz.ble.scan.startWait();

getManufacturerSpecificDataFromAdv(peripheral)

BLEで受信したアドバタイズ情報をパースして'Manufacturer Specific Data'を取得します。

// Javascript Example
await obniz.ble.initWait();
const UC421BLE = Obniz.getPartsClass("UC421BLE");
obniz.ble.scan.onfind = async (peripheral) => {
  if (UC421BLE.isDevice(peripheral)) {
      console.log("device find");
      const msData = UC421BLE.getManufacturerSpecificDataFromAdv(peripheral);
      if (msData.opMode.runningMode === 'measurementWithApp') {
        // do something
      } else {
        // do something
      }
  }
};
await obniz.ble.scan.startWait();

new UC421BLE(peripheral)

BLEで受信したアドバタイズ情報をもとに、インスタンスを作成します。

// Javascript Example
await obniz.ble.initWait();
const UC421BLE = Obniz.getPartsClass("UC421BLE");
obniz.ble.scan.onfind = async (peripheral) => {
  if (UC421BLE.isDevice(peripheral) ) {
    console.log("device find");
    const device = new UC421BLE(peripheral);
  }
};
await obniz.ble.scan.startWait();

[await]aquireNewUserNoWait(cc)

新規ユーザNoを取得します。

// Javascript Example
await obniz.ble.initWait();
const UC421BLE = Obniz.getPartsClass("UC421BLE");
obniz.ble.scan.onfind = async (peripheral) => {
  if (UC421BLE.isDevice(peripheral) ) {
    console.log("device find");
    const device = new UC421BLE(peripheral);
    await uc421Ble.pairingWait();
    const cc = 1234;
    const userNo = await uc421Ble.aquireNewUserNoWait(cc);
    console.log(userNo); // userNo is 1, for example
  }
};
await obniz.ble.scan.startWait();

[await]authorizeUserWait(userNo, cc)

ユーザ認証を行います。

// Javascript Example
await obniz.ble.initWait();
const UC421BLE = Obniz.getPartsClass("UC421BLE");
obniz.ble.scan.onfind = async (peripheral) => {
  if (UC421BLE.isDevice(peripheral) ) {
    console.log("device find");
    const device = new UC421BLE(peripheral);
    await uc421Ble.pairingWait();
    const userNo = 1;
    const cc = 1234;
    await uc421Ble.authorizeUserWait(userNo, cc);
  }
};
await obniz.ble.scan.startWait();

[await]updateUserInfoDataWait(userInfo)

ユーザ情報を更新します。新規ユーザNoを取得した後はこの関数でユーザ情報を登録することを推奨します。
この関数を使うにはまずauthorizeUserWait関数でユーザ認証を行う必要があります。認証後、この関数を利用して認証したユーザの個人情報を更新します。

// Javascript Example
await obniz.ble.initWait();
const UC421BLE = Obniz.getPartsClass("UC421BLE");
obniz.ble.scan.onfind = async (peripheral) => {
  if (UC421BLE.isDevice(peripheral) ) {
    console.log("device find");
    const device = new UC421BLE(peripheral);
    await uc421Ble.pairingWait();
    const userNo = 1;
    const cc = 1234;
    await uc421Ble.authorizeUserWait(userNo, cc);
    const userInfo: UC421BLE.UC421BLEUserInfoData = {
        email: 'email@email.com',
        firstName: 'first name',
        lastName: 'last name',
        birth: {
        year: 2000,
        month: 1,
        day: 30,
        },
        height: 172,
        gender: 'male',
    };
    await uc421Ble.updateUserInfoDataWait(userInfo); // update user info for userNo 1
  }
};
await obniz.ble.scan.startWait();

[await]getUserInfoDataWait()

ユーザ情報を取得します。この関数を利用するにはまずauthorizeUserWait関数でユーザ認証を行う必要があります。
認証後、この関数を利用して認証したユーザの情報を取得します。

// Javascript Example
await obniz.ble.initWait();
const UC421BLE = Obniz.getPartsClass("UC421BLE");
obniz.ble.scan.onfind = async (peripheral) => {
  if (UC421BLE.isDevice(peripheral) ) {
    console.log("device find");
    const device = new UC421BLE(peripheral);
    await uc421Ble.pairingWait();
    const userNo = 1;
    const cc = 1234;
    await uc421Ble.authorizeUserWait(userNo, cc);
    const userInfo = await uc421Ble.getUserInfoDataWait();
    console.log(userInfo); // user info for userNo 1
  }
};
await obniz.ble.scan.startWait();

[await]getWeightDataWait()

測定した体重データを取得します。この関数を使うにはまずauthorizeUserWait関数でユーザ認証を行う必要があります。
認証後、そのユーザの体重データが取得できます。体重データが複数保存されていた場合は、関数の返り値で複数データが返されます。

// Javascript Example
await obniz.ble.initWait();
const UC421BLE = Obniz.getPartsClass("UC421BLE");
obniz.ble.scan.onfind = async (peripheral) => {
  if (UC421BLE.isDevice(peripheral) ) {
    console.log("device find");
    const device = new UC421BLE(peripheral);
    await uc421Ble.pairingWait();
    const userNo = 1;
    const cc = 1234;
    await uc421Ble.authorizeUserWait(userNo, cc);
    const weightData = await uc421Ble.getWeightDataWait();
    console.log(weightData); // weight data for userNo 1
    await uc421Ble.disconnectWait(); // after getting the data, you should call this
  }
};
await obniz.ble.scan.startWait();

[await]getBodyCompositionDataWait()

体組成データを取得します。この関数を使うにはまずauthorizeUserWait関数でユーザ認証を行う必要があります。
認証後、そのユーザの体組成データを取得できます。体組成データが複数保存されていた場合は、関数の返り値で複数データが返されます。

// Javascript Example
await obniz.ble.initWait();
const UC421BLE = Obniz.getPartsClass("UC421BLE");
obniz.ble.scan.onfind = async (peripheral) => {
  if (UC421BLE.isDevice(peripheral) ) {
    console.log("device find");
    const device = new UC421BLE(peripheral);
    await uc421Ble.pairingWait();
    const userNo = 1;
    const cc = 1234;
    await uc421Ble.authorizeUserWait(userNo, cc);
    const bodyCompositionData = await uc421Ble.getBodyCompositionDataWait();
    console.log(bodyCompositionData); // body composition data for userNo 1
    await uc421Ble.disconnectWait(); // after getting the data, you should call this
  }
};
await obniz.ble.scan.startWait();

体重データと体組成データの両方を取得したい場合は以下のようにします:

// Javascript Example
await obniz.ble.initWait();
const UC421BLE = Obniz.getPartsClass("UC421BLE");
obniz.ble.scan.onfind = async (peripheral) => {
  if (UC421BLE.isDevice(peripheral) ) {
    console.log("device find");
    const device = new UC421BLE(peripheral);
    await uc421Ble.pairingWait();
    const userNo = 1;
    const cc = 1234;
    await uc421Ble.authorizeUserWait(userNo, cc);

    // Just write these sequentially.
    const weightData = await uc421Ble.getWeightDataWait();
    console.log(weightData); // weight data for userNo 1
    const bodyCompositionData = await uc421Ble.getBodyCompositionDataWait();
    console.log(bodyCompositionData); // body composition data for userNo 1

    await uc421Ble.disconnectWait(); // Don't forget to call this.
  }
};
await obniz.ble.scan.startWait();

[await]changeRunningModeWait(mode)

動作モードを変更します。デフォルトでは'measurement'モードですが、本体設定を行う場合は'setting'モードに変更します。
この関数を呼んでから180秒後にデフォルトの'measurement'モードに戻ります。

// Javascript Example
await obniz.ble.initWait();
const UC421BLE = Obniz.getPartsClass("UC421BLE");
obniz.ble.scan.onfind = async (peripheral) => {
  if (UC421BLE.isDevice(peripheral) ) {
    console.log("device find");
    const device = new UC421BLE(peripheral);
    await uc421Ble.pairingWait();
    // go into setting mode
    await uc421Ble.changeRunningModeWait('setting');
    console.log('went into setting mode');
  }
};
await obniz.ble.scan.startWait();

[await]setMedicalExamModeWait(mode)

検診モード設定。この関数を使うには、まずchangeRunningModeWait関数を呼んで動作モードを'setting'にする必要がある。
検診モードは通常のユーザではなくゲストユーザを使用し、測定値はメモリに保存されない。
このモードは2つのシチュエーションに対応している。('アプリ有り計測'と'アプリ無し計測'。アドバタイズメントの中で確認できる)
obniz.jsでは現在'アプリ無し計測'のみ対応しており、この場合は体重データのみ取得可能。

// Javascript Example
await obniz.ble.initWait();
const UC421BLE = Obniz.getPartsClass("UC421BLE");
obniz.ble.scan.onfind = async (peripheral) => {
  if (UC421BLE.isDevice(peripheral) ) {
    console.log("device find");
    const device = new UC421BLE(peripheral);
    await uc421Ble.pairingWait();
    // go into setting mode
    await uc421Ble.changeRunningModeWait('setting');
    console.log('went into setting mode');
    // set medical exam mode on
    await uc421Ble.setMedicalExamModeWait('on');
    console.log('went into medical exam mode');

    const isOn = await uc421Ble.isMedicalExamModeOnWait();
    console.log('medical exam mode is', isOn);
  }
};
await obniz.ble.scan.startWait();

検診モードで体重データを取得する際のコードは以下のようになります。

// Javascript Example
await obniz.ble.initWait();
const UC421BLE = Obniz.getPartsClass("UC421BLE");
obniz.ble.scan.onfind = async (peripheral) => {
  if (UC421BLE.isDevice(peripheral) ) {
    console.log("device find");
    const device = new UC421BLE(peripheral);
    await uc421Ble.connectWait(); // medical exam mode does not need pairing. just connecting will be fine.
    const isOn = await uc421Ble.isMedicalExamModeOnWait();
    console.log('medical exam mode is', isOn); // This should be on.
    const userNo = 99;
    const cc = 9999;
    await uc421Ble.authorizeUserWait(userNo, cc);
    const weightData = await uc421Ble.getWeightDataWait();
    console.log(weightData); // weight data for userNo 1
    await uc421Ble.disconnectWait(); // after getting the data, you should call this
  }
};
await obniz.ble.scan.startWait();

Supported from: obniz.js 3.21.0