node-ksy-hat v0.1.1
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 で動作します。
依存関係
インストール
$ npm install node-ksy-hat目次
- クイックスタート
KsyHatオブジェクトKsyHatLedオブジェクトKsyHatIrtxオブジェクトKsyHatSwitchオブジェクトKsyHatMotionオブジェクトKsyHatSht3xオブジェクトKsyHatVeml7700オブジェクトKsyHatOmron2smpdオブジェクト- リリースノート
- リファレンス
- ライセンス
クイックスタート
センサ計測値の取得
次のサンプルコードは、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 オブジェクトを生成しなければいけません。上記コードでは、変数 KsyHat が KsyHat オブジェクトに相当します。
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();読み取りに成功すると、次のプロパティを含んだオブジェクトが返されます。
| プロパティ名 | 型 | 説明 |
|---|---|---|
illuminance | Number | 照度 (lx) |
pressure | Number | 大気圧 (hPa) |
temperature | Number | 温度 (degC) |
humidity | Number | 湿度 (%RH) |
実際には、次のようなオブジェクトが得られます。
{
illuminance: 125.3,
pressure: 1012.4,
temperature: 29.5,
humidity: 35.9
}HAT の I2C ベースのセンサは 1 秒未満で繰り返し読み取りを行うとエラーになる場合がります。そのため、何度も呼び出す必要がある場合は、1 秒以上の間隔をあけてください。
illuminance は環境光センサ (VISHAY VEML7700-TT) から読み取った値です。pressure は絶対圧センサ (オムロン 2SMPB-02E) から読み取った値です。temperature と humidity は温湿度センサ (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 に搭載された各種センサを表すオブジェクトを返すプロパティを持っています。
| プロパティ | 型 | 説明 |
|---|---|---|
led | KsyHatLed | マルチカラー LED (Everlight EASV3015RGBA0) を表す KsyHatLed オブジェクトを返します。 |
irtx | KsyHatIrtx | パワー赤外発光ダイオード (OSRAM SFH 4726AS A01) を表す KsyHatIrtx オブジェクトを返します。 |
switch | KsyHatSwitch | タクトスイッチ (Alps/Alpine SKRTLAE010) を表す KsyHatSwitch オブジェクトを返します。 |
motion | KsyHatMotion | 焦電センサ (村田 IRA-S210ST01) を表す KsyHatMotion オブジェクトを返します。 |
sht3x | KsyHatSht3x | 温湿度センサ (Sensirion SHT30-DIS-B2.5KS) を表す KsyHatSht3x オブジェクトを返します。 |
veml7700 | KsyHatVeml7700 | 環境光センサ (VISHAY VEML7700-TT) を表す KsyHatVeml7700 オブジェクトを返します。 |
omron2smpd | KsyHatOmron2smpd | 絶対圧センサ (オムロン 2SMPB-02E) を表す KsyHatOmron2smpd オブジェクトを返します。 |
KsyHatLed オブジェクト
KsyHatLed オブジェクトはマルチカラー LED (Everlight EASV3015RGBA0) を表すオブジェクトで、KsyHat オブジェクトの led プロパティから得ることができます。このオブジェクトは以下のメソッドを持っています。
setStates() メソッド
setStates() メソッドは、マルチカラー LED の状態 (ON/OFF) をセットします。このメソッドは Promise オブジェクトを返します。
このメソッドは、次のプロパティを持つオブジェクトを引数に与えなければいけません。
| プロパティ | 型 | 必須 | 説明 |
|---|---|---|---|
r | Boolean | 任意 | 赤色 LED の点灯状態 (true: 点灯, false: 消灯) |
g | Boolean | 任意 | 緑色 LED の点灯状態 (true: 点灯, false: 消灯) |
b | Boolean | 任意 | 青色 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 }output が T の結果は、焦電センサが移動方向検出を出力したことを表します。output が D の結果は、焦電センサがコンパレータ出力したことを表します。
stop() メソッド
stop() メソッドは、焦電センサの反応のモニタリングを終了します。このメソッドは何も返しません。このメソッドに引数はありません。
このメソッドの使い方は、start() メソッドの説明のサンプルコードをご覧ください。
detected イベント
start() メソッドを呼び出してから stop() メソッドを呼び出すまでの間、焦電センサの反応があれば、KsyHatMotion オブジェクトで detected イベントが発生します。
リスナー関数には、次のプロパティを含んだオブジェクトが引き渡されます。
| プロパティ | 型 | 説明 |
|---|---|---|
output | String | T なら BD9251FV の T_OUT (移動方向検出出力) を表し、D なら BD9251FV の D_OUT (コンパレータ出力) を表します。 |
value | Boolean | 該当の出力が HIGH なら true、LOW なら false がセットされます。 |
このイベントの扱い方については、start() メソッドの説明のサンプルコードをご覧ください。
KsyHatSht3x オブジェクト
KsyHatSht3x オブジェクトは温湿度センサ (Sensirion SHT30-DIS-B2.5KS) を表すオブジェクトで、KsyHat オブジェクトの sht3x プロパティから得ることができます。このオブジェクトは以下のメソッドを持っています。
read() メソッド
read() メソッドは、温湿度センサ (Sensirion SHT30-DIS-B2.5KS) から I2C を通して温度と湿度を読み取ります。このメソッドは Promise オブジェクトを返します。このメソッドに引数はありません。
このメソッドは、次のプロパティを含んだオブジェクトを返します。
| プロパティ名 | 型 | 説明 |
|---|---|---|
temperature | Number | 温度 (degC) |
humidity | Number | 湿度 (%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 オブジェクトを返します。このメソッドに引数はありません。
このメソッドは、次のプロパティを含んだオブジェクトを返します。
| プロパティ名 | 型 | 説明 |
|---|---|---|
illuminance | Number | 照度 (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 オブジェクトを返します。このメソッドに引数はありません。
このメソッドは、次のプロパティを含んだオブジェクトを返します。
| プロパティ名 | 型 | 説明 |
|---|---|---|
pressure | Number | 大気圧 (hPa) |
temperature | Number | 温度 (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)
- 初回リリース
リファレンス
- KSY Smart Remote Control HAT[KSPST000000002] 商品ページ
- GitHub - KSY スマートリモコン HAT
- Sensirion デジタル温湿度センサー SHT30
- オムロン 形2SMPB-02E MEMS 絶対圧センサ
- 村田製作所 焦電型赤外線センサ IRA-S210ST01
- ローム 人感センサ用 IC 焦電型赤外線センサ用アンプ IC BD9251FV
- VISHAY 環境光センサ VEML7700-TT
ライセンス
The MIT License (MIT)
Copyright (c) 2022 Futomi Hatano