#00ダイレクトI/O
このTibbitは汎用ブロックのため、このノードに対して通信方式が指定可能となっています。
つまりこのノードを使い各スロットに対して、GPIO / I2C / SPI / Serial を直接使うことができます。
通信方式:
・GPIO
・I2C
・SPI
※各Inputs/Outputsの詳細仕様はノードの情報タブを参照してください。
#00-1から3までありますが、どれもノードの使い方は同じです。
ただし、Tibbitブロックによって使用できるLINEが違いますので、各回路図をご確認ください。
GPIO
スロットに接続された機器に対して、GPIO(IN/OUT)を使用することができます。
OUT
ここでは一つの例として、LED(#39)をこのノードを使い制御を行います。
LED(#39)はラインAに、GPIO(OUT)のHigh/Lowで消灯/点灯を行います。
Tibbitの配置
Tibbit #00-3とTibbit #39を挿入します。
ノードの配置
通常であれば#39ノードを使用しますが、今回は#00ノードを使用します。
まずは以下のようにノードを配置します。
次に#00ノードの設定を開きます。
通信に「GPIO」、スロットに「S01」、ラインAに「OUT(オープンドレイン出力)」を選択します。
functionノードを使用し、GPIOの制御を行います。
#39はラインAをLowにすると点灯し、Highにすると消灯しますので、それぞれ以下のようにします。
1 2 |
msg.payload = [{line: 'A', v: 0}]; return msg; |
1 2 |
msg.payload = [{line: 'A', v: 1}]; return msg; |
これでNode-REDのデプロイを行います。
各injectノードをクリックし、点灯・消灯することを確認してください。
OUTはオープンドレイン出力と、TTL出力を選択できます。
OUT(TTL出力)は電流制限機能がないため、短絡などで大電流が流れると内部部品が破壊されます。接続時の回路構成にご注意願います。
IN
ここでは一つの例として、ボタン(#38)をこのノードを使い値を取得します。
ボタン(#38)はラインAが、押すとLow、離すとHighになります。
ボタンが押されているかどうかを取得してみます。
Tibbitの配置
Tibbit #00-3とTibbit #38を挿入します。
ノードの配置
まずは以下のようにノードを配置します。
次に#00ノードの設定を開きます。
通信に「GPIO」、スロットに「S01」、ラインAに「IN」を選択します。
functionノードを使用し、GPIOの制御を行います。
ラインAの値を取得します。
1 2 |
msg.payload = [{line: 'A'}]; return msg; |
これでNode-REDのデプロイを行います。
各injectノードをクリックし、値を取得します。
ボタンを押した状態は[0]、離すと[1]になります。
IN_Analog
アナログ値(0 – 5V)を取得することができ、分解能は8bitです。(0 – 255)
ノードの使い方は「IN」と同じです。
IN_edge
今度はボタンのINのedgeを取得します。
ボタンを押したり離したりすると、自動で値を取得することができます。
ノードの配置
通常であれば#38ノードを使用しますが、今回は#00 inノードを使用します。
まずは以下のようにノードを配置します。
次に#00 inノードの設定を開きます。
通信に「GPIO」、スロットに「S01」、ラインAに「IN_Edge」を選択します。
これでNode-REDのデプロイを行います。
ボタン(#38)を押す・離すたびに、デバッグに値が表示されます。
(ラインごとにHigh/Lowが出力される)
他
・ラインを複数指定
OUTを指定する際に、複数指定することもできます。
#00ノードの設定です。例えばラインAからDにOUTを指定します。
以下のようにAからDにまとめて指定することができます。
(INも同じ要領でできます)
1 2 3 4 5 6 |
msg.payload = [ {line: 'A', v: 0}, {line: 'B', v: 0}, {line: 'C', v: 0}, {line: 'D', v: 0}]; return msg; |
I2C
スロットに接続された機器に対して、I2Cを使用することができます。
ここでは一つの例として、温度センサ(#29)をこのノードを使い値を取得します。
Tibbitの配置
Tibbit #00-3 と Tibbit #29を挿入します。
ノードの配置
以下のようにノードを配置します。
次に#00ノードの設定を開きます。
通信に「I2C」、スロットに「S01」を選択します。
I2Cの場合は、ラインABを使用します。
functionノードは以下のようにします。
読み込みをするように指定しています。
・act: r (読み込み)
・add: address
・cmd: command
・len: size
1 2 3 4 5 6 7 8 |
msg.payload = [ {act: 'r', add: 0x18, cmd: 0x05, len: 2 } ]; return msg; |
これでNode-REDのデプロイを行います。
injectノードをクリックするたびに、値が取得できます。
この値をもとに計算すると、最終的には温度が取得できます。
照度センサから値を取得
ここでは一つの例として、照度センサ(#28)をこのノードを使い値を取得します。
通常であれば#28ノードを使用しますが、今回は#00ノードを使用します。
Tibbit #00-3 と Tibbit #28を挿入します。
以下のサンプルフローを読み込んで確認してください。
injectノードをクリックすると、1秒ごとに照度を取得します。
1 |
[{"id":"f00f1e42.fea948","type":"inject","z":"f79c229d.089ba8","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":"1","x":240,"y":400,"wires":[["20964947.0a40e6"]]},{"id":"20964947.0a40e6","type":"function","z":"f79c229d.089ba8","name":"cnt = 0","func":"msg.cnt = 0;\nreturn msg;","outputs":1,"noerr":0,"x":430,"y":440,"wires":[["47618ac5.d4229c"]]},{"id":"50f24374.03ce7c","type":"switch","z":"f79c229d.089ba8","name":"","property":"cnt","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"2","vt":"str"},{"t":"eq","v":"3","vt":"str"},{"t":"eq","v":"4","vt":"str"}],"checkall":"true","repair":false,"outputs":4,"x":690,"y":500,"wires":[["4c68fe7a.086378"],["46139482.7fa69c"],["389ec9bf.42e5e6"],["8a6ff618.023c7"]]},{"id":"4c68fe7a.086378","type":"link out","z":"f79c229d.089ba8","name":"","links":["b6d6376b.2e99e8"],"x":815,"y":440,"wires":[]},{"id":"46139482.7fa69c","type":"link out","z":"f79c229d.089ba8","name":"","links":["dc5e5f91.4a58d8"],"x":815,"y":480,"wires":[]},{"id":"389ec9bf.42e5e6","type":"link out","z":"f79c229d.089ba8","name":"","links":["f7d65665.e16d48"],"x":815,"y":520,"wires":[]},{"id":"b6d6376b.2e99e8","type":"link in","z":"f79c229d.089ba8","name":"","links":["4c68fe7a.086378"],"x":175,"y":540,"wires":[["64580bac.64939c"]]},{"id":"dc5e5f91.4a58d8","type":"link in","z":"f79c229d.089ba8","name":"","links":["46139482.7fa69c"],"x":175,"y":580,"wires":[["70b5214a.eda82"]]},{"id":"f7d65665.e16d48","type":"link in","z":"f79c229d.089ba8","name":"","links":["389ec9bf.42e5e6"],"x":175,"y":620,"wires":[["54f624d8.d272cc"]]},{"id":"64580bac.64939c","type":"function","z":"f79c229d.089ba8","name":"Power ON","func":"msg.payload = [\n {act: \"w\",\n add: 0x23,\n cmd: 0x01,\n v: []\n }];\n\nreturn msg;","outputs":1,"noerr":0,"x":300,"y":540,"wires":[["49e0f3e2.815604"]]},{"id":"70b5214a.eda82","type":"function","z":"f79c229d.089ba8","name":"Low-Res","func":"msg.payload = [\n {act: \"w\", \n add: 0x23, \n cmd: 0x13, \n v: []\n }];\n\nreturn msg;","outputs":1,"noerr":0,"x":300,"y":580,"wires":[["49e0f3e2.815604"]]},{"id":"54f624d8.d272cc","type":"function","z":"f79c229d.089ba8","name":"GET DATA","func":"msg.payload = [\n {act: \"r\",\n add: 0x23, \n cmd: 0x00, \n len: 2\n }];\nreturn msg;","outputs":1,"noerr":0,"x":310,"y":620,"wires":[["d6ecd401.5dd178"]]},{"id":"8a6ff618.023c7","type":"function","z":"f79c229d.089ba8","name":"データ値変換","func":"\nvar result = msg.payload[0];\n\nvar val = (Number(result[0]) * 256 + Number(result[1])) / 1.2\n\nmsg.payload = Math.floor(val);\nreturn msg;","outputs":1,"noerr":0,"x":740,"y":580,"wires":[["a318e7cd.52d418","922bfc56.46cf58"]]},{"id":"a318e7cd.52d418","type":"debug","z":"f79c229d.089ba8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":790,"y":620,"wires":[]},{"id":"458f8a77.9f9b84","type":"function","z":"f79c229d.089ba8","name":"cnt++","func":"msg.cnt = msg.cnt + 1;\nreturn msg;","outputs":1,"noerr":0,"x":550,"y":500,"wires":[["50f24374.03ce7c"]]},{"id":"47618ac5.d4229c","type":"function","z":"f79c229d.089ba8","name":"Power OFF","func":"msg.payload = [\n {act: \"w\",\n add: 0x23,\n cmd: 0x00,\n v: []\n }];\nreturn msg;","outputs":1,"noerr":0,"x":310,"y":500,"wires":[["49e0f3e2.815604"]]},{"id":"d6ecd401.5dd178","type":"delay","z":"f79c229d.089ba8","name":"wait","pauseType":"delayv","timeout":"0.02","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":450,"y":620,"wires":[["49e0f3e2.815604"]]},{"id":"922bfc56.46cf58","type":"link out","z":"f79c229d.089ba8","name":"","links":["f4295945.c986e"],"x":875,"y":580,"wires":[]},{"id":"f4295945.c986e","type":"link in","z":"f79c229d.089ba8","name":"","links":["922bfc56.46cf58"],"x":175,"y":440,"wires":[["a273ee6.e422f1"]]},{"id":"a273ee6.e422f1","type":"delay","z":"f79c229d.089ba8","name":"wait","pauseType":"delayv","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":290,"y":440,"wires":[["20964947.0a40e6"]]},{"id":"49e0f3e2.815604","type":"Tibbit-#00","z":"f79c229d.089ba8","name":"","tpSlot":"S01","communication":"I2C","pinA":"","pinB":"","pinC":"","pinD":"","i2cBaudRateK":"100","spiSpeed":"500","spiMode":"1","spiEndian":"1","serialConf":"e0b7a608.f6d748","connectedStatus":"start","host":"","x":520,"y":560,"wires":[["458f8a77.9f9b84"]]},{"id":"e0b7a608.f6d748","type":"tp-config-serial","z":"","serialName":"","hardwareFlow":"off","seriBaudRate":"9600","seriDataBits":"8","seriParity":"none","seriStartBits":"1","seriStopBits":"1","seriSplitInput":"1","seriOnTheCharactor":"\\n","seriAfterATimeoutOf":"0","seriIntoFixedLengthOf":"0"}] |
このように、#00ノードを使用して、センサーデバイスなどからI2Cで制御を行うことができます。
SPI
スロットに接続された機器に対して、SPIを使用することができます。
一つの例として、以下のようにフローを配置します。
次に#00ノードの設定を開きます。
通信に「SPI」、スロットに「S01」を選択します。
functionノードは以下のようにします。
・add: address
・v: value
1 2 3 4 5 |
msg.payload = [ {add: 0x80, v: [0x00]}, {add: 0x80, v: [0x00]} ] return msg; |
これでNode-REDのデプロイを行います。
injectノードをクリックするたびに、値が取得できます。
Serial
スロットに接続された機器に対して、Serialを使用することができます。
シリアル通信を行う場合は、#01ブロックなどを使用することになりますので、
#01 RS232トランシーバのチュートリアルを参考にしてください。