littleBit CloudBitモジュールとNode-REDをつなげてCloudBitを反応させるメモ

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を登録して操作できる状態にしておきます。

image

その上で、Getting Started with your CloudBitにアクセスします。

image

サインインします。

image

USB POWER→CloudBit→BARGRAPHの順につなぎます。

image

上部の名前の横にあるランプがグリーンになって接続されたのを確認します。

DeviceIDとAccess Tokenを確認

image

APIを使うためにDeviceIDとAccess Tokenを確認しておきます。SETTINGページに移動します。

image

SETTINGページが表示されたら、下にスクロールします。

image

下部の方にDeviceIDとAccess Tokenがあるので覚えておきましょう。(最上部のタイトルになっている自分で任意の名前をつけたものはDeviceIDではないので注意しましょう。)

APIリファレンスで仕様を確認

APIリファレンスも確認します。

image

APIリファレンスは右上のメニューをクリックします。

image

横から開いたメニューの下部にAPIリファレンスがあります。→API Reference

image

外部から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のフローは以下のとおりです。

image

injectノード→changeノード→http requestノードのフローです。

injectノード

image

indectノードでJSONデータを送ります。

image

injectノードの設定です。先ほどの「-d ‘{ “percent”: 100, “duration_ms”: 3000 }’」の部分を送る仕組みです。

changeノード

image

changeノードでURLとAuthorizationヘッダーの設定を行います。

image

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ノード

image

最後のhttp requestノードはchangeノードのpayloadで事前に設定されるので、1点だけ変更します。

image

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を!