Enebular でTwitterをトリガーにNefry(古いほう)をLチカ


はじめまして。yukinolinです。
IoT初心者。2年ほど前にNefryをいじり始めたけど、訳あって1年ほど休眠。先日Enebularの勉強会に参加して、久々にやる気が出たので今回とりあえずやってみました。

作ったものは以下の通り。
「指定のハッシュタグがつけられたツイートがあれば、フォロワーの人数に合わせて、NefryのLEDの色が変わる」
大変だったのは、TwitterのDeveloper申請。申請目的を英語300字超で書く必要があります。適当に書きましたが、ここで心が折れる人も多いだろうな。

使ったもの

開発環境:Enebular
デバイス:Nefry(ESP8266)
クラウド:Nefryクラウド

EnebularのFlow


こんな感じでつなぎました。
ノードを配置して、つなぐだけなら30秒もかからないですね。すごく簡単。

手順1 twitterノードを設定する

Twitterノードをダブルクリックすると、以下のウィンドウが出てくるので、ここに設定を入力。

 Twitter ID:Twitter Developerを申請したID
 検索対象:全ての公開ツイート、フォローしているユーザ、特定のユーザ、ダイレクトメッセージから選択
 検索条件:@(ユーザ),#(ハッシュタグ)が設定可能 とりあえず、#JAPANとしました。
 名前:ノードの名前(好きにつけて良さそう)

ここで、Twitter IDを設定するには横の鉛筆マークをクリックして以下のウィンドウに入力する必要があります。

Twitter developerの申請ができていない方は、「1.次のURLから・・・」のリンクから申請をする必要があります。

冒頭でも言いましたが、ここが最難関でした。英語300字以上でこれから作るAppの説明を求められます。そんなもんねーよ!と言いたいところですが、ここは我慢して、大人の対応で乗り切りました。

関連記事もググればいくつか見つかったので、今からやる人は頑張ってみてください。

とりあえず、ここまでの設定で、Twitterノードに検索したTweetの情報が入ってきます。それをmsgオブジェクト?に入れて次のFunctionノードに渡しているようです。
(あまり理解していないので、間違っていたら誰か教えてください)

手順2 ほしい情報をJSON形式に整える

次にFunctionノードを設定します。

あらかじめ、Nefryクラウドの登録しておきます。
そこでつけたuser(ユーザー名)と、送られてくるkeyをそれぞれ入力します。

この辺りは、ちゃんとくさんのこちらの記事を勉強させていただきました。
(ありがとうございます)

最後の一行data: msg.tweet.user.friends_countは、ツイートから取り出したい情報です。

こちらにTweet Objectの詳細があります。ここを見ると、いろんなデータを取り出せることがわかります。またの機会にいろいろ試してみようと思います。

手順3 NefryクラウドへPOSTする

最後にHTTP requestノードを以下のように設定します。

 メソッド:POST
 URL:http://cloud.nefry.studio:1880/nefrysetting/setdata
 出力形式:JSON
 名前:ノードの名前(好きにつけて良さそう)

これでデプロイすると、デバッグ画面にこんな感じでデータが上がってきます。

手順4 Nefry側のコードを作成してアップロード

コードは以下のように書きました。
ツイート主のフォロワーが100人以下なら赤、1000人以下なら緑、それ以上は青色が光るようになっています。

#include <Nefry.h>
#include <NefryCloud.h>

NefryCloud nefryCloud;

char* USER = "Nefryクラウドのユーザ";
char* KEY = "Nefryクラウドのkey";

void onpush(int count);

void setup() {
  nefryCloud.begin(USER, KEY);
  nefryCloud.on(onpush);

}

void loop() {
  nefryCloud.loop();
}

void onpush(String str) {
  Nefry.println(str);

  long num = str.toInt();


  if (num < 100) {
      Nefry.setLed(255, 0, 0);
  } else if (num < 1000) {
      Nefry.setLed(0, 255, 0);
  } else {
      Nefry.setLed(0, 0, 255);
  }

}

コンパイル時に、NefryクラウドはESP32向けなので、ESP8266ではうまくいかないかも、と警告されますが、結果的にはうまくいきました。
Nefry開発者の皆さん、ありがとうございます。

結果

こんな感じでできました。

ツイートがあったときに、デバッグエリアのデータが更新され、ほぼ同時にNefryのLEDも色が変わっています。

ところでこれ、Enebularの編集画面を落としても、Nefryが電源ON・Wifi接続中なら動き続けますね。どういう仕組みなんだ・・・?

全然理解してなくても、とりあえずこれくらいはできる、ってことですね。
今後、いろいろ試してみようと思います。