Help us understand the problem. What is going on with this article?

Wio LTE君とSORACOM Beamで「だっしゅぼたん」を作る

More than 1 year has passed since last update.

作ったもの

これだよ

IMG_0181.JPG

このエントリーでは、このボタンを作るにあたって解説します。SORACOM Beam とか ifttt については解説しません(!?)

構成図

SORACOM Beam と ifttt と MicroBot Push を組み合わせて、ガレージの「開」ボタンを押す、壮大な仕組みを実現しています

Handmade Dash Button

興味のある方はコメントください。

ハードウェア編

プラボックスの中身はこんな感じです。

IMG_0183.JPG

※2/13: コメントにもいただきましたが、このままだとWio LTEとGrove端子台が触れ合ってしまうかもしれませんので、Grove端子台を固定するなりビニール袋等で絶縁するようにしましょう

買ったもののまとめ

計 3380円 (Wio LTE本体は含まれてないよ)

あと10KΩ抵抗とかは一般のご家庭にもあるかと思いますので、そちらをお使いください。

プラボックス

日東工業 / PCS形プラボックス Φ30穴加工タイプ (約1200円) を使いました。

その他「コントロールボックス」や「コマンドボックス」というキーワードで探せば見つかるでしょう
注意: 材質はプラスチックなモノを選びましょう。金属製なボックスでアンテナを中に格納してしまうと、電波が(すごく)弱くなります。

プラボックスへの Wio LTE 取り付けTIPS

Wio LTE のネジ穴サイズはM3です。通常はプラボックスに穴をあけるなどしてM3の受けを作る必要がありましたが、貼りつけタイプのボスがあるんですね、便利です。

タカチ電機工業 / T-600型貼り付けボス (約650円)
Mbed Cloudの話とWio LTEの話で紹介されてた。

IMG_0221.JPG

こんな感じで取り付けることができます。あとは裏面に粘着面があるので、それでプラボックスに貼りつければOK!

IMG_0222.JPG

ちなみにWio LTEのネジ穴周辺にも実装がされているため、金属製のネジだとショートしたりするかも。ということで、ポリカーボネートなネジを使うのがいいかもしれません。
※ただし締めすぎると実装が剥げてしまうかもしれないので注意!!

エスコ / M 3 x10mm 鍋頭小ねじ(ポリカーボネート/50本) (約400円)

押しボタンスイッチと回路

押しボタンスイッチはA接点で、直径30mmの穴にピッタリとハマり、しかも乱暴に扱っても壊れない感があるのが IDEC(和泉電気) / Φ30 押ボタンスイッチ(大形) (約770円) です。
※ちなみに直径30mmのほか、22mmってのが規格であるみたい。そっちの方が小さく済むかも。

使い方はタクトスイッチと全く同じです。同じなので、プルアップ抵抗も必要になります。(Wio LTE は Arduino のように内部にプルアップ抵抗の仕組みがありません)

10KΩの抵抗を、ブレッドボードなど使わず直接接続しています。
接続先はWio LTEに直接ではなく Grove Screw Terminal (端子台モジュール) に接続しました

IMG_0219.JPG

IMG_0220.JPG

ファームウェア編

attachInterrupt() を使ってボタンが押された時のピン状態変化に応じて change_state() でステートを変化させ、loop() 内でそのステートに応じた処理を行うようにしています

  • change_state() 内のdelayはチャタリング回避です (雑実装)
  • send_to_soracom() 内では毎度 "モデムON → 接続 → 送信 → 切断 → モデムOFF" をしています。消費電力削減と再接続実装の回避です (雑実装)
    • 送信が完了するまで15~20秒/回かかります
    • 送信時の最大消費電力は300mA程度、それ以外の通常時は15mA~20mA程度です
:WioLTE_dashbutton.ino
#include <WioLTEforArduino.h>
#include <stdio.h>
#define BUTTON_PIN  (WIOLTE_D38)

WioLTE Wio;

volatile bool StateChanged = false;
volatile bool State = false;

void change_state()
{
  State = !State;
  StateChanged = true;
  delay(150);
}

void send_to_soracom()
{
  Wio.PowerSupplyLTE(true);
  delay(500);
  if (!Wio.TurnOnOrReset()) { SerialUSB.println("TurnOnOrReset Error"); return; } 
  if (!Wio.Activate("soracom.io", "sora", "sora")) { SerialUSB.println("Activate Error"); return; }
  int connectId;
  connectId = Wio.SocketOpen("beam.soracom.io", 23080, WIOLTE_UDP);
  if (connectId < 0) { SerialUSB.println("SocketOpen Error"); return; }
  char data[100];
  sprintf(data, "{\"uptime\":%lu}", millis() / 1000);
  if (!Wio.SocketSend(connectId, data)) { SerialUSB.println("SocketSend Error"); return; }
  char res[128];
  int len;
  len = Wio.SocketReceive(connectId, res, sizeof (res), 3000);
  if (len < 0) { SerialUSB.println("Error len < 0"); return; }
  if (len == 0) { SerialUSB.println("Error len == 0"); return; }
  if (!Wio.SocketClose(connectId)) { SerialUSB.println("SocketClose Error"); return; }
  if (!Wio.Deactivate()) { SerialUSB.println("Deactivate Error"); return; }
  Wio.PowerSupplyLTE(false);
}

void setup()
{
  Wio.Init();
  pinMode(BUTTON_PIN, INPUT);
  attachInterrupt(BUTTON_PIN, change_state, CHANGE);
}

void loop()
{
  if (StateChanged) {
    if (State) {
      send_to_soracom();
    }
    StateChanged = false;
  }
}

あとがき

壮大なピタゴラスイッチ。
電源をなんとかしたい!

ma2shita
(松下 享平) IoT通信プラットフォーム「ソラコム」のエバンジェリストで年間140回以上の講演を通じ #IoT の事例や技術情報を日々紹介。LPWAの選び方や共著で「公式ガイドブック SORACOM プラットフォーム」を書いています。2020年の #AWS IoT Heroです。"Max"はニックネームです、フォローやメッセージはお気軽に! Twitterは @ma2shita です。
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