はじめに
M5stickCに人感センサーを接続し、センサーが反応したらその時刻をGoogleのスプレッドシートに表示します。
- 必要なもの
- Googleスプレッドシートの編集
- スケッチ例
- 実行
1.必要なもの
M5StickCと人感センサーです。(SwitchSienceは年末セール中のようです)
番号 |
商品名 |
価格 |
参考販売店 |
1 |
M5StickC |
1980円(セット) 1650円(本体のみ) |
|
2 |
M5StickC PIR Hat(AS312搭載) |
363円 |
2.Googleスプレッドシートの編集
Googleスプレッドシートを使用するにはGoogleアカウントが必要です。Googleアカウントを取得したら以下にアクセスします。 sheets.google.comまたはsheets.google.com/create で直接スプレッドシートを開きます。
左上の「無題のスプレッドシート」をクリックして題名を付けます。
M5stickCのデータと取得時間を表示します。A1セルとB1セルに「メッセージ」と「時刻」を記述します。
[ツール]⇒[<>スクリプトエディタ]を選択してApp Scriptを開きます。
関数を2つ記入します。
- sheet.insertRows(2,1)
2行目に1行挿入します。 - sheet.getRange(2,1).setValue(val);
2行1列目のセル(A2)にvalを書き込みます。 - Sheet.getRange(2,2).setValue(new Date());
2行2列目のセル(B2)に日付を書き込みます。
1 2 3 4 5 6 |
function setData(sheet, val) { sheet.insertRows(2,1); sheet.getRange(2, 1).setValue(val); sheet.getRange(2, 2).setValue(new Date()); } |
doPost
WebアプリにPOSTリクエストが送られた時に実行される関数です。
- var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘シート1’);
sheetにシート1を代入します。 - var params = JSON.parse(e.postData.getDataAsString());
送られてきたデータをJSON形式に変換してpramに代入します。 - var val = params.check;
valにprams.checkの値を代入します。checkはArduinoのスケッチで定義します。
1 2 3 4 5 6 7 8 |
function doPost(e) { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1'); var params = JSON.parse(e.postData.getDataAsString()); var val = params.check; // スプレッドシートに値を代入 setData(sheet, val); } |
関数を記述したらプロジェクト名を記入します。
最後にデプロイします。
デプロイの方法が変更されているようです。右上の[デプロイ]⇒[新しいデプロイ]を選択し、[種類の選択]の横の歯車をクリックして、[ウェブアプリ]を選びます。
[アクセスできるユーザー]を[全員]にし、デプロイをクリックします。
アクセスを承認をクリックします。Choose an accountと表示されるので自分のアカウントを選択します。
「Google has’nt verified this app」と表示されるので「Advanced」をクリックします。
(日本語表記ならば以下のように表示されると思います。
「このアプリは確認されてません」と表示されるので「詳細を表示」をクリックします。)
[Go to M5stickCの人感センサープロジェクト1 (unsafe)]と表示されている部分をクリックします。
(もしくはM5stickCの人感センサープロジェクト1(安全でないページ)に移動)
[Allow]をクリックします。(もしくは「許可」をクリックします)
(GMAILに本人確認用のメールも来ます。心当たりがあるを選択します。)
ウェブアプリのURLが表示されるので、控えておきます。
URLの確認は[デプロイ]⇒[新しいデプロイ]⇒[デプロイ]で表示されます。
3.スケッチ例
データをJSONフォーマットで扱うためにArduinojsonライブラリを追加します。[スケッチ]⇒[ライブラリをインクルード]⇒[ライブラリを管理]で、ライブラリマネージャを開きます。
「Arduinojson」で検索し、インストールします。
スケッチは前回の「M5StickCと人感センサーで画像表示」を使用します。WiFi接続の記述は「M5StickC WiFi接続」を使用します。
WiFiの追加とGoogleスプレッドシートにアクセスするための記述を追加します。Googleスプレッドシートにアクセスするために、HTTPClient.hをインクルードします。インストールしたArduinojsonライブラリもインクルードします。
センサーに反応した場合に、データをGoogleスプレッドシートに送る関数sendData()を追加しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
#include "xbm1.h" #include "xbm2.h" #include <M5StickC.h> #include <HTTPClient.h> #include <ArduinoJson.h> #define D_WIFI_SSID "ここにSSIDを入力" #define D_WIFI_PASS "ここにSSIDのパスワードを入力" // スプレッドシートURL const char *host = "ここにGoogleスプレッドシートのURLを入力" ; // Json設定 StaticJsonDocument<255> json_request; char buffer[255]; int check ; //setup void setup() { M5.begin(); // Wi-Fi接続 WiFi.begin(D_WIFI_SSID, D_WIFI_PASS); Serial.print("connecting"); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(); //M5StickC設定 M5.Lcd.setRotation(3); M5.Lcd.fillScreen(BLACK); pinMode(36,INPUT_PULLUP); } // センサーに反応したらデータを送る関数 void sendData() { json_request["check"] = check; serializeJson(json_request, buffer, sizeof(buffer)); HTTPClient http; http.begin(host); http.addHeader("Content-Type", "application/json"); int status_code = http.POST((uint8_t*)buffer, strlen(buffer)); http.end(); } //loop void loop() { int x = 40; int y = 0; check = digitalRead(36) ; if(check==0){ int x = random(M5.Lcd.width() - D_Width_80); M5.Lcd.drawXBitmap(x, y, cow, D_Width_80, D_Height_80, TFT_WHITE,TFT_BLACK); delay(500); M5.Lcd.drawXBitmap(x, y, cow, D_Width_80, D_Height_80, TFT_BLACK,TFT_BLACK); }else{ M5.Lcd.drawXBitmap(x, y, face, D_Width_80,D_Height_80, TFT_BLACK, TFT_RED); delay(2000); //sendDataの実行 sendData(); } } |
4.実行
スケッチをM5StickCに書き込みます。
センサーが反応したらM5StickCのスケッチのsendData関数からデータが送られてスプレッドシートにライトされます。送付データはcheck変数の値で、checkが1の時に送付しているので、スプレッドシートには常に1が表示されます。
日付だと毎回同じなので、日時に変更します。[123]⇒[日時]で変更します。
変更後
コメント