言語切り替え

obniz Board 1Yで省電力な温度ロガーを作成

はじめに

obniz Board 1Y(ワンワイ)にはスリープ機能が追加されました。この機能を使うことで、電池のみで1年稼働するようなデバイスをつくれます。

今回は、計測した温度を定期的にスプレッドシートに書き込むプログラムを、スリープ機能を活用して作成していきます。

つくるもの

obnizのサーバーレスイベントとIFTTTを活用して、定期的にスプレッドシートに温度が記録されるようにします。 スプレッドシートに書き込めたら、obniz Boardはスリープを行います。

※動画内は、計測間隔を変更しています。

準備するもの

  • obniz Board 1Y
  • SHT31(温度センサー) : 秋月電子通商
  • IFTTTアカウント
  • Googleアカウント

手順

1. obnizに温度センサーを配線する

次の表のようにobnizと温度センサーを接続します。

obniz SHT31
0 +V
1 SDA
2 SCL
3 ADR
4 GND

[参考] obniz パーツライブラリ(SHT31)

2. IFTTTとGoogle連携をする

IFTTTを使って、Googleのスプレットシートに記載するのですが、その前にIFTTTがどのようなものか簡単に紹介します。

IFTTTは「もし、○○(This)が起きたら○○(That)を実行する」ということができるサービスです。 具体例で説明すると、「ツイートされたらスプレットシートに内容をまとめる」や「家に近づいたら、エアコンをつける」などといったものを作れます。

IFTTTから早速作成していきます。

まずは、もし〇〇したらの部分を設定します。「This」をクリックします。

Choose a service(Step 1 of 6 )
検索欄に「Webhooks」と入力して、絞られたものをクリックします。

Choose trigger (Step 2 of 6 )
「Receive a web request」をクリックします。

Complete trigger fields (Step 2 of 6 )
EventNameの欄に「sleep_temp」と入力し、[Create trigger]をクリックします。

次に「That」をクリックして、記録先を設定します。

Choose action service (Step 3 of 6 )
検索欄に「GoogleSheets」と入力して、絞られたものをクリックします。

(ここで使用するGoogleアカウントを選択するダイアログが開く場合があります。使用するアカウントを選択し、IFTTTからのアクセスを許可してください。)

Choose action (Step 4 of 6)
「Add row to spreadsheet」をクリックします。

Complete action fields (Steo 5 of 6)
スプレットシートに記載する情報を設定します。

  • Spreadsheet name : スプレットシート名(ここではobniz_sleep_temp)
  • Formatted row : スプレットシートにどのようなデータを書き込むのか設定
  • Drive folder path : Google Driveのどのフォルダに保存するのか設定

Review and finish (Step 6 of 6)
[Finish]をクリックすれば作成は完了です。

あと一部設定を確認しておく項目があります。

[Webhooks]の設定ページを開き、右上にある「Documentation」をクリックします。

「Your key is」と書かれている後ろの太文字をコピーしておきましょう。後ほど、プログラムのところで使用します。

3. obniz Boardを登録しよう

obnizのコンソールに移動し、「デバイス」 → 「デバイスを追加」をクリックします。

ダイアログが開いたら「obniz公式デバイスを使う」をクリックします。 あとは画面の指示にしたがって登録してください。

4. プログラムを書こう

サーバレスイベントで使うため、プログラムをリポジトリにいれます。
obnizのコンソールに移動し、「リポジトリ」→ 「新規作成」を行います。

ダイアログが表示されるので、次のように設定します。

  • タイプ : WebApp
  • アクセスレベル : 非公開
  • ファイル名 : お好みで(今回はsleep_temp)

設定できたら、「作成」をクリックします。 そうすると、プログラムの入力画面がでるので、次のプログラムに置き換えます。

以下の2箇所を修正します。

  • Your KeyをIFTTTで取得したKeyに変更
  • OBNIZ_ID_HEREをobniz Boardに表示されているIDに変更
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Sleep機能を使った温度センサー</title>
    <script src="https://unpkg.com/obniz@3.0.0/obniz.js" crossorigin="anonymous"></script>
  </head>
  <body> 
    <script>
      //-----------------------------
      // ifttt setting
      //-----------------------------
      let ifttt_event = "sleep_temp";
      let ifttt_secret_key = "Your Key";

      //Timeout 25s
      let tid = setTimeout(()=>{
        let dt = new Date();
        dt.setMinutes(Math.floor(dt.getMinutes()/10)*10+10,0,0);
        obniz.sleep(dt);
      },25000);

      //-----------------------------
      // obniz setting
      //-----------------------------      
      let obniz = new Obniz("OBNIZ_ID_HERE");
      obniz.onconnect = async () => {
        //センシング
        var sensor = obniz.wired("SHT31", {vcc : 0, sda:1, scl:2, adr:3, gnd:4, addressmode:5});
        var temp = await sensor.getTempWait();
        var humd = await sensor.getHumdWait();
        console.log('temperature:' + temp);
        console.log('humidity:' + humd);

        //送信データ作成
        var formData = new FormData();
        formData.append('value1',temp);
        formData.append('value2',humd);

        //IFTTTリクエスト
        await fetch(`https://maker.ifttt.com/trigger/${ifttt_event}/with/key/${ifttt_secret_key}`, {
          method: 'POST',
          mode: "no-cors",
          body: formData
        }).then(()=>console.log("success")).catch((error) => console.log(error));

        //20分ごとに起動するように
        let dt = new Date();
        dt.setMinutes(Math.floor(dt.getMinutes()/10)*10+20,0,0);
        obniz.sleep(dt);
        //program finish wait...
        await obniz.wait(1000);
        clearTimeout(tid);
        if(typeof done === "function"){
          done();
        }
      }
    </script>
  </body>
</html>

プログラムができたら左上にマウスを合わせると「保存」がでてくるので「保存」をクリックします。

5. サーバーレスイベントを設定する

サーバーレスイベントとは、本当はそれぞれが必要になるサーバーを用意しなくても簡単にobnizを使える機能です。

obnizのコンソールから「サーバーレスイベント」 → 「新規作成」をクリックします。

設定項目が複数出てきますが、順に設定していきましょう。

  • 名前 : お好みで(今回はSleepTempEvent)
  • 実行するWebApp : 先ほど保存したプログラム名
  • きっかけ : obniz Hardware Event
    • obniz : 今回温度測定したいobnizのID
    • Event : online

設定できたら、「作成」をクリックしましょう! これで準備は完了です。

動かす

20分に1回スプレットシートに保存されているのが確認できます。

obnizの動作も20分に1回画面がついて、オンラインになってすぐ画面が切れてまたスリープしているのが確認できます。 (IFTTTは最大15分の遅延の可能性があるため、すぐに反応しないことがあるかもしれません。)

※動画内は、計測間隔を変更しています。

おわりに

このようにIFTTTとスリープ機能を使って省電力な温度計測デバイスを簡単に作れます。

obnizを使えば、遠隔地にあってもコンソール上でスリープ間隔を変えることできます。
また、別の種類のセンサーに交換をしてもプログラムを簡単に更新できるメリットもあります。

ぜひobniz Board 1Yを使って作品を作ってみてはいかがでしょうか!

関連記事