0.1.1 • Published 1 year ago

node-ksy-hat v0.1.1

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

node-ksy-hat

node-ksy-hat は KSY 社の Raspberry Pi 向けマルチセンサー HAT「Smart Remote Control HAT」を制御および計測値を取得するモジュールです。

※ このモジュールは KSY 社公式または公認の node モジュールではありません。非公式・非公認の node モジュールです。

このモジュールは以下の機能を提供します。

  • マルチカラー LED の操作
  • パワー赤外発光ダイオードの操作
  • タクトスイッチの状態変化検知
  • 焦電センサ (モーションセンサ) の状態変化検知
  • 温湿度センサ (Sensirion SHT30) の計測値取得
  • 環境光センサ (VISHAY VEML7700-TT) の計測値取得
  • 絶対圧センサ (オムロン 2SMPB-02E) の計測値取得

本モジュールは、現時点では以下の機能は提供していません。

  • 赤外リモコン受光モジュール (VISHAY TSOP38238)

サポート OS

node-ksy-hat は、Raspberry Pi OS で動作します。

依存関係

  • Node.js 18 以上
    • node v18 より前のバージョンでも動作するはずですが、テストしていませんので、サポート対象外とします。
  • rpi-gpio
  • i2c-bus

インストール

$ npm install node-ksy-hat

目次


クイックスタート

センサ計測値の取得

次のサンプルコードは、HAT に内蔵されたセンサの計測値をまとめて読み取り、それを出力します。

// node-ksy-hat をロードし、KsyHat コンストラクタオブジェクトを取得
const KsyHat = require('node-ksy-hat');

// KsyHat オブジェクトを生成
const ksyhat = new KsyHat();

(async () => {
  // KsyHat オブジェクトを初期化
  await ksyhat.init();

  // センサ計測値を読み取り出力
  const res = await ksyhat.readSensorData();
  console.log(res);

  // KsyHat オブジェクトの終了処理
  await ksyhat.destroy();
})();

まず、KsyHat コンストラクタオブジェクトから KsyHat オブジェクトを生成しなければいけません。上記コードでは、変数 KsyHatKsyHat オブジェクトに相当します。

init() メソッドを呼び出すと、KsyHat オブジェクトが利用可能な状態になります。このメソッドの呼び出しを忘れないようにしてください。なお、KsyHat に実装された非同期型のメソッドは、Promise オブジェクトを返します。

KsyHat オブジェクトの readSensorData() メソッドは、HAT に内蔵の各種センサから温度、湿度、大気圧、照度の計測結果を読み取ります。

上記サンプルコードは、次のような結果を出力します:

{
  illuminance: 125.3,
  pressure: 1012.4,
  temperature: 29.5,
  humidity: 35.9
}

HAT の利用が終了したら、必ず KsyHat オブジェクトの destroy() メソッドを呼び出してください。

LED の点灯

次のサンプルコードは、HAT に内蔵のマルチカラー LED を 1 秒ごとに赤、緑、青の順に点灯し続けます。

const KsyHat = require('node-ksy-hat');
const ksyhat = new KsyHat();

(async () => {
  await ksyhat.init();

  while (true) {
    // 赤点灯
    await ksyhat.led.setStates({ r: true, g: false, b: false });
    await ksyhat.wait(1000);

    // 緑点灯
    await ksyhat.led.setStates({ r: false, g: true, b: false });
    await ksyhat.wait(1000);

    // 青点灯
    await ksyhat.led.setStates({ r: false, g: false, b: true });
    await ksyhat.wait(1000);
  }
})();

KsyHat オブジェクトの led プロパティから KsyHatLed オブジェクトが得られます。KsyHatLed オブジェクトは HAT 内蔵のマルチカラー LED を表していますが、その setStates() メソッドを使って LED を操作することができます。

setStates() メソッドには、赤、緑、青それぞれの状態を示したオブジェクトを引数に指定します。

タクトスイッチ押下の検知

次のサンプルコードは、HAT 内蔵のタクトスイッチの押下を検知して、その状態を出力します。このサンプルコードでは、押下のモニタリングを 10 秒で終了します。

const KsyHat = require('node-ksy-hat');
const ksyhat = new KsyHat();

(async () => {
  await ksyhat.init();

  // KsyHatSwitch オブジェクトの pressed イベントのリスナーをセット
  ksyhat.switch.on('pressed', (state) => {
    if (state === true) {
      console.log('タクトスイッチが押されました。');
    } else {
      console.log('タクトスイッチが離されました。');
    }
  });

  // タクトスイッチのモニタリングを開始
  ksyhat.switch.start();
  console.log('タクトスイッチのモニタリングを開始しました。');

  // 10 秒間待つ
  await ksyhat.wait(10000);

  // タクトスイッチのモニタリングを終了
  ksyhat.switch.stop();
  console.log('タクトスイッチのモニタリングを終了しました。');

  // KsyHat オブジェクトの終了処理
  await ksyhat.destroy();
})();

KsyHat オブジェクトの switch プロパティから KsyHatSwitch オブジェクトが得られます。KsyHatSwitch オブジェクトは HAT 内蔵のタクトスイッチを表していますが、その pressed イベント をモニタリングすることで、タクトスイッチの押下状態を検知することができます。

上記コードは次のような結果を出力します:

タクトスイッチのモニタリングを開始しました。
タクトスイッチが押されました。
タクトスイッチが離されました。
タクトスイッチのモニタリングを終了しました。

KsyHat オブジェクト

node-ksy-hat を使うためには、次のように、node-ksy-hat モジュールをロードしなければいけません:

const KsyHat = require('node-ksy-hat');

上記コードから KsyHat コンストラクタが得られます。その後、次のように、KsyHat コンストラクタから KsyHat オブジェクトを生成しなければいけません:

const ksyhat = new KsyHat();

ここで得られた KsyHat オブジェクトのメソッドやプロパティを通して HAT にアクセスします。

init() メソッド

KsyHat オブジェクトは当初は利用することができません。以下のように、init() メソッドを使って初期化しなければいけません。

(async () => {
  await ksyhat.init();
  ...
})();

init() メソッドは Promise オブジェクトを返します。本ドキュメントでは、Promise オブジェクトを返すメソッドは await で呼び出します。そのため、上記コードのように、async の関数内で呼び出されることを前提とします。以降、async のコードは記述しませんので注意してください。

KsyHat オブジェクトが初期化されれば、以降の章で説明するメソッドやプロパティを利用することができるようになります。

readSensorData() メソッド

readSensorData() メソッドは、HAT 内蔵の各種 I2C ベースのセンサから計測値を読み取ります。このメソッドは Promise オブジェクトを返します。このメソッドに引数はありません。

const res = await ksyhat.readSensorData();

読み取りに成功すると、次のプロパティを含んだオブジェクトが返されます。

プロパティ名説明
illuminanceNumber照度 (lx)
pressureNumber大気圧 (hPa)
temperatureNumber温度 (degC)
humidityNumber湿度 (%RH)

実際には、次のようなオブジェクトが得られます。

{
  illuminance: 125.3,
  pressure: 1012.4,
  temperature: 29.5,
  humidity: 35.9
}

HAT の I2C ベースのセンサは 1 秒未満で繰り返し読み取りを行うとエラーになる場合がります。そのため、何度も呼び出す必要がある場合は、1 秒以上の間隔をあけてください。

illuminance は環境光センサ (VISHAY VEML7700-TT) から読み取った値です。pressure は絶対圧センサ (オムロン 2SMPB-02E) から読み取った値です。temperaturehumidity は温湿度センサ (Sensirion SHT30) から読み取った値です。

readSensorData() メソッドは、内部的には、KsyHatVeml7700 オブジェクトの read() メソッド、KsyHatSht3x オブジェクトの read() メソッド、 KsyHatOmron2smpd オブジェクトの read() メソッドを呼び出しているだけです。

温度は絶対圧センサ (オムロン 2SMPB-02E) からも読み取ることが可能ですが、readSensorData() メソッドでは使いません。もしオムロン 2SMPB-02E の温度計測値を読み取りたい場合は、後述の KsyHatOmron2smpd オブジェクトの read() メソッドを使ってください。

destroy() メソッド

destroy() メソッドは、Raspberry Pi の GPIO をリセットし、I2C への接続を閉じます。このメソッドは Promise オブジェクトを返します。このメソッドに引数はありません。

HAT の利用が終了したら、必ずこのメソッドを呼び出してください。

await ksyhat.destroy();

wait() メソッド

wait() メソッドは指定のミリ秒間だけ待ちます。このメソッドは待ち時間を表す整数 (ミリ秒) を引数に取ります。このメソッドは Promise オブジェクトを返します。

このメソッドは HAT に対して何もしません。これは単なるユーティリティメソッドです。

await ksyhat.wait(1000);

プロパティ

KsyHat オブジェクトは、HAT に搭載された各種センサを表すオブジェクトを返すプロパティを持っています。

プロパティ説明
ledKsyHatLedマルチカラー LED (Everlight EASV3015RGBA0) を表す KsyHatLed オブジェクトを返します。
irtxKsyHatIrtxパワー赤外発光ダイオード (OSRAM SFH 4726AS A01) を表す KsyHatIrtx オブジェクトを返します。
switchKsyHatSwitchタクトスイッチ (Alps/Alpine SKRTLAE010) を表す KsyHatSwitch オブジェクトを返します。
motionKsyHatMotion焦電センサ (村田 IRA-S210ST01) を表す KsyHatMotion オブジェクトを返します。
sht3xKsyHatSht3x温湿度センサ (Sensirion SHT30-DIS-B2.5KS) を表す KsyHatSht3x オブジェクトを返します。
veml7700KsyHatVeml7700環境光センサ (VISHAY VEML7700-TT) を表す KsyHatVeml7700 オブジェクトを返します。
omron2smpdKsyHatOmron2smpd絶対圧センサ (オムロン 2SMPB-02E) を表す KsyHatOmron2smpd オブジェクトを返します。

KsyHatLed オブジェクト

KsyHatLed オブジェクトはマルチカラー LED (Everlight EASV3015RGBA0) を表すオブジェクトで、KsyHat オブジェクトの led プロパティから得ることができます。このオブジェクトは以下のメソッドを持っています。

setStates() メソッド

setStates() メソッドは、マルチカラー LED の状態 (ON/OFF) をセットします。このメソッドは Promise オブジェクトを返します。

このメソッドは、次のプロパティを持つオブジェクトを引数に与えなければいけません。

プロパティ必須説明
rBoolean任意赤色 LED の点灯状態 (true: 点灯, false: 消灯)
gBoolean任意緑色 LED の点灯状態 (true: 点灯, false: 消灯)
bBoolean任意青色 LED の点灯状態 (true: 点灯, false: 消灯)

次のコードは、赤色 LED のみを点灯します。

await ksyhat.led.setStates({ r: true });

KsyHatIrtx オブジェクト

KsyHatIrtx オブジェクトはパワー赤外発光ダイオード (OSRAM SFH 4726AS A01) を表すオブジェクトで、KsyHat オブジェクトの irtx プロパティから得ることができます。このオブジェクトは以下のメソッドを持っています。

setState() メソッド

setStates() メソッドは、パワー赤外発光ダイオードの発光状態 (ON/OFF) をセットします。このメソッドは Promise オブジェクトを返します。

このメソッドは、次の引数を受け取ります。

No.必須説明
第 1 引数Boolean必須発光状態 (true: 点灯, false: 消灯)

次のコードは赤外線を発光します。

await ksyhat.irtx.setState(true);

KsyHatSwitch オブジェクト

KsyHatSwitch オブジェクトはタクトスイッチ (Alps/Alpine SKRTLAE010) を表すオブジェクトで、KsyHat オブジェクトの switch プロパティから得ることができます。このオブジェクトは以下のメソッドを持っています。

start() メソッド

start() メソッドは、タクトスイッチの状態変化のモニタリングを開始します。このメソッドは何も返しません。このメソッドに引数はありません。

次のコードは、10 秒間、タクトスイッチの状態変化をモニタリングし、スイッチが押されたら Pressed を、スイッチが離されたら Released を出力します。

// KsyHatSwitch オブジェクトの pressed イベントのリスナーをセット
ksyhat.switch.on('pressed', (state) => {
  if (state === true) {
    console.log('Pressed');
  } else {
    console.log('Released');
  }
});

// タクトスイッチのモニタリングを開始
ksyhat.switch.start();

// 10 秒間待つ
await ksyhat.wait(10000);

// タクトスイッチのモニタリングを終了
ksyhat.switch.stop();

stop() メソッド

stop() メソッドは、タクトスイッチの状態変化のモニタリングを終了します。このメソッドは何も返しません。このメソッドに引数はありません。

このメソッドの使い方は、start() メソッドの説明のサンプルコードをご覧ください。

pressed イベント

start() メソッドを呼び出してから stop() メソッドを呼び出すまでの間、タクトスイッチの状態変化があれば、KsyHatSwitch オブジェクトで pressed イベントが発生します。

リスナー関数には、タクトスイッチの状態を表す Boolean 値が引き渡されます。true ならスイッチが押されたことを意味し、false ならスイッチが離されたことを意味します。

このイベントの扱い方については、start() メソッドの説明のサンプルコードをご覧ください。


KsyHatMotion オブジェクト

KsyHatMotion オブジェクトは焦電センサ (村田 IRA-S210ST01) を表すオブジェクトで、KsyHat オブジェクトの motion プロパティから得ることができます。このオブジェクトは以下のメソッドを持っています。

start() メソッド

start() メソッドは、焦電センサの反応のモニタリングを開始します。このメソッドは何も返しません。このメソッドに引数はありません。

次のコードは、10 秒間、焦電センサの反応をモニタリングし、反応を検知したらその結果を出力します。

// KsyHatMotion オブジェクトの detected イベントのリスナーをセット
ksyhat.motion.on('detected', (data) => {
  console.log(data);
});

// 焦電センサの反応のモニタリングを開始
ksyhat.motion.start();

// 10 秒間待つ
await ksyhat.wait(10000);

// 焦電センサの反応のモニタリングを終了
ksyhat.motion.stop();

焦電センサが動きを検知すると、次のような結果が連続して出力されます。

{ output: 'T', value: true }
{ output: 'T', value: false }
{ output: 'T', value: true }
{ output: 'D', value: true }
{ output: 'T', value: true }

outputT の結果は、焦電センサが移動方向検出を出力したことを表します。outputD の結果は、焦電センサがコンパレータ出力したことを表します。

stop() メソッド

stop() メソッドは、焦電センサの反応のモニタリングを終了します。このメソッドは何も返しません。このメソッドに引数はありません。

このメソッドの使い方は、start() メソッドの説明のサンプルコードをご覧ください。

detected イベント

start() メソッドを呼び出してから stop() メソッドを呼び出すまでの間、焦電センサの反応があれば、KsyHatMotion オブジェクトで detected イベントが発生します。

リスナー関数には、次のプロパティを含んだオブジェクトが引き渡されます。

プロパティ説明
outputStringT なら BD9251FV の T_OUT (移動方向検出出力) を表し、D なら BD9251FV の D_OUT (コンパレータ出力) を表します。
valueBoolean該当の出力が HIGH なら true、LOW なら false がセットされます。

このイベントの扱い方については、start() メソッドの説明のサンプルコードをご覧ください。


KsyHatSht3x オブジェクト

KsyHatSht3x オブジェクトは温湿度センサ (Sensirion SHT30-DIS-B2.5KS) を表すオブジェクトで、KsyHat オブジェクトの sht3x プロパティから得ることができます。このオブジェクトは以下のメソッドを持っています。

read() メソッド

read() メソッドは、温湿度センサ (Sensirion SHT30-DIS-B2.5KS) から I2C を通して温度と湿度を読み取ります。このメソッドは Promise オブジェクトを返します。このメソッドに引数はありません。

このメソッドは、次のプロパティを含んだオブジェクトを返します。

プロパティ名説明
temperatureNumber温度 (degC)
humidityNumber湿度 (%RH)
const res = await ksyhat.sht3x.read();
console.log(res);

上記コードは、次のような結果を出力します。

{ temperature: 29.7, humidity: 36.4 }

HAT の I2C ベースのセンサは 1 秒未満で繰り返し読み取りを行うとエラーになる場合がります。そのため、何度も呼び出す必要がある場合は、1 秒以上の間隔をあけてください。


KsyHatVeml7700 オブジェクト

KsyHatVeml7700 オブジェクトは環境光センサ (VISHAY VEML7700-TT) を表すオブジェクトで、KsyHat オブジェクトの veml7700 プロパティから得ることができます。このオブジェクトは以下のメソッドを持っています。

read() メソッド

read() メソッドは、温湿度センサ (Sensirion SHT30-DIS-B2.5KS) から I2C を通して照度を読み取ります。このメソッドは Promise オブジェクトを返します。このメソッドに引数はありません。

このメソッドは、次のプロパティを含んだオブジェクトを返します。

プロパティ名説明
illuminanceNumber照度 (lx)
const res = await ksyhat.veml7700.read();
console.log(res);

上記コードは、次のような結果を出力します。

{ illuminance: 195.4 }

HAT の I2C ベースのセンサは 1 秒未満で繰り返し読み取りを行うとエラーになる場合がります。そのため、何度も呼び出す必要がある場合は、1 秒以上の間隔をあけてください。


KsyHatOmron2smpd オブジェクト

KsyHatOmron2smpd オブジェクトは絶対圧センサ (オムロン 2SMPB-02E) を表すオブジェクトで、KsyHat オブジェクトの omron2smpd プロパティから得ることができます。このオブジェクトは以下のメソッドを持っています。

read() メソッド

read() メソッドは、絶対圧センサ (オムロン 2SMPB-02E) から I2C を通して大気圧と温度を読み取ります。このメソッドは Promise オブジェクトを返します。このメソッドに引数はありません。

このメソッドは、次のプロパティを含んだオブジェクトを返します。

プロパティ名説明
pressureNumber大気圧 (hPa)
temperatureNumber温度 (degC)
const res = await ksyhat.omron2smpd.read();
console.log(res);

上記コードは、次のような結果を出力します。

{ pressure: 1005.8, temperature: 30.5 }

HAT の I2C ベースのセンサは 1 秒未満で繰り返し読み取りを行うとエラーになる場合がります。そのため、何度も呼び出す必要がある場合は、1 秒以上の間隔をあけてください。


リリースノート

  • v0.1.0 (2022-11-24)
    • 初回リリース

リファレンス


ライセンス

The MIT License (MIT)

Copyright (c) 2022 Futomi Hatano