らずらいと姫の挑戦日記(第32回)~Node-Redを使ってみた~
2016-12-07
今回は、CTセンサーと呼ばれる電流センサーの値を無線で送信してtwitterでつぶやく、というプログラムをNode-Redを使って初挑戦したいと思います!
測定モジュール
CTセンサー(上)と、CTセンサーが出力する値を測定するための基板をLazurite SubGHzに接続するシステムを開発したとのことなので、それを使用して電流値を無線で送信するシステムを開発しました。
使用したCTセンサーはこちらです。
CTセンサーは交流の電源に、下の写真のように取り付けることで、その信号を流れている電流を測定することが出来るモジュールです。
原理は、中学校の理科で習ったはずの…電流が流れている周りに磁束が発生するという性質を利用しているそうです。電線から発生した磁束を電流に戻すのがCTセンサーということなので、このCTセンサーで挟み込んだ信号を流れる電流を測定する事ができるという原理だそうです。
こちらの測定モジュールに関する情報は別途にさせていただいて、今回は受信した電流値をNode-Redを経由してTwitterにつぶやくというシステムを実現してみたいと思います。
Node-RED側のシステム開発
Node-REDのインストールや、LazuriteをNode-Redで使用するための環境設定はこちらのページをご確認下さい。
ということで、メニュー→プログラミング→Node-Redの順で開きます。
Node-REDを立ち上げる
Node-RED consoleのアドレス部分にHOSTのアドレス(自分を示すアドレス)が表示されるので、インターネットブラウザのアドレス部分に貼り付けるとNode-REDの画面が立ち上がります。
Lazuriteのノードを配置して無線を受信する
画面左側の①Lazurite_GatewayのLazurite Rxと②outputのdebugを画面にドラッグして配置し、線で繋ぎます。
Lazurite Rxを開き、①CHやアドレスを設定し、②『Update』をクリック、③チェックをいれて④『Done』をクリックします。
配置して線を繋いだだけで、送信側と受信側がつながりました!
Twitterにつなげる
画面左側①functionのfunctionと、②socialのtwitterを画面にドラッグして配置します。
Functionを開き、プログラムを書き込みます。
プログラムの内容はこちらです。
[java]
var newMsg;
if(msg.tx_addr[0]==36941)
{
newMsg={"payload":Date(msg.sec)+"、Ras-Pi0の電流値は"+msg.payload.split(",")[0]+"mAだよ。";
}
return newMsg;
[/java]
Node-REDではLazuriteが受信したデータが線を結んだ先のfuncionの入力にJSONという書式でデータが渡されます。このfunctionでは送信されたデータをTwitterに表示するように変更するだけで機能が実現できるんです。
プログラムのポイントは次の3つ。
- if(msg.tx_addr[0]==36941)では、受信機のアドレスを確認しています。意図しないデータはTweetしないようにしています。
- Twitterでは同じメッセージを受け付けない仕様になっているので、日付情報を入れておかないと2回目以降のメッセージを受信しなくなります。Lazurite RXのノードから出力されるJSONには、msg.secに受信した時刻が入っていますので、Date関数に入れて日付・時刻に変換しています。
- CTセンサー側は「0.01,1,0,0,1….」のようにカンマ区切りでデータを送信しているのですが、最初のデータが測定した電流値になります。それをsplit(“,”)で文字列をカンマで区切られた配列に変更し、[0]で最初の文字列を抜き出しています。
Twitterの設定
Twitter側のノードを開き、ID、パスワードなど必要事項を入力したら①Deployをクリックします。
②のdebugをクリックすると、送信された値とプログラムの内容が表示されています。
同様にTwitterでもつぶやかれています♪
以上、Node-Redを使ってみましたでした。Node-REDを使うと、必要なノードをブラウザ上で配置して線をつなぐだけ。プログラムはたったの6行で出来ちゃいました。おまじないの様に入力するコマンドも無いのでとっても簡単にできちゃいました。是非、ご活用ください!!