パーツに求められる変数・関数を実装することで自分のパーツライブラリを作成し、公開することができます。
パーツの必要関数・変数
必要なものは以下となります。
- keys変数: wiredで利用されるオブジェクトのキー名一覧
- requiredKeys変数: 上記の中で必須のキーです(これがない場合にwired時にエラーにすることができます)
- info()クラス関数: wired時に利用される部品の名前を設定します。
- wired()関数: obniz.wired()時の処理を記載します。主に電子部品の初期化処理が入ります。
最小構成
上記を満たす最小の構成は以下となります。
// Javascript Example
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で渡されるオブジェクトの中で必要なもののキー名です。
// Javascript Example
this.keys = ['anode', 'cathode'];
requiredKeysはobniz.wiredで渡されるオブジェクトの中で絶対に必要なもののキー名です。それがもしなければ自動的にエラーとなります。今回の場合はanodeは必須です。cathodeは受け取るものの、必須ではないということです。
// Javascript Example
this.requiredKeys = ['anode'];
info()関数内のnameで部品の名前を決められます。この名前でobniz.wired('LED')として部品を利用できます。クラスの名前はobniz.wiredのときには関係ありません。
// Javascript Example
static info() {
return {
name: 'LED',
};
}
wired()関数はobniz.wiredが呼ばれた時に呼ばれる関数です。
obniz.wired()で渡されたオブジェクトはthis.paramsでアクセスできます。
また、最後にあるmodule.exportsはHTMLでは必須ではありませんが、
これを書いておくことでNode.jsでも利用したくなった時にとても便利です。
// Javascript Example
if (typeof module === 'object') {
module.exports = LED;
}
実装例
例えばLEDを参考に新しい機能を持ったLEDライブラリを作る例が以下となります。標準LEDにはないonesec()という1秒だけLEDをつける関数が追加されています。
// Javascript Example
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タグで取り込むことができます。
// Javascript Example
<script src="公開されているURL"></script>
Nodejsで利用する場合はnpmでURLを指定して取り込む必要があります。その場合はGithubにて公開されている方が便利です。
利用方法
1. obnizのパーツとして登録
登録方法はこちらを参照ください。この時にobnizが部品に対して行うのは以下です。
- まずインスタンス化する。 つまり、部品の
constructor()
部分が実行される。 - obniz.wired()で渡されたオブジェクトのうち、keysにあるkeyのみを抽出し,requiredKeysで定義されるあるはずのkeyがなければエラーとする。
- 上記オブジェクトをparamsというキーでインスタンス化したオブジェクトにつける
- wired()関数を呼ぶ
// Javascript Full Example
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に対してパーツとして登録せずに通常のクラスとして利用することも可能です。
// Javascript Full Example
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();
}