パーツを作り公開する

パーツに求められる変数・関数を実装することで自分のパーツライブラリを作成し、公開することができます。

パーツの必要関数・変数

必要なものは以下となります。

  • keys変数: wiredで利用されるオブジェクトのキー名一覧
  • requiredKeys変数: 上記の中で必須のキーです(これがない場合にwired時にエラーにすることができます)
  • info()クラス関数: wired時に利用される部品の名前を設定します。
  • wired()関数: obniz.wired()時の処理を記載します。主に電子部品の初期化処理が入ります。

最小構成

上記を満たす最小の構成は以下となります。

class LED {
  constructor() {
    this.keys = ['anode', 'cathode'];
    this.requiredKeys = ['anode'];
  }

  static info() {
    return {
      name: 'LED',
    };
  }

  wired(obniz) {

  }
}

if (typeof module === 'object') {
  module.exports = LED;
}

constructor内にあるkeysはobniz.wiredで渡されるオブジェクトの中で必要なもののキー名です。

this.keys = ['anode', 'cathode'];

requiredKeysはobniz.wiredで渡されるオブジェクトの中で絶対に必要なもののキー名です。それがもしなければ自動的にエラーとなります。今回の場合はanodeは必須です。cathodeは受け取るものの、必須ではないということです。

this.requiredKeys = ['anode'];

info()関数内のnameで部品の名前を決められます。この名前でobniz.wired(‘LED’)として部品を利用できます。クラスの名前はobniz.wiredのときには関係ありません。

static info() {
  return {
    name: 'LED',
  };
}

wired()関数はobniz.wiredが呼ばれた時に呼ばれる関数です。
obniz.wired()で渡されたオブジェクトはthis.paramsでアクセスできます。

また、最後にあるmodule.exportsはHTMLでは必須ではありませんが、
これを書いておくことでNode.jsでも利用したくなった時にとても便利です。

if (typeof module === 'object') {
  module.exports = LED;
}

実装例

例えばLEDを参考に新しい機能を持ったLEDライブラリを作る例が以下となります。標準LEDにはないonesec()という1秒だけLEDをつける関数が追加されています。

class MYLED {
  constructor() {
    this.keys = ['anode', 'cathode'];
    this.requiredKeys = ['anode', 'cathode'];
  }

  static info() {
    return {
      name: 'MYLED',
    };
  }

  wired(obniz) {
    this.obniz = obniz;
    this.io_anode = obniz.getIO(this.params.anode);
    this.io_anode.output(false);
    this.io_cathode = obniz.getIO(this.params.cathode);
    this.io_cathode.output(false);
  }

  onesec() {
    this.io_anode.output(true);
    obniz.wait(1000);
    this.io_anode.output(false);
  }
}

if (typeof module === 'object') {
  module.exports = MYLED;
}

公開・取り込み方

公開方法

公開はobnizのリポジトリを利用すると作成したJavaScriptコードを簡単に公開することができます。またはGitHubなども無料で利用できます。

取得方法

obnizのリポジトリの場合公開用のURLが発行されます。HTMLの場合はscriptタグにより取り込めます。
Githubの場合もjsdeliverなどを使いCDNなどからscriptタグで取り込むことができます。

<script src="公開されているURL"></script>

Nodejsで利用する場合はnpmでURLを指定して取り込む必要があります。その場合はGithubにて公開されている方が便利です。

利用方法

1. obnizのパーツとして登録

登録方法はこちらを参照ください。この時にobnizが部品に対して行うのは以下です。

  1. まずインスタンス化する。 つまり、部品のconstructor()部分が実行される。
  2. obniz.wired()で渡されたオブジェクトのうち、keysにあるkeyのみを抽出し,requiredKeysで定義されるあるはずのkeyがなければエラーとする。
  3. 上記オブジェクトをparamsというキーでインスタンス化したオブジェクトにつける
  4. wired()関数を呼ぶ
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  Obniz.PartsRegistrate(MYLED);
  var led = obniz.wired("MYLED", { anode:0, cathode:1 } );
  led.onesec();
}

2. 通常のクラスとして利用

obnizに対してパーツとして登録せずに通常のクラスとして利用することも可能です。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  var led = new MYLED();
  led.params = { anode:0, cathode:1 };
  led.wired(obniz);
  led.onesec();
}