verylowfreq が 2023年06月19日20時54分20秒 に編集
コメント無し
本文の変更
M5Stack Core2にUIFlow環境でプログラムを組んで、Googleスプレッドシートへログを記録するシステムを作ってみました。
M5Stack Core2にUIFlow環境でプログラムを組んで、Googleスプレッドシート (Google Apps Script) へログを記録するシステムを作ってみました。
「かんたん打刻システム」としていますが、M5Stackに接続するUnitを変えれば、いろんなログを手軽にとるシステムが組めると思います。 この記事は、以下の動画の補足記事です。プログラムはこの記事にすべて載せてあります。 しかしながらVTuberとしても活動しておりまして、なにとぞなにとぞ、動画も見てください!!!
動作している様子は 4:23 付近からです!!
@[youtube](https://youtu.be/XQfIEmJYyqw) ## システム構成 ハードウェア - M5Stack Core2 - RFID 2 Unit クラウドサービス - Google スプレッドシート - Google Apps Scriptで受信マクロを書く ## UIFlowのプログラム HTTPのPOSTで、JSON形式でGoogle Apps Scriptへ送信します。 ※最小限のプログラムなので、エラーハンドリングなどは無いです。 追加修正箇所: - `Setup`で、WiFiへ接続するブロックを最初に配置してください。 - カードのIDの読み取り失敗がしばしばあるので、空文字列の場合は再試行するなどしてください。 ![UIFlowプログラム](https://camo.elchika.com/995e2bbfbb28ce448d392b1008aabe7b7d157a17/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376633303665652d656131352d343334662d626333342d6162343139336638333839392f63363437393939662d303937322d346561662d613430622d383236643764663962343561/) ## Google Apps Scriptのコード マクロは`doPost()`でPOSTリクエストを待ち受ける仕様になっているので、その中に処理を書きます。 レスポンスは `HtmlService.createHtmlOutput()` で生成する必要があります。それ以外だとリダイレクトが発生しますが、UIFlowはリダイレクトを自動で追いかけないので、200レスポンスでないものとしてエラー処理に(SuccessではなくFailの枝に)分岐してしまいます。 ``` function doPost(e) { const postDataString = e.postData.getDataAsString(); let postData = JSON.parse(postDataString); const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; const newRow = []; const now = new Date(); let datetimeString = now.toLocaleDateString() + " " + now.toLocaleString(); if (postData["datetime"] != undefined) { datetimeString = postData["datetime"]; } newRow.push(datetimeString); newRow.push(postData["devicename"]); newRow.push(postData["action"]); newRow.push(postData["cardid"]); sheet.appendRow(newRow); const res = HtmlService.createHtmlOutput("OK"); return res; } ```
## 動作風景 動作風景の該当箇所 @[youtube](https://youtu.be/XQfIEmJYyqw?t=263)
## その他 2022年ごろの記事を見ると、ふつうにUIFlowからGoogle Apps Scriptへ送信できていたようなのですが、今回試した範囲では、「PSRAM必須」でした。ここに気が付くまでにちょっと時間をくってしまいました。 (MicroPythonのコンソールでリクエストを投げて、メモリ不測の例外を見てようやく気が付いた) 挙動を細かく追いかけてはいないのですが、1回の送信につき5秒ほどかかるようなので、高頻度な更新には向かないかもしれませんね。