LoginSignup
5
5

More than 5 years have passed since last update.

SORACOM Technology Camp 2018の会場で販売していた『PUSH for Wio』を組み立ててみました

Last updated at Posted at 2018-05-03

SORACOM Technology Camp 2018の会場で販売していた『PUSH for Wio』を組み立ててみました

2018年4月26日に開催されていた『SORACOM Technology Camp 2018』の会場で、限定10個販売していて、展示物を見ることなく、一番最初にゲットさせていただきました。まだ、商品を並べる前に購入させてもらったので、特に説明書とか頂いてなく、これから組み立てる人向けに書いてみました。

180503-0002.png

動作動画

開発環境

Arduino IDE 1.8.5
ボード:Wio LTE 1.1.3
ライブラリ:Wio LTE for Arduino 1.1.10
GPS受信用のライブラリ TinyGPSPlus 1.0.2(http://arduiniana.org/libraries/tinygpsplus/)

使ったデバイス

Wio LTE with SORACOM SIM
GROVE Button(P) v1.2 (https://www.seeedstudio.com/grove-buttonp-p-1243.html)
秋月電子通商 GPS受信機キット 1PPS出力付き 「みちびき」3機受信対応 (http://akizukidenshi.com/catalog/g/gK-09991/)
GROVE - 4ピン-ジャンパメスケーブル 20cm (https://www.switch-science.com/catalog/1048/)
PUSH for Wio 1式 (3Dプリントデータは、 https://make.dmm.com/item/904124/ だと思われる)
写真のように、3Dプリントされた。箱(上下)とボタン、ネジ10本、透明アクリルの棒、3Dプリントされた治具が含まれていました。

IMG_9434.jpg

組立のコツ

3Dプリントされたもので、あまり品質が良くないので、ネジ穴がとても微妙なので、まずは、付属のネジでネジを回して、ネジ穴を作りましょう!私の場合、Wio LTEのボードを固定するネジ穴はダメダメでした。

IMG_9435.jpg

ボードを載せた写真、下の穴が見えない状況

IMG_9437.jpg

最終成果物はこんな感じ

元々、GPSは、GROVE GPSを固定するためのネジ穴なので、秋月GPSは一カ所のみで固定しています。
アクリルの棒は、フルカラーLEDの上に来るようになっているので、ホットボンドでケースに固定しました。

IMG_9446.jpg

ダメばかり言っても良くないので、ここはちゃんと考慮されている部分も紹介すると

Wio LTEはプログラムを書き込む際にDFUモードへ切り替えるために、DFUボタンを押さないといけないのですが、このケースでは、そこはちゃんと考えられていて、底面にボタン押下用の穴が空いていて、さらに、押しやすくするために、3Dプリントされた治具を使って、押しやすくしているのは感心しました。ケースを押し込むと、DFUボタンが押下されている状態になるので、その状態で、RSTボタンを押下して、ケースを離すと、DFUモードへ移行する

IMG_9439.jpg

書き込んだプログラム

電源を投入すると、LEDが緑色で光ります。
モバイル網に接続完了すると、LEDが青色に光ります。
ボタンを押下すると、LEDが赤く光り、IFTTTのWebhookをたたきに行きます。
処理が終了すると、また、青色に光るというプログラムとなっています。
IFTTTで通知する際に、value1には、日時(UTC) が入ります。この日時はGPSモジュールから取得した日時となっています。
位置情報が取得できていれば、value2に値が、緯度、緯度が記録されます。測位出来ていない場合は、空になっています。

pushwio.ino
// Wio LTE用 PUSH-WIO用のコード
// Programed by Kazuyuki Eguchi

// Serial端子に、秋月GPSGROVE - 4ピン-ジャンパメスケーブル 20cm経由で接続
// D38端子に、Grove Button(P)を接続

// TinyGPSPlus 1.0.2 http://arduiniana.org/libraries/tinygpsplus/

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

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

#define BUTTON_PIN  (WIOLTE_D38)

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

WioLTE Wio;
TinyGPSPlus gps;

char datetime[50];
char gpsdata[50];

void setup() {
  pinMode(BUTTON_PIN, INPUT);

  delay(200);

  SerialUSB.println("### I/O Initialize.");
  Wio.Init();
  Wio.LedSetRGB(0x00, 0xff, 0x00);

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

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

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

  Serial.begin(9600);
  sprintf(gpsdata," ");
  sprintf(datetime," ");
  SerialUSB.println("### Setup completed.");
}

void loop() {
  char data[100];
  int status;
  int buttonState = digitalRead(BUTTON_PIN);

  Wio.LedSetRGB(0x00, 0x00, 0xff);

  // SerialUSB.print(buttonState);

  if(gps.date.isValid())
  {
    sprintf(datetime,"%04d/%02d/%02d %02d:%02d:%02d UTC"
    ,gps.date.year()
    ,gps.date.month()
    ,gps.date.day()
    ,gps.time.hour()
    ,gps.time.minute()
    ,gps.time.second());
    // SerialUSB.println(datetime);
  }

  if (gps.location.isUpdated()){
    sprintf(gpsdata,"%f,%f",gps.location.lat(),gps.location.lng());
    // SerialUSB.println(gpsdata);
  }  

  // ボタンを押されたら、IFTTT Webhookで通知する
  if(buttonState == 1)
  {
    Wio.LedSetRGB(0xff, 0x00, 0x00);
    SerialUSB.println("### Post.");
    sprintf(data, "{\"value1\":\"%s\",\"value2\":\"%s\"}",datetime,gpsdata);
    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:
  while (Serial.available()) {
    char data = Serial.read();
    gps.encode(data);
  }
}

以上、ご参考までに

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5