6.Tibbo-Piノード以外でTibbo-Piを制御しよう

はじめに

Tibbo-Piを制御するために、Node-REDのTibbo-Piノードを用意していますが、それ以外の方法でもTibbo-Piを制御することができます。
「Node-RED以外で制御したい!」という人向けの内容です。

 

Pythonを使用してTibbitブロックを操作したい

Tibbo-Piノードは、メインの処理はPythonで作成されており、Pythonのみで操作することも可能です。
何パターンかの方法がありますので、順に説明します。

 

config.jsonについて

実行するには、以下の設定ファイルを用意する必要があります。
/home/pi/.node-red/node_modules/node-red-contrib-tibbo-pi-p3/config/config.json

上記のファイルには、Tibbo-Piのどのスロットに何が挿入されていて、その設定情報などが定義されています。

通常は、Node-RED上に配置した「tp initialize」ノードが、フローエディタにあるTibbitノードをもとに、自動で作成します。

 

各ノードの処理をPythonで実行する

Node-REDを使ってconfig.jsonを作成

各ノードの実行はPythonで行い、config.jsonの作成はNode-REDを使用しましょう。
ここでは例として、SLOT1に#28 照度センサを挿入し、Pythonで値を取得します。

Tibbo-Pi1のSLOT1に、#28 照度センサを挿入します。

Node-REDを開き、以下のようにフローを配置します。
injectノードなどは不要で、#28ノードは配置するだけです。

#28ノードの設定を開き、接続状態に「接続しない」を選択します。
また、スロットも選択します。

ここでのポイントとして、接続状態に「接続しない」を選択することで、「設定情報は出力するがNode-REDでは実行しない」状態になります。
つまりNode-REDをconfig.jsonを作成するためだけに使用できます。

Node-REDのデプロイを行い、準備は完了です。

試しに、config.jsonを覗いてみましょう。
/home/pi/.node-red/node_modules/node-red-contrib-tibbo-pi-p3/config/config.json

SLOT1に関する情報が出力されています。

 

Pythonで実行

この状態でターミナルより、以下のコマンドを実行します。(直接Pythonで#28を実行)
一番最後の引数はスロット番号です。今回はSLOT1ですので、「S01」を指定します。
python3 -u /home/pi/.node-red/node_modules/node-red-contrib-tibbo-pi-p3/py/tp28.py S01

実行し、そのままEnterキーを押下する度に、照度の値が取れます。

出力される情報ですが以下のようになっております。[TP NODE OP]の部分は無視してください。
[TP NODE OP]6.7

今度は#39 LEDを試します。
先程同様に、SLOT1に#39 LEDを挿入し、Node-REDでノードを配置します。
以下のコマンドを実行します。

python3 -u /home/pi/.node-red/node_modules/node-red-contrib-tibbo-pi-p3/py/tp39_out.py S01

「1」または「0」を入力し、Enterキーを押下すると、LEDのON/OFFが切り替えられます。

最後に#38 Buttonも試します。
先程同様に、SLOT1に#39 Buttonを挿入し、Node-REDでノードを配置します。
以下のコマンドを実行します。

python3 -u /home/pi/.node-red/node_modules/node-red-contrib-tibbo-pi-p3/py/tp38_in.py S01

#38 Buttonを押す度に、コンソールに「1」「0」が出力されます。

標準入力に入力する値は、ノード仕様のInputsに渡す情報と同じです。
このように、Pythonを直接実行して各Tibbitブロックを操作することもできます。

 

自分で用意したPythonファイルからTibbitブロックを操作する

既存ノードのPythonを実行ではなく、別なPythonファイルでインスタンスを作成し使用する方法です。

#28 照度センサを使用しますので、これまでの手順同様、スロットへの挿入とノードの配置を行ってください。

以下のようなpythonファイルを用意しました。
Tibbo-Piのpythonパッケージをそのまま利用します。
インスタンスを作成し、実行します。

実行すると照度が取得できます。

 

Node-REDを止める

ここまでの手順は、各ノードはPythonで実行しましたが、Tibbo-Piを制御するコアプログラムについてはNode-REDで起動されていました。
そのためこれまでの手順の際、Node-REDを止めると動かなくなります。

どうしてもNode-REDを止めたい場合は、config.jsonを用意した上で、Tibbo-Piを制御するコアプログラムを手動で起動してください。

node-red-stopでNode-REDを止め、以下を実行します。

sudo python3 -uB /home/pi/.node-red/node_modules/node-red-contrib-tibbo-pi-p3/py/tpConnect.py /home/pi/.node-red/node_modules/node-red-contrib-tibbo-pi-p3/config/config.json false

そうすることにより、Node-REDを起動せず、各ノードのPythonを実行できます。

 

Python以外を使用してTibbitブロックを操作したい

Tibbo-Piを制御するコアプログラムと、各ノードの処理については、TCPで通信を行い制御を行っています。
仕様に沿ってTCP通信を行うことにより、Python以外の言語や、Tibbo-Pi端末以外からも制御が可能です。

今回はWindowsパソコンからTibbo-Piの制御を行ってみます。
あまり細かい仕様は気にせずに紹介しますので、参考までとしてください。

SLOT1に#39 LEDを挿入し、これまで同様Node-REDにノードを配置します。

tp initializeノードの設定を開き、「外部からの接続を許可する」にチェックを入れます。
※このチェックを入れると、どの端末からでもアクセス可能になりますので、セキュリティ面の考慮が必要な場合は気をつけてください。

Node-REDのデプロイを行い、準備は完了です。

Windows側ではTCP通信を行うフリーソフトを使用しました。
IPアドレスとポートを指定し接続します。ポートについては、config.jsonに記載されていますが、SLOT1のGPIOは14011ポートです。

TCPで以下のようなJSONを送信します。
送信後、Tibbo-PiのLEDが光ると思います。
[{“line”: “A”, “v”: 0}]

以下を送信するとLEDが消えます。
[{“line”: “A”, “v”: 1}]

この仕組を利用すると、Python以外でも、他の端末からでもTibbo-Piの制御を行うことができます。
I2C、GPIO、SPI、シリアル通信レベルでの操作ができます。
(例えば、VB.netからTibbo-Piを操作したり、VB.netからセンサーデバイスから値を取得するなども可能)

既存アプリと連携を取ることにより、○○になったら機器の制御を行う、LEDやビープを鳴らすなど、アイディア次第ですね!

Node-REDのノード以外でも、さまざまな方法でTibbo-Piを活用することができます。