5.Tibbo-Piのオリジナルノードを作ろう

はじめに

Tibbo-Piでは、各Tibbitブロックに対するオリジナルノードをはじめから用意しておりますので、簡単に利用することができます。

しかし実際にIoTを行うにあたり、Tibbitブロック以外のセンサーやデバイスを繋ぎ、制御を行いたい場合があります。

例えば、

  • I2Cで制御されるセンサーがあり、値を取得したい
  • シリアルで通信できるデバイスがあり、制御を行いたい

など、専用のオリジナルノードを作成しておくと便利です。

Node-REDはオリジナルのノードを作ることはできますが、Tibbo-Piのオリジナルノードではさらに、各スロットに挿入されているデバイスに対して、I2C、GPIO、SPI、シリアル通信での制御まで可能になります。

 

ノードの側を作成

まずはじめに、Node-REDのオリジナルノードを作りましょう。

ブログ記事を書いていますので、そちらを参考にしてください。(公開までは不要)
参考:Node-REDでオリジナルノードを作ってみよう

以降、上記のブログ記事にて作成したsample-nodeをもとに説明します。
以下のディレクトリにファイルを作成していきます。
/home/pi/pi_nodes/node-red-contrib-sample-test/

 

Tibbo-Piを制御するための準備

ここからはTibbo-Piの制御を行うための準備が必要になります。
メインロジックはPythonでコーディングすることになります。
I2CやGPIO、SPI、シリアル通信などにより、多少コーディングが変わってきますが、以下、I2Cを例にしています。

 

sampleTest.jsの修正

以下のように修正します。

ポイント
  • 共通処理のTpCommonを読み込んでいます。pythonを呼んだり、共通処理はすべてこの中で行っています。
  • tc.onInputでは、ノードのInputsに値が渡された場合に呼ばれます。
  • tc.onOutputでは、Pythonファイルの実行結果を取得します。Outputsする値にキャストしたりします。

 

sampleTest.htmlの修正

以下のように修正します。

ポイント

・以下の行は、I2C、GPIO、SPI、シリアル通信によって変わります。ここではI2Cにしています。
communication: { value: “I2C” },

 

言語ファイルの用意

言語ファイルの用意を行うことにより、英語圏の人には英語表記にできます。
今回は最低限だけ用意しますので、以下のファイルだけ用意します。
/locales/ja/sampleTest.json

 

sampleTest.pyの用意

同じ階層に「py」ディレクトリを作成し、その中にsampleTest.pyファイルを作成します。

Node-REDを再起動しましょう
node-red-stop
node-red-start

以下のようにフローを配置します。

設定を開いてみましょう。
スロットなどを選択することができます。

これでNode-REDをデプロイします。
ノードの表示にスロット番号がついたり、「TP接続済」と表示されます。

injectノードをクリックしてみましょう。
以下のようなメッセージがデバッグタブに表示されます。
これはpythonから出力している文字です。

 

#29 温度センサからデータを取得

ここでは#29 温度センサのTibbitブロックを例にし、I2Cで制御を行い温度を取得してみます。
この段階で、Tibbo-Piを通じてI2Cを行う準備はできています。

sampleTest.pyのget_data関数だけ修正しましょう。
以下の部分がI2Cの処理で、読み込みを指示しています。
(Tibbo-Piを制御するコアプログラムで実際にI2Cが行われます)
{“act”: “r”, “add”: 0x18, “cmd”: 0x05, “len”: 2}

今回は小数点の値を返却するので、sampleTest.jsの以下の箇所を修正します。
parseFloatでキャストし、ノードのOutputsを行います。

Node-REDを再起動し確認しましょう。
#29 温度センサをSLOT1に挿入します。
injectノードをクリックすると、温度情報が取得できます。

ポイント

・メイン処理はPythonでコーディング
・メイン処理と接続、スロットの指定などは、共通処理で提供されているため個別での対応は不要
・Python側でI2Cの処理を指定し、制御自体は制御処理で行っている

そのため各ノードは、自身の制御のみを最低限行い、Tibbo-Piと連携できます。

 

参考情報

今回はI2Cを例にしました。
その他、GPIO、SPI、シリアル通信なども行うことができます。
制御したいデバイスによって、コーディングが変わってくると思います。

Tibbo-Piのオリジナルノードはgithubで公開していますので参考になります。
https://github.com/cw-tpdev/node-red-contrib-tibbo-pi-p3/

例えば、通信ごとに以下のブロックのソースが参考になります。
I2C: #28 #29 #30 #35 #36 など
GPIO: #03 #04 #38 #39 など
SPI: #42
シリアル通信: #01 #02 #05 など

このように、Tibbo-Piを使用すると、機器の接続からオリジナルノードの開発まで容易にできますので、ぜひチャレンジしてみてくださいね!