INTEGRATION CASE

実装例

Wio LTEとAWSを連携させ、IoTサービスを開発する~オムロン絶対圧センサー編~


本コンテンツはWio LTEとAWSを連携させ、IoTサービスを開発する4-2の続きで、オムロン株式会社から発売されているGroveコネクタ付き絶対圧センサーを使ったハンズオン手順です。
(参考)オムロンがセンサーをラズパイ対応にした狙い

4-3. 絶対圧センサーの値を AWS IoT Core に送信する

下図の通りオムロン製絶対圧センサーをWio LTEに接続し、計測値を AWS IoT Core に送信します。
また、応用編では気圧の変化を高精度に検知する機能を利用し、”センサーの高さによってリパブリッシュを行い、ブザーを鳴らしてみる”という課題を設けています。是非そちらもやってみてください。

architecture_absolute.png

4-3-0. Wio LTE に絶対圧センサを取り付ける

一度、全てのセンサを取り外してください。
続いて、絶対圧センサは Wio LTE のI2Cに取り付けてください。

absolute_wioLTE.jpg

4-3-1. スケッチを作成する

  • Arduino IDE を起動する
  • メニューの [ツール] で [ボード: “Wio Tracker LTE”] と表示されていることを確認する
    表示されていない場合は一覧から “Wio Tracker LTE” を選んでください。
  • Arduino IDE の [ファイル] > [新規ファイル]を開く
  • スケッチにコードを貼り付ける
    立ち上がったファイルのスケッチを全て消し、以下のコードを貼り付けてください。
#include <WioLTEforArduino.h>
#include <WioLTEClient.h>
// https://github.com/knolleary/pubsubclient
#include <PubSubClient.h>
#include <stdio.h>
#include <Omron2SMPB02E_WIO.h>

#define INTERVAL  (5000)

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

#define MQTT_SERVER_HOST  "beam.soracom.io"
#define MQTT_SERVER_PORT  (1883)

#define ID                "WioLTE"
#define OUT_TOPIC         "absolute_pressure/pub"
#define IN_TOPIC          "absolute_pressure/sub"

WioLTE Wio;
WioLTEClient WioClient(&Wio);
PubSubClient MqttClient;

Omron2SMPB02E_WIO sensor;

void setup() {

  delay(200);

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

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

  SerialUSB.println("setup()");
  sensor.begin();
  sensor.set_mode(MODE_NORMAL);
  delay(300);

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

  // soracomへの接続設定と接続確認
  SerialUSB.println("### Connecting to \""APN"\".");
  if (!Wio.Activate(APN, USERNAME, PASSWORD)) {
    SerialUSB.println("### ERROR! ###");
    return;
  }
  // MQTT接続設定と接続確認
  SerialUSB.println("### Connecting to MQTT server \""MQTT_SERVER_HOST"\"");
  MqttClient.setServer(MQTT_SERVER_HOST, MQTT_SERVER_PORT);
  MqttClient.setClient(WioClient);
  if (!MqttClient.connect(ID)) {
    SerialUSB.println("### ERROR! ###");
    return;
  }
  MqttClient.subscribe(IN_TOPIC);

  SerialUSB.println("### Setup completed.");
}

void loop() {
  char data[100];
  float tmp = sensor.read_temp();
  SerialUSB.print("temperature ");
  SerialUSB.print(tmp);
  SerialUSB.println(" [degC]");
  float pressure = sensor.read_pressure();
  SerialUSB.print("pressure ");
  SerialUSB.print(pressure);
  SerialUSB.println(" [Pa]");
  sprintf(data, "{\"absolute_pressure\":%f,\"temperature\":%f}", pressure, tmp);
  SerialUSB.print("Publish:");
  SerialUSB.print(data);
  SerialUSB.println("");
  MqttClient.publish(OUT_TOPIC, data);

  unsigned long next = millis();
  while (millis() < next + INTERVAL)
  {
    MqttClient.loop();
  }
}
ライブラリをダウンロードする

ライブラリをこちらからダウンロードします↓
2smpb02e-grove-wio

Arduino IDE の[スケッチ] > [ライブラリをインクルード] > [.ZIP 形式のライブラリをインストール… ]をクリックする

ステップ 6-1-5. でダウンロードした zip ファイルをインストールしてください。
6-1-6.png

Wio LTE と PC を接続して DFU モードにする
新しく開いたウィンドウの[マイコンボードに書き込む](→)をクリックする

新規作成したスケッチを書き込む際、保存するかどうかを聞かれるので[キャンセル]を選択してください。
writeWioLTE.png

書き込みが完了したら、 Wio LTE を通常モードにする(RST ボタンを押せば通常モードになります)

通常モードで起動次第、 SORACOM Beam を経由し、 AWS IoT Core へデータを送信し始めます(電源投入から送信開始までは 20 ~ 25 秒程度かかります)。
トピック名が異なるので、本編のステップ 4-1-3で作成したルールは適用されません。

4-3-2. 各コンソール上でデータの取得を確認

データを取得できているか、まずはシリアルコンソール上で確認します。
Tera Term を使用したシリアルコンソールや Arduino IDE シリアルコンソールの操作方法がわからない場合は、ステップ 2-5をご確認ください。
absolute_console.png

4-3-3. AWS IoT Coreでデータを確認

ステップ 3で用意したBeamの設定とAWS IoT Core のThings, Policy の設定をそのまま使い回すことができます。
ただし、Actで作成したルールはトピックが異なるので使い回せません。

AWS IoT Core に戻り、[Test] をクリックする

test_iotCore.png

サブスクライブしてみる

すべてのトピックをサブスクライブするために、ワイルドカードの意味を持つ#を入力します。入力した後、[Subscribe to topic] をクリックします。
sub_topic.png

正しくデータが送られてきていると、赤枠内のようにデータが自動で表示される

下図のように表示されていれば成功です。センサーを持ち上げたり下ろしたりして、値が変化することを確認してください。
absolute_iotcore.png

4-3-4. 応用課題: 気圧の変化(机からの高さ)によってブザーを鳴らしてみる

お疲れ様でした。ここまでできた方は、是非以下の応用課題にも取り組んでみてください!

課題の内容:

センサーの高度によって値が変化することを利用して、一定の高さを超えたらブザーを鳴らす仕組みを作ってみましょう。以下にヒントを示しますので、挑戦してみみてください。
腕に自信のある方はヒントを見ずに先ほどのコードと本編を参考にしながら挑戦してみてください!
architecture_absolute_buzzer.png

ヒント:
  • WioLTEのソースコードを書き足しましょう
    subscribetopic にメッセージが届いたらブザーが鳴るようにソースコードを書き足します。詳細はステップ 3-6-4を参考にしてください

  • AWS IoT Core のルールを追加しましょう
    topic名を書き換え、distanceabsolute_pressure に置き換えて作成しましょう(式の調整が必要です)
    アクションはAWS IoT のトピックにメッセージを再パブリッシュするを追加しましょう。
    詳細はステップ 4-2を参考にしてください。

上手くいかない場合:
  • wioLTEのピンの設定に問題ありませんか?
    センサーを足す場合はピン設定の関数をソースコードに追記する必要があります。ステップ 3-6-4のソースコードにコメントで解説してありますので、そちらをご参照ください

  • MqttClient.setCallback関数とMqttClient.subscribe関数は追記されていますか?
    subscribeのトピックにメッセージが届いた時にどう挙動させるかは、ステップ 3-6-4のソースコードを確認してください

課題が終わったら

Wio LTEとAWSを連携させ、IoTサービスを開発するステップ 5に進んでください