4
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Wio LTEのIFTTTサンプルコードで色々なGroveでデジタル出力するメモ

この記事は、SORACOM Advent Calendar 2017の12日目の記事です。

昨日は、 @haruka925 さんの「SORACOM Global SIMをミャンマーで使ってみた - Qiita」でした!

先日開催されたWio LTE ユーザーイベントでWio LTEと連携できるGroveを普段の実体験からというタイトルで登壇させていただきました。 @tseigo です。

その際にちょっと駆け足に説明して、もったいなかったなーと思っている、Wio LTEのIFTTTサンプルコードで色々なGroveでデジタル出力するところをお伝えします。

プログラム書いてみた

まず、

SeeedJP/WioLTEforArduino
https://github.com/SeeedJP/WioLTEforArduino

を参考にして、

WioLTEforArduino/grove-button.ino at master · SeeedJP/WioLTEforArduino
https://github.com/SeeedJP/WioLTEforArduino/blob/master/examples/grove/grove-button/grove-button.ino

が、Groveデジタル出力のサンプルコードです。

wiolte-grove-digital-input_01.jpg

こちらをWio LTEでDFUモードにして書き出しつつ、GROVEのボタン(パネルタイプ)をD38に取り付けてArduinoのシリアルモニタで見てみます。

wiolte-grove-digital-input_02.png

OFFのときは . で、ONのときは * でめちゃくちゃ分かりやすく挙動が確認できます。

IFTTTサンプルコードに合体させる

こちらを、Wio LTEのIFTTTサンプルコードと合体させます。

WioLTEforArduino/ifttt-webhook.ino at master · SeeedJP/WioLTEforArduino
https://github.com/SeeedJP/WioLTEforArduino/blob/master/examples/http/ifttt-webhook/ifttt-webhook.ino

こちらを参考に以下のように合体させます。

#include <WioLTEforArduino.h>
#include <stdio.h>

#define APN               "soracom.io"
#define USERNAME          "sora"
#define PASSWORD          "sora"

#define WEBHOOK_EVENTNAME "wiolte_uptime"
#define WEBHOOK_KEY       "WEBHOOK_KEY"
#define WEBHOOK_URL       "https://maker.ifttt.com/trigger/"WEBHOOK_EVENTNAME"/with/key/"WEBHOOK_KEY

#define BUTTON_PIN  (WIOLTE_D38)
#define INTERVAL    (1000)

// #define INTERVAL (60000)

WioLTE Wio;

void setup() {
  delay(200);

  SerialUSB.println("");
  SerialUSB.println("--- START ---------------------------------------------------");

  pinMode(BUTTON_PIN, INPUT);

  SerialUSB.println("### I/O Initialize.");
  Wio.Init();

  SerialUSB.println("### Power supply ON.");
  Wio.PowerSupplyLTE(true);
  delay(5000);

  SerialUSB.println("### Turn on or reset.");
  if (!Wio.TurnOnOrReset()) {
    SerialUSB.println("### ERROR! ###");
    return;
  }

  SerialUSB.println("### Connecting to \""APN"\".");
  delay(5000);
  if (!Wio.Activate(APN, USERNAME, PASSWORD)) {
    SerialUSB.println("### ERROR! ###");
    return;
  }
}

void loop() {
  char data[100];
  int status;

  int buttonState = digitalRead(BUTTON_PIN);
  SerialUSB.print(buttonState ? '*' : '.');

  if(buttonState == HIGH){
    SerialUSB.println("### Post.");
    sprintf(data, "{\"value1\":\"uptime %lu\"}", millis() / 1000);
    SerialUSB.print("Post:");
    SerialUSB.print(data);
    SerialUSB.println("");
    if (!Wio.HttpPost(WEBHOOK_URL, data, &status)) {
      SerialUSB.println("### ERROR! ###");
      goto err;
    }
    SerialUSB.print("Status:");
    SerialUSB.println(status);

  err:
    SerialUSB.println("### Wait.");
    delay(INTERVAL);
  }

  delay(INTERVAL);
}

改修は最低限で、IFTTTサンプルコードは60秒ごとにチェックしているため、INTERVALをGroveのON/OFFチェックのほうに寄せて1秒チェックにしつつ、押された時(buttonState == HIGH)のときだけIFTTT送信が発動するようにしています。

こちらを書き込んで動かしてみます。

wiolte-grove-digital-input_03.png

Arduinoのシリアルモニタで見ていると無事反応してます。

色々なGroveでデジタル出力してみる

Groveでデジタル出力できるものは色々あります。

今回のコードを一度書き込んでおけばGrove側を物理的に取り付け替えるだけで試せるので、Groveのプロトタイプのしやすさ、そこにWio LTEによってSORACOMのLTE通信の恩恵が得れることを、すぐ試せるのでオススメです!

wiolte-grove-digital-input_04.jpg

私の持っているものでいくつか紹介させて下さい。

wiolte-grove-digital-input_05.jpg

レゴブロックにもくっつくGrove純正のWrapperで、試しやすいように構造を仮で作ります。

wiolte-grove-digital-input_06.jpg

裏はこんなかんじ。バッテリーを支えています。

タッチセンサー

wiolte-grove-digital-input_07.jpg

まずは、タッチセンサーです。

GROVE - タッチセンサ - スイッチサイエンス

指で触るだけで反応するので、ボタンより少ない力で反応させることが出来ます。

wiolte-grove-digital-input_08.jpg

傾きセンサー

wiolte-grove-digital-input_09.jpg

つづいて、傾きセンサーです。登壇でもちらっと紹介させていただきました。

GROVE - 傾きセンサ - スイッチサイエンス

これは、このセンサーが傾くとONになる仕組みで、ボタンとは違った反応を取ることが出来ます。(センサーに刻印されているJ1の方向)

もちろん複雑な傾き変化であれば、加速度センサーやジャイロセンサーのほうが良いですが、普段が平坦であって転倒のような分かりやすい傾きを取りたい場合は用途にピッタリです。

磁気スイッチ

wiolte-grove-digital-input_10.jpg

GROVE - 磁気スイッチ - スイッチサイエンス

反応が変わると言えば、磁気スイッチもオススメです。

wiolte-grove-digital-input_11.jpg

このグリーンのブツは磁石でして、近づけるとON、普段はOFFという反応をします。これをどう使うかというと、例えばドアの開閉。ドアに磁気センサーをつけておいて、ドア枠の方に磁石を付けておくと開閉がとれます。

もっとクールな実装ですと、 @yamacho1111 さんの作られた 忘年会シーズン到来!結果にコミットするモノを作ってみた にある、ベルトの締め付け判定に使われています。ぜひご参考下さい。

ほかには?

以下のセンサーも試しました。

ほかにも、調べるときっといろいろなデジタル出力のGroveがあると思います!

まとめ

ということで、Wio LTEのIFTTTサンプルコードで色々なGroveでデジタル出力するメモをお伝えしました。

wiolte-grove-digital-input_12.png

登壇のデモは、IFTTTでは、WebHook → Slack 出力というのをやってまして、ボタンを押すたびに、このようにうまく動きました。今回の記事を書くときも、バッチリ動いていて、気持ちいい!

このように、Wio LTE + SORACOM SIM で実現しているLTE通信は安定して素晴らしいですね。Wi-Fiの場合、自前のテザリングで行ったとしても時の運というところがありますが、LTEではいつでもキビキビと良い感じに動いてました!

明日は

@kuronyankotan さんの「BLE端末から頑張ってデータ取得をしてSORACOMでデータ集積してみる」です。

私も、ちょうど、BLE関連をさわる機会が増えてきていて、BLE関連をさわる機会が増えてきていてBLEデータをネットワークにうまく送る時はいつも悩むので楽しみです!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
4
Help us understand the problem. What are the problem?