【超入門】初めてのenebular!

いきなりですが、私はRaspberry PiやArduinoで遊ぶことが大好きです！
ですが、今までネット上のサービス(クラウドサービス、ソーシャルメディアとか)と連携して動くものを作ろうとするとプログラムをたくさん書かなければいけなくて大変でした・・・

しかし、プログラムコードを書かなくても簡単にネット上のサービスと連携したデバイスが作れるサービスがあると聞き、早速使ってみました！

# 初めてのenebular
今回使ってみるのは株式会社ウフルさんの[enebular](https://enebular.com)というサービス。
enebularとは、公式サイトのタイトルにもある通り**「あらゆるデバイスとクラウドサービスを「つなぐ」、IoTのためのデータ連携プラットフォーム」**です。
Node-REDベースで作られていて使い方もほとんど一緒。
Node-REDについては、こちらの記事で解説されてます！
なのでこちらの記事と合わせて読むと理解しやすいかもしれません。

>[PWM制御をマスターしよう！
Node-REDでサーボモータを遠隔制御する方法＆初ハンズオンレポート](https://dotstud.io/blog/nefry-servo-handson-takudooon/)

これでどんなことができるのか、早速使いながら見ていきましょう！

## "hello, world"
まずは*「hello,world」*の文字列を表示することを目標に進めていきましょう。

はじめに、enebularにユーザ登録します。
ユーザ登録はとても簡単、[enebular](https://enebular.com)の公式サイト上にある「新規登録」から「ユーザ名」「メールアドレス」「パスワード」を設定すればすぐに登録メールが届きます。
<img width="455" alt="touroku.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/93908f3f-7e4e-929c-c791-99c738fc0e6b.png">

登録が完了したら「Create Project」ボタンを押してプロジェクトを作りましょう。
<img width="250" alt="createproject.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/dfcda1ed-74f2-d38e-c7b0-8b0c3689c016.png">
作成したら、プロジェクトが追加されるのでクリックしてプロジェクトを開きましょう。
プロジェクトを開くと右下に(+)ボタンがあるのでここから「flow(フロー)」を追加します。
<img width="456" alt="plus.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/e5f70f78-5894-b3a4-b3be-bf45357f9ad6.png">
「flow」を選択して、名前をつけたら「Continue」を押しましょう。
<img width="500" alt="CreateFlow.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/61c0b06e-9bdd-6799-8643-635a5bad3aff.png">
そして「EditFlow」を押したらいよいよプログラム開始です！
<img width="276" alt="EditFlow.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/a2b522d1-266d-983c-b3cb-3882c8492be7.png">

プログラムと言っても中央のフローマップに左側にあるアイコンを並べて繋げるだけ。超絶簡単でわかりやすいです！
<img width="500" alt="Editor.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/57d742d7-4689-58b5-22f7-37de38b45520.png">
この画面はまんまNode-REDですね。

早速左側のアイコンから「inject」と「debug」をドラッグ&ドロップしてフローマップに並べましょう。
この並べたアイコンのことをそれぞれ**「ノード」**と呼びます。
ノードをダブルクリックすると、設定画面が出てきます。
ここで、それぞれノードの働きを設定することができます。
<img width="757" alt="EditNode.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/d0e124d4-1fc5-0836-b863-5c76508cbde0.png">

ノードの設定をしたら、ノード同士を線でつなぎましょう。
以下の画像が、フローの完成形と設定値です。
<img width="592" alt="helloFlow.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/234c62c0-efd3-1814-fcf7-ed1cf11cee75.png">

さて、なんとこれだけでhello,worldプログラムは完成です！
画面右上にある「Deploy」を押すとプログラムが動きが動き出します。
試しに「inject」ノードの左側にある四角いボタンを押すとデバックタブに「hello,world」が表示されると思います！！
<img width="198" alt="kokoosu.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/62a22be0-af80-50fe-dbef-d66ee0fc4217.png">
<img width="352" alt="debug.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/b9517eed-90b3-569f-b3d2-61f434570a42.png">
いつになっても新しい環境でhello,worldできた時の感動は変わりませんね・・・！

# enebular + Raspberry Pi + Slack で遠隔Lチカ
enebularの特徴は何と言ってもネット上のサービスとハードウェアの連携のしやすさ！
ということで、サービスである「Slack」から「Raspberry Pi」に繋いだLEDを遠隔操作できるようにしましょう。
### Slack と eneblarの連携
Slackに打ち込まれたメッセージをeneblarで受け取って見ましょう。
メッセージをキャッチしたいワークスペースにSlackBotを追加します。
<img width="231" alt="AddApp.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/7ee40ddd-e80b-5946-2018-4fbe32e9586e.png">
Botsを選んで「設定を追加」。
<img width="687" alt="bots.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/1ebd9f8d-2aa1-b1a9-fd97-e4a100de46f8.png">
Botのユーザ名を設定して「ボットインテグレーションを追加する」。
すると「インテグレーションの設定」の項目に**「APIトークン」**が表示されると思います。
eneblarで以下のようなフローを組んだら、「Slack Bot In」ノード設定項目の「Bot API Token」に先ほどの「APIトークン」をコピペで貼り付けましょう。
<img width="449" alt="BotTest.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/a568aa5d-1328-be6c-649f-65085da539bf.png">
そして<font color="Red">**「Deploy」**</font>！!
Slackボットに直接、あるいはSlackボットが居るチャンネルに何か書き込む度に「Debug Tab」に書き込んだ文字列が表示されると思います。

### enebular と Raspberry Piの連携
まずはRaspberry PiにLEDを繋げましょう。
<img src="https://qiita-image-store.s3.amazonaws.com/0/259617/4a847315-f4af-e6aa-0b17-cd4720682af9.png" width=50%>
eneblarにノードを追加します。
<img width="483" alt="eneblar_Lchika.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/685ef4ce-b840-c8c2-422a-f21091831120.png">
「mqtt」ノードの設定で、「Server」の項目の横にある鉛筆のマークを押して、以下のように設定します。
<img width="651" alt="mqtt.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/49e7b9f7-0134-2486-4fb1-4d43d3274c23.png">
その他設定値は以下の通り。
<img width="507" alt="edit_mqtt.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/9f60c717-657b-4d21-34c1-9c591bb3f591.png">

「Topic」に絶対に人と被らないIDを設定します。
多分、"ユーザ名"+"日時"を設定すれば被らないでしょう。(例 2018/01/01 12:00の場合→ taisyo201801011200)
※ここに設定した値はオープンな場所に公開されるので注意

今回「Raspberry Pi」のGPIOピンを操作するのに「RPi.GPIO」というライブラリを使います。
「Raspberry Pi」のターミナルでRPi.GPIOが入っているか確認します。

```
$ pip list | grep RPi.GPIO
```

存在しない場合、インストールします。

``` 
$ pip install RPi.GPIO
```
<br>
ここからは、Raspberry PiのNode-REDを使います。
「Raspberry Pi」のOSであるRaspbianの最新版ではNode-REDがデフォルトでインストールされています。
「RaspberryPi」のターミナルで以下のコマンドを打ち、Node-REDを起動します。

```
$ node-red-start
```

起動したら、RaspberryPiのブラウザか、RaspberryPiにSSH接続できるパソコンのブラウザで以下のURLにアクセスします。
http://raspberrypi.local:1880/

Node-REDのフロー編集画面が開くと思うので、メニューから[読み込み]→[クリップボード]を選びます。<img width="506" alt="read.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/65b19daf-6b17-03e0-cbea-09e7174045b6.png">

出てきたウィンドウに以下のコードをコピペします。

```json:Lchika-Flow
[
    {
        "id": "ee01f7d0.774468",
        "type": "tab",
        "label": "フロー 1",
        "disabled": false,
        "info": ""
    },
    {
        "id": "3257f591.c8983a",
        "type": "mqtt in",
        "z": "ee01f7d0.774468",
        "name": "",
        "topic": "",
        "qos": "2",
        "broker": "",
        "x": 70,
        "y": 140,
        "wires": [
            [
                "a5a393a3.36f73"
            ]
        ]
    },
    {
        "id": "a5a393a3.36f73",
        "type": "switch",
        "z": "ee01f7d0.774468",
        "name": "ON-OFF分岐",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "ON",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "OFF",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 210,
        "y": 140,
        "wires": [
            [
                "a808f88e.4fdd18"
            ],
            [
                "598104ad.83547c"
            ]
        ]
    },
    {
        "id": "a808f88e.4fdd18",
        "type": "change",
        "z": "ee01f7d0.774468",
        "name": "\"ON\"→1",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "1",
                "tot": "num"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 380,
        "y": 100,
        "wires": [
            [
                "d8bd6341.142b2"
            ]
        ]
    },
    {
        "id": "598104ad.83547c",
        "type": "change",
        "z": "ee01f7d0.774468",
        "name": "\"OFF\"→0",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "0",
                "tot": "num"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 380,
        "y": 180,
        "wires": [
            [
                "d8bd6341.142b2"
            ]
        ]
    },
    {
        "id": "d8bd6341.142b2",
        "type": "rpi-gpio out",
        "z": "ee01f7d0.774468",
        "name": "RaspberryPi_LED",
        "pin": "11",
        "set": "",
        "level": "0",
        "freq": "",
        "out": "out",
        "x": 580,
        "y": 140,
        "wires": []
    }
]
```

すると以下のようなフローが追加されると思います。
<img width="688" alt="Node-RED_Flow.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/1fd07e66-c93f-aed3-e788-71a7b84419a3.png">
「mqtt」ノードには先ほどeneblarで設定した値と同じものを設定しましょう。
そしてeneblarとNode-RED両方で<font color="Red">**「Deploy」**</font>!!

Slackで「ON」「OFF」を書き込むとLEDをチカチカできます。
![lchika.gif](https://qiita-image-store.s3.amazonaws.com/0/259617/c6a816ea-a29e-73e2-b8f7-ce22e9d66a89.gif)
Wi-Fiに繋がっているRaspberryPiであればどこに置いても遠隔でLチカできます！

### Node-REDフロー解説
1. Node-REDに貼り付けたフローはenebularから飛んでくるMQTTの情報をキャッチ、
1. キャッチした文字列が「ON」か「OFF」かで分岐、
1. 「ON」だったら数字の「1」をラズパイノードに、「OFF」だったら「0」をラズパイノードに送ります。
1. ラズパイノードは受け取った信号を元に設定したピン[ GPIO17(pin11) ]の出力を切り替えます。

MQTTについて詳しくは[こちらの記事](https://dotstud.io/blog/nefry-servo-handson-takudooon/#node-red-mqtt%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%9C%E3%83%A2%E3%83%BC%E3%82%BF%E3%82%92%E9%81%A0%E9%9A%94%E5%88%B6%E5%BE%A1)で解説されています。

# まとめ
今回はeneblarの始め方から、"hello,world"に"Lチカ"と簡単なチュートリアルを行いました。
これだけでもenebularの簡単さと便利さは体感できましたが、enebularの本気はまだまだこんなもんじゃありません！
次回はよりenebularの特徴を生かしたものを作ってみようと思います！！

それでは、みなさん良きenebularライフを〜