littleBits の CloudBit ビットモジュールを動かせたので、つづいてlittleBit CloudBitモジュールとNode-REDをつなげてCloudBitを反応させるメモです。
今回の仕組み
littleBit CloudBitモジュールはlitteBits Cloud APIというものがあり、littleBits社のクラウド環境からAPIで操作することが可能です。
litteBits Cloud APIは、REST APIで出来ているので、Node.jsのrequestモジュールやシェルのcurlコマンドで命令しやすいものです。実際にAPIリファレンスでも、requestモジュールのコードとcurlコマンドが併記されています。
これでも、だいぶ扱いやすいものの、littleBitsの場合、普段からブロック的な思考構築をフォローするためか、littleBitsはブロック的に手軽に組めるが、IoTを操る部分がコードを書く感じで進んでしまうと微妙に思考が途切れてしまう、使う上でのシーンを想像するとやや難点があります。
そこで今回はNode-REDでREST APIを送信する形でlittleBit CloudBitモジュールとNode-REDをつなげてCloudBitを反応させます。
CloudBit側の準備
まずCloudBit側の準備です。littleBits の CloudBit ビットモジュールを動かせている前提で、つづいてCloudBit管理画面で、すでにCloudBitを登録して操作できる状態にしておきます。
その上で、Getting Started with your CloudBitにアクセスします。
サインインします。
USB POWER→CloudBit→BARGRAPHの順につなぎます。
上部の名前の横にあるランプがグリーンになって接続されたのを確認します。
DeviceIDとAccess Tokenを確認
APIを使うためにDeviceIDとAccess Tokenを確認しておきます。SETTINGページに移動します。
SETTINGページが表示されたら、下にスクロールします。
下部の方にDeviceIDとAccess Tokenがあるので覚えておきましょう。(最上部のタイトルになっている自分で任意の名前をつけたものはDeviceIDではないので注意しましょう。)
APIリファレンスで仕様を確認
APIリファレンスも確認します。
APIリファレンスは右上のメニューをクリックします。
横から開いたメニューの下部にAPIリファレンスがあります。→API Reference
外部からCloudBitを反応させるのは「Output Voltage on device」のAPIです。これがCloudBitからの出力制御をするものです。
curlの仕様を確認しておきます。
curl "https://api-http.littlebitscloud.cc/v2/devices/00e040000001/output" \ -X POST \ -H "Authorization: meowmeowmeow" \ -H "Content-type: application/json" \ -d '{ "percent": 100, "duration_ms": 3000 }'
これをNode-REDに置き換えていきましょう。
Node-RED
Node-REDのフローは以下のとおりです。
injectノード→changeノード→http requestノードのフローです。
injectノード
indectノードでJSONデータを送ります。
injectノードの設定です。先ほどの「-d ‘{ “percent”: 100, “duration_ms”: 3000 }’」の部分を送る仕組みです。
changeノード
changeノードでURLとAuthorizationヘッダーの設定を行います。
changeノードの設定です。2つの設定を行っています。
- 「-H “Authorization: meowmeowmeow” \」部分
- 値の代入を指定してmsg.headers.Authorization を対象にして後発のhttp requestノードのヘッダ指定に使います。
- 対象の値は
- 「-H “Content-type: application/json” \」
- 値の代入を指定してmsg.url を対象にして後発のhttp requestノードのURL指定に使います。meowmeowmeow
- 「-H “Content-type: application/json” \」については、Node-REDのRESTは application/json で送られるようなので設定しません。
http requestノード
最後のhttp requestノードはchangeノードのpayloadで事前に設定されるので、1点だけ変更します。
APIを仕様を見ると、ここはPOST送信なので、POSTの設定をしておきます。
これでNode-REDをデプロイしておきます。
動かしてみる
Node-REDを別PCで起動して、今回は分かりやすくタブレットで、そのNode-RED遠隔表示して、littleBitsも接続を待ちます。
CloudBitが起動したらinjectノードを操作してみましょう!
無事、3秒間ライトが点灯しました。
Node-RED JSONフローデータ
今回のNode-RED JSONフローデータです。
[ { "id": "a13b015.45642", "type": "inject", "z": "5412ad33.e43094", "name": "データ", "topic": "", "payload": "{ \"percent\": 100, \"duration_ms\": 3000 }", "payloadType": "json", "repeat": "", "crontab": "", "once": false, "x": 258, "y": 379, "wires": [ [ "f102da3.ca7ea28" ] ] }, { "id": "947e47dd.120408", "type": "http request", "z": "5412ad33.e43094", "name": "", "method": "POST", "ret": "txt", "url": "", "tls": "", "x": 710, "y": 379, "wires": [ [] ] }, { "id": "f102da3.ca7ea28", "type": "change", "z": "5412ad33.e43094", "name": "API設定", "rules": [ { "t": "set", "p": "url", "pt": "msg", "to": "https://api-http.littlebitscloud.cc/v2/devices/<DeviceID>/output", "tot": "str" }, { "t": "set", "p": "headers.Authorization", "pt": "msg", "to": "<Access Token>", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 476, "y": 380, "wires": [ [ "947e47dd.120408" ] ] } ]
このようにAPIも揃っていて複雑な連携もできるので、littleBit自体で現実世界側のブロック的な手触りを保ちつつ、IoT側のプログラミングも手軽にブロックで組むことができるので、相性は良いと思います!
それでは、よき littleBits & CloudBit & Node-RED Lifeを!